【问题标题】:Perl GetOptions FunctionPerl GetOptions 函数
【发布时间】:2012-01-18 21:03:27
【问题描述】:

我的 Perl 脚本以以下方式检索参数。有 Getoptions 函数来检索命令行参数。

./test.pl  -mode report -writeid 12 13 23......
$rc=GetOptions( 'mode=s' => \$cmdParams{mode}
           ,'writeid:i{1,}' => \@writeid
           ,'h|?|help'  => \$help
          );

问题是当我在 writeid 选项中有字母数字字符时,它没有失败。 Writeid 定义为整数 (i{1,}),它可以接收 1 到多个值。当我在第二个值中有字母数字字符时,它不会失败。 ./test.pl -mode report -writeid 12 A3 23......

我能做的解决方法是什么?

【问题讨论】:

  • 首先,您可以向我们展示您正在使用来自 CPAN 的无数标准 Getopt::* 模块中的哪一个。最有可能的是,12 是(唯一的)数字选项,而将 A323 作为非选项('文件名')参数。

标签: perl perl-module


【解决方案1】:

当您使用 GetOptions 函数时,我假设您使用的是 GetOpts::Long,选项规范中的“{1,}”一个或多个数量的问题在于,一旦您成功匹配了一个整数,您已经“成功”了。如果您删除了量化规范并仅使用 'writeid:i' => \@writeid 运行,则每个 write_id 必须在命令行上以标志开头,因此当它无法解析时您将获得错误状态。

【讨论】:

  • 非常感谢您提供的信息。我不想指定-writeid 1 -writeid 2 -writeid 3。我想要-writeid 1 22 33。我可以采取什么解决方法来解决这个问题
  • 也许将标志 -w 设置为 -w 12 -w 13 -w 14 会更容易编写?抱歉,我不能提供更有用的东西,但是如果不破解 GetOpts 模块,我看不出你还能做什么:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
相关资源
最近更新 更多