2010-05-28 91 views
3

我正试图管理用户执行命令时指定的众多参数。到目前为止,我一直在试图限制我的脚本设计管理​​论据,我可以轻松地与管理的Getopt ::旗龙如下:如何管理用Perl编写的脚本的命令行参数/变量?

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

这样我可以检查,看看是否a或b分别为指定并执行相应的代码/函数。

不过,我现在已经在这里用户可以指定两个参数变量的情况下,如下所示:

command -a black -b white 

这是好的,但我不能想出一个好办法,以确定是否-a或-b首先被指定。因此我不知道执行GetOptions ("a" => \$a, "b" => \$b);之后,参数变量是分配给$ARGV[0]还是$ARGV[1]

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

+0

重复:http://stackoverflow.com/questions/361752/how-can-i-pass-command-line-arguments-to-a-perl-program – lexu 2010-05-28 04:46:23

+0

我以为GetOptions从ARGV中删除了条目'。 – 2010-05-28 05:12:16

+7

Nitpick:即使在例子中,你也不应该使用'$ a'和'$ b'作为变量;那些是Perl自己的。 – 2010-05-28 05:13:24

回答

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为吨以上的选项。这是一个非常强大的模块。

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也可以帮助你。