3

我正在尝试管理用户在执行命令时指定的众多参数。到目前为止,我一直在尝试将我的脚本设计限制为将参数作为可以使用 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

4

2 回答 2

6

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

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

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

a is black and b is white

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

于 2010-05-28T04:28:45.863 回答
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 写入错误消息,并返回错误结果。

可以帮助你。

于 2010-05-28T04:35:00.567 回答