2012-01-18 189 views
0

我的Perl脚本以下面的方式检索参数。有Getoptions函数来检索命令行参数。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 ......

我能做些什么解决方法?

+2

对于初学者,您可以向我们展示您正在使用的CPAN中的无数标准Getopt :: *模块中的哪一个。最有可能的是,“12”是(唯一)数字选项,将“A3”和“23”作为非选项('filename')参数。 – 2012-01-18 06:38:00

回答

2

由于您正在使用GetOptions函数,我假定您正在使用GetOpts :: Long,选项规范中的“{1,}”一个或多个数量的问题在于,一旦成功匹配整数,你已经“成功”了。如果您删除了定量规格并且仅使用'writeid:i'=> \ @writeid运行,那么每个write_id都必须在命令行上标记之前,因此在解析失败时会出现错误状态。

+0

非常感谢您的信息。我不想指定-writeid 1 -writeid 2 -writeid 3.我想要-writeid 1 22 33.我可以做些什么解决方法来解决这个问题 – Arav 2012-01-18 22:42:26

+0

也许使标志-w成为-w 12 -w 13 -w 14会更容易写吗? 对不起,我不能提供更有用的东西,但没有黑客GetOpts模块,我不明白你还能做什么:( – SkryneSaver 2012-01-19 08:11:18

+0

没问题,谢谢。 – Arav 2012-01-20 05:48:42