当一个参数错误地将其他参数作为其值时,perl中的多个命令行参数

时间:2016-03-04 10:44:11

标签: perl

我正在开发一个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,
           );

2 个答案:

答案 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;