【问题标题】:How can I manage command line arguments/variables for a script written in Perl?如何管理用 Perl 编写的脚本的命令行参数/变量?
【发布时间】:2011-02-24 23:28:29
【问题描述】:

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

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 相关联?

【问题讨论】:

  • 我以为GetOptions 删除了ARGV 中的条目。
  • Nitpick:即使在示例中,您也不应该真正使用 $a$b 作为变量;这些是 Perl 自己的。

标签: perl command-line-arguments


【解决方案1】:

Getopt 支持选项的参数,所以你可以说例如:

GetOptions( 'a=s' => \$a, 'b=s' => \$b);
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也可以帮到你。

    【讨论】:

      猜你喜欢
      • 2014-07-26
      • 2011-09-27
      • 1970-01-01
      • 2016-11-22
      • 2011-07-08
      • 2012-08-29
      • 1970-01-01
      • 2014-08-12
      • 2016-05-05
      相关资源
      最近更新 更多