Ошибка 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};