如何管理用Perl编写的脚本的命令行参数/变量?

时间:2010-05-28 04:13:58

标签: perl command-line-arguments

我正在尝试管理用户执行命令时指定的众多参数。到目前为止,我一直试图限制我的脚本设计来管理参数作为标志,我可以使用Getopt :: Long轻松管理,如下所示:

GetOptions ("a" => \$a, "b" => \$b);

通过这种方式,我可以检查是否指定了a或b,然后执行相应的代码/功能。

但是,我现在有一种情况,用户可以指定两个参数变量,如下所示:

command -a black -b white

这很好,但我无法想出一个好方法来确定是先指定-a还是-b。因此,在执行$ARGV[0]后,我不知道参数变量是否已分配给$ARGV[1]GetOptions ("a" => \$a, "b" => \$b);

如何判断哪个变量与-a相关联,哪个与上面示例中的-b相关联?

2 个答案:

答案 0 :(得分:6)

Getopt支持选项的参数,因此您可以说:例如:

GetOptions( 'a=s' => \$a, 'b=s' => \$);
print "a is $a and b is $b";

使用您问题中的命令行打印:

a is black and b is white

有关更多选项,请参阅manual page。这是一个非常强大的模块。

答案 1 :(得分:2)

my $a = ''; # option variable with default value (false)
my $b = ''; # option variable with default value (false)

GetOptions ('a' => \$a, 'b' => \$b);

print "a is $a and b is $b\n

请浏览Getopt::Long的perl文档。来自这份文件。

  

对GetOptions()的调用解析了   命令行参数   出现在@ARGV并设置选项   如果选项,则变量为值1   确实发生在命令行上。   否则,选项变量不是   感动。将选项值设置为   true通常被称为启用   选项。

     

指定的选项名称   GetOptions()函数被称为   选项规范。稍后我们会看到   该规范可以包含   不只是选项名称。该   调用对变量的引用   选择目的地。

     

GetOptions()将返回一个真值   如果可以处理命令行   成功。否则,它会写   错误消息到STDERR,并返回一个   错误的结果。

此外this也可以为您提供帮助。