我正在开发一个perl程序(perl 5.8)。该程序使用命令行参数作为其输入。 我面临的问题是 - 我使用多个命令行参数。 E.g。
tool -f "arg1_val" -p "arg2_val"
但是在用户忘记指定值的情况下说
tool -f -p "arg2_val"
不是出错,而是假设-f = -p
我正在使用Getopt::Long和例程GetOptions
GetOptions ("f=s" => \$opt_f,
"p=s" => \$opt_p,
);
答案 0 :(得分:4)
您应该使用:
代替=
。
您应该在Getopt::Long
中查看“选项规范摘要”。这来自GetOptions
。
=s
:Option采用强制字符串参数。该字符串将分配给选项变量。注意即使是字符串参数 以 - 或 - 开头,它本身不会被视为一种选择。
:s
:Option采用可选的字符串参数。这个字符串将是 分配给选项变量。如果省略,将被分配“” (一个空字符串)。如果字符串参数以 - 或 - 开头,它将会 被视为自己的选择。
下面应该有效。如果省略任何参数,则会为相应的变量分配""
。
GetOptions ('f:s' => \$opt_f,
'p:s' => \$opt_p,
) or die("Error in command line arguments\n");
# later you can check for argument variable if any option is mendatory for you.
die "No value passed to -f\n" unless($opt_f);
答案 1 :(得分:0)
您期望什么错误? -f
选项有一个参数,并且未指定-p
选项。您必须自己处理强制或额外选项:
die "Missing -p\n" unless defined $opt_p;
die "Missing -f\n" unless defined $opt_f;
die "Extra arguments @ARGV\n" if @ARGV;