2016-06-16 3 views
-4

Я бегу PERL скрипт с большим количеством вариантов входов, один из них:Getopt Длинные обработки похожие входные имена

 'errorcode=s{1,}' => \@ecodes, 

У меня есть штамп в конце GetOptions если что-то вошел Безразлично» t соответствует входу. Однако, если я вводю '--ecode 500', программа запускается.

Почему сценарий не умирает? Если я попробую что-то другое, например, '-testing 123', он умрет.

+3

Не могли бы вы показать весь соответствующий код и как вы его используете? Я не могу воспроизвести вашу проблему. Имейте в виду, что Getopt :: Long поддерживает [сокращенные варианты] (http://perldoc.perl.org/Getopt/Long.html#Case-and-abbreviations) по умолчанию, поэтому в зависимости от того, какие другие параметры вы определили, ' --error', '--err' и' --e' могут работать. – ThisSuitIsBlackNot

+2

Не могли бы вы предоставить минимальную, бегущую демонстрацию проблемы? Трудно видеть, где вы перепутались, если не показываете нам! – ikegami

ответ

1

Я предполагаю, что у вас есть вариант с требуемым аргументом, такие как

"foo=s" => \$foo, 

и что вы сделали что-то вроде

program --foo --ecode 500 

, который ставит --ecode в $foo и 500 в @ARGV.

$ perl -MGetopt::Long -e' 
    use feature qw(say); 
    GetOptions("foo=s" => \$foo) 
     or die "usage\n"; 
    say "ok <$foo> <@ARGV>"; 
' -- \ 
    --ecode 500 
Unknown option: ecode 
usage 

$ perl -MGetopt::Long -e' 
    use feature qw(say); 
    GetOptions("foo=s" => \$foo) 
     or die "usage\n"; 
    say "ok <$foo> <@ARGV>"; 
' -- \ 
    --foo --ecode 500 
ok <--ecode> <500> 
+0

Хорошо, хотя это не объясняет, почему '-testing 123' будет работать, а' -ecode 500' не работает. – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot, Это просто: они сделали больше, чем просто изменение '--ecode 503' на' --testing 123'. '--ecode 503', вероятно, был частью большей командной строки в другом скрипте/программе, тогда как они, вероятно, передали' --testing 123' прямо в программу из командной строки. – ikegami

+0

Это также можно контролировать с помощью двоеточия 'foo: s', а затем в командной строке требуется значение. – zdim

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