2012-01-18 4 views
0

Мой скрипт Perl возвращает аргумент следующим образом. Функция Getoptions используется для извлечения аргументов командной строки.Perl GetOptions Function

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

Проблема заключается в том, когда у меня есть буквенно-цифровых символов в опции writeid это не удается. Writeid определяется как integer (i {1,}) и может принимать 1 ко многим значениям. Это не сработает, если у меня есть буквенно-цифровой символ во втором значении. ./test.pl -mode report -writeid 12 A3 23 ......

Какое обходное решение я могу сделать?

+2

Для начала вы можете показать нам, какие из множества стандартных модулей Getopt :: * из CPAN вы используете. И, скорее всего, он говорит, что '12' является (только) числовой опцией, оставляя аргументы' A3' и '23' как необязательные ('filename'). –

ответ

2

Поскольку вы используете функцию GetOptions, я предполагаю, что вы используете GetOpts :: Long, проблема с «{1,}» одним или несколькими значениями в спецификации опций заключается в том, что после успешного сопоставления целого числа, вы «преуспели». если вы удалили количественную спецификацию и просто запустили с помощью «writeid: i» => \ @writeid, каждому write_id должен предшествовать флаг в командной строке, и вы получите сообщение об ошибке, когда он не сможет проанализировать.

+0

Большое спасибо за информацию. Я не хочу указывать -writeid 1 -writeid 2 -writeid 3. Я хочу иметь -writeid 1 22 33. Какое обходное решение я могу сделать для решения этой проблемы – Arav

+0

Возможно, сделайте флаг -w как -w 12 -w 13 -w 14 было бы легче писать? Извините, я не могу предложить ничего более полезного, но без взлома модуля GetOpts я не вижу, что еще вы можете сделать :( – SkryneSaver

+0

Нет проблем. – Arav

Смежные вопросы