Getopt::Long и подпрограммы в GetOptions

есть ли возможность передавать аргументы подпрограмме, вызываемой через 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, если возможный

Благодарность

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
135
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
"pandora=s" => sub { my ($optname, $optval) = @_; Salt($optval) },

Он также может обрабатывать хэши.

См. раздел Пользовательские подпрограммы для обработки параметров в документации.

Спасибо за быстрый ответ. работает как шарм (отметит его как решенный через несколько минут)

olivierg 18.02.2019 16:39

Ты забыл = @_, если я не ошибаюсь ;)

Dada 18.02.2019 16:44

Я предпочитаю "pandora=s" => sub { my $value = $_[1]; Salt($value) },, так как первый аргумент в любом случае не используется, и даже "pandora=s" => sub { Salt($_[1]) },. Поскольку подпрограмма такая короткая, прямое использование $_[1] на самом деле делает происходящее менее запутанным — если вы вбили себе в голову два аргумента, которые получают вызовы sub{} в GetOptions.

Silvar 18.02.2019 16:46

@Silvar может быть три аргумента, если у вас есть хэш. Этот код пытается быть пояснительным, а не коротким. Я бы тоже пропустил лишние задания. :)

jhnc 18.02.2019 16:49

@jhnc Да, ты узнаешь (или тебе напоминают) что-то новое каждый день. У меня нет привычки использовать хэши в GetOptions, поэтому я забыл или никогда не удосужился изучить их использование. Возможно, в следующий раз я буду иметь это в виду, если вариант использования может извлечь из этого пользу. Спасибо.

Silvar 18.02.2019 16:50

@ysth Прочтите комментарий jhnc 3 выше; мы обсуждали аргументы sub{} в GetOptions в целом, а не вопрос или решение.

Silvar 20.02.2019 00:23

Другие вопросы по теме