2013-05-07 76 views
1

具有以下getoptions函数。 iifiles参数是可选的,如果提供的话它可以是1到很多。但是,当我运行这个函数得到一个错误信息“选项规格错误”。运行在solaris上的Perl 10.不知道iiles需要提供多个值选项。getoptions函数perl多值不​​起作用

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

从答案来看,您可能需要运行'perl -MGetopt :: Std -e'print'$ Getopt :: Std :: VERSION \ n“''并将其与当前版本进行比较。你也许可以在CPAN上找到旧的文档,但'perldoc Getopt :: Std'也应该可以工作。 – 2013-05-07 04:16:12

回答

3

它看起来像你的Getopt::Long版本不支持重复说明符。你可以更新它,或者使用例如逗号分隔的列表:

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

另外,解析后使用的参数的休息@ARGV的名单:在Solaris上运行

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

非常感谢您的信息和解决方法。不知道为什么这个选项不起作用,因为getoptions是一个核心模块。 – Arav 2013-05-07 04:21:20

+0

@Arav,你的核心模块版本取决于你使用的Perl版本。 – perreal 2013-05-07 04:29:11

+0

非常感谢您的信息。我正在以下面的方式检查GetOptions的返回值。这是检查的正确方法吗? $ rc = GetOptions(....);如果((!defined($ rc))||($ rc eq“”)){print“传递给脚本的参数无效”; } – Arav 2013-05-07 06:31:35

2

的Perl 10.不知道iiles需要提供多个值选项。

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

运行以下命令:

$ perldoc Getopt::Long 

,并查找字符串coordinates=f{2}。如果你找不到它,你就没有这个选择。

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

+0

非常感谢细节。检查perldoc行坐标= f {2}是否存在,但其下的版本列为5.8.8。检查我正在运行它的Perl版本5.8.4说。正如你所说这是一个solaris版本问题。我正在以下面的方式检查GetOptions的返回值。这是检查的正确方法吗? $ rc = GetOptions(....);如果((!defined($ rc))||($ rc eq“”)) { print“传递给脚本的无效参数”; } – Arav 2013-05-07 06:30:21

+0

@Arav我只是'GetOptions(...)或死亡qq(无效的参数);'。实际上,我使用[Pod :: Usage](http://perldoc.perl.org/Pod/Usage.html)模块及其''pod2usage''函数而不是'die'。如果您不知道POD是什么,请检出[perlpod](http://perldoc.perl.org/perlpod.html)。 – 2013-05-07 11:58:26

+0

非常感谢您的信息。 – Arav 2013-05-08 02:07:24