【问题标题】:getoptions function perl multi value not workinggetoptions函数perl多值不​​起作用
【发布时间】:2013-05-07 03:20:08
【问题描述】:

具有以下 getoptions 功能。 iifiles 参数是可选的,如果提供,它可以是 1 到多个。但是,当我运行此函数时,会收到一条错误消息“选项规范中的错误”。在 solaris 10 上运行的 Perl。不确定需要为 iiles 提供哪些多值选项。

GetOptions( 'reportdate=s' => \$cmdParams{repDate}
                   ,'switch=s' =>\$cmdParams{swi}
                   ,'iiles:s{,}' => \@inputFileArray
                   ,'h|?|help'  => \$help
                   );

【问题讨论】:

  • 从答案来看,您可能需要运行perl -MGetopt::Std -e 'print "$Getopt::Std::VERSION\n"' 并将其与当前版本进行比较。您可能可以在 CPAN 上找到旧文档,但 perldoc Getopt::Std 也应该可以使用。

标签: perl


【解决方案1】:

您的Getopt::Long 版本似乎不支持重复说明符。您可以更新它,或使用逗号分隔的列表,例如:

GetOptions('iiles:s' => \$fileList);
@inputFileArray = split(/,/, $fileList);

或者,将@ARGV 中的其余参数用于解析后的列表:

GetOptions('somethings=i'=>\$some);
@inputFileArray = @ARGV;

【讨论】:

  • 非常感谢您提供的信息和解决方法。不知道为什么这个选项不起作用,因为 getoptions 是一个核心模块。
  • @Arav,您的核心模块版本取决于您使用的 Perl 版本。
  • 非常感谢您提供的信息。我正在通过以下方式检查 GetOptions 的返回值。检查的方法是否正确。 $rc=GetOptions(....) ; if((!defined($rc)) || ($rc eq "")) { print "传递给脚本的参数无效" ; }
【解决方案2】:

在 solaris 10 上运行的 Perl。不确定需要为 iiles 提供哪些多值选项。

你的问题。你运行的是什么版本的 Perl?上次我检查时,Solaris 上的 Perl 标准版本是 5.8.4。现在可能高达 5.8.9。问题是您想要的功能,将选项指定为'iiles:s{,}' => \@inputFileArray, 可能在您的Getopt::Long 版本中不存在。

运行这个命令:

 $ perldoc Getopt::Long

然后查找字符串coordinates=f{2}。如果找不到,则没有该选项。

没有它你也可以生活。 (仍然有指定多个值的方法),或者你可以试试Sun Freeware Site 看看他们是否有更高版本的Perl,或者你可以从CPAN 下载最新版本的Getopt::Long。但是,请注意确保您下载的版本适用于您的 Perl 版本。我最近注意到一些较新的模块需要 Perl 5.10 后的功能。

【讨论】:

  • 非常感谢您提供的详细信息。检查 perldoc 行坐标=f{2} 存在,但其下的版本列为 5.8.8。检查了我正在运行的 perl 版本,它说 5.8.4。正如你所说,这是一个solaris版本问题。我正在通过以下方式检查 GetOptions 的返回值。检查的方法是否正确。 $rc=GetOptions(....) ; if((!defined($rc)) || ($rc eq "")) { print "传递给脚本的参数无效" ; }
  • @Arav 我只是做GetOptions(...) or die qq(Invalid Arguments);。实际上,我使用Pod::Usage 模块及其pod2usage 函数而不是die。如果您不知道 POD 是什么,请查看perlpod
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
相关资源
最近更新 更多