Ошибка Getops в спецификации опции

Я получаю сообщение об ошибке с помощью следующего скрипта:

my $h="";
my $r="";
my $i="";
my $n="";
my $forks="";
my $global="";
my $v="";

GetOptions ("h" => \$h, #print help
            "r" => \$r, #keep all temp folder
            "i" => \$i, #include additional config file
            "n" => \$n, #do not merge temp files
            "forks=f" => \$forks, #number of forks you want to use
            "global=g" => \$global, #special config line option
             "v" => \$v #verbose option
            );

Ошибка:

Msg str "Ошибка в спецификации опции: global=g".

Кто-нибудь знает решение?

Спасибо!

2 ответа

g не является одним из поддерживаемых типов аргументов. Используя тип "string", s, исправляет ошибку:

use warnings;
use strict;
use Getopt::Long;

my $h="";
my $r="";
my $i="";
my $n="";
my $forks="";
my $global="";
my $v="";

GetOptions ("h" => \$h, #print help
            "r" => \$r, #keep all temp folder
            "i" => \$i, #include additional config file
            "n" => \$n, #do not merge temp files
            "forks=f" => \$forks, #number of forks you want to use
            "global=s" => \$global, #special config line option
             "v" => \$v #verbose option
            );

Обратитесь к Сводке характеристик опций

Если вы хотели указать сокращение для такой опции, как -f как псевдоним --forks, нужно поставить после трубы: "forks|f"

Кстати, проще предоставить хэш-ссылку для GetOptions вместо отдельных переменных. Будет проще добавлять новые опции. И если вам нужны значения по умолчанию, просто поместите их в хеш перед вызовом GetOptions.

При указании псевдонимов хэш-ключ является первой альтернативой опции.

      use warnings;
use strict;
use Getopt::Long;

my %args = ( verbose => 1 ); # say verbose is on by default

GetOptions (\%args,
        "help|h",     #print help
        "r",          #keep all temp folder
        "i",          #include additional config file
        "n",          #do not merge temp files
        "forks|f=i",  #number of forks you want to use
        "global|g=s", #special config line option
         "verbose|v"  #verbose option
        );
print_help() if $args{help};
print "working on $args{forks}" if $args{verbose};
Другие вопросы по тегам