2012-01-18 53 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