есть ли возможность передавать аргументы подпрограмме, вызываемой через getopt::long ? например, у меня есть этот код, вызывающий & Salt, когда пользователь указывает script.pl -аргумент Пандоры в командной строке
GetOptions ( "domain=s" => \$domain,
"pandora=s" => \&Salt,
"reverse=s" => \$reverse,
"help" => \&Usage)
or die(&Usage);
как передать аргумент в Salt? попробовал пару вещей, таких как:
GetOptions ( "domain=s" => \$domain,
"pandora=s" => \&Salt($pandora),
"reverse=s" => \$reverse,
"help" => \&Usage)
or die(&Usage);
или даже
GetOptions ( "domain=s" => \$domain,
"pandora=s" => \&Salt($_[1]),
"reverse=s" => \$reverse,
"help" => \&Usage)
or die(&Usage);
но это не сработает
я знаю, что могу заставить его работать, выполнив => $pandora, а затем используя условие в коде, которое говорит if ($pandora) {&Salt($pandora)}, но я считаю, что лучше поместить подпрограмму непосредственно в getOptions, если возможный
Благодарность





"pandora=s" => sub { my ($optname, $optval) = @_; Salt($optval) },
Он также может обрабатывать хэши.
См. раздел Пользовательские подпрограммы для обработки параметров в документации.
Ты забыл = @_, если я не ошибаюсь ;)
Я предпочитаю "pandora=s" => sub { my $value = $_[1]; Salt($value) },, так как первый аргумент в любом случае не используется, и даже "pandora=s" => sub { Salt($_[1]) },. Поскольку подпрограмма такая короткая, прямое использование $_[1] на самом деле делает происходящее менее запутанным — если вы вбили себе в голову два аргумента, которые получают вызовы sub{} в GetOptions.
@Silvar может быть три аргумента, если у вас есть хэш. Этот код пытается быть пояснительным, а не коротким. Я бы тоже пропустил лишние задания. :)
@jhnc Да, ты узнаешь (или тебе напоминают) что-то новое каждый день. У меня нет привычки использовать хэши в GetOptions, поэтому я забыл или никогда не удосужился изучить их использование. Возможно, в следующий раз я буду иметь это в виду, если вариант использования может извлечь из этого пользу. Спасибо.
@ysth Прочтите комментарий jhnc 3 выше; мы обсуждали аргументы sub{} в GetOptions в целом, а не вопрос или решение.
Спасибо за быстрый ответ. работает как шарм (отметит его как решенный через несколько минут)