Использование Perl PAR: вводы командной строки Packer exe -s

Я часто использую параметр perl -s для ввода командной строки в мои сценарии. Теперь я хочу преобразовать некоторые из них в файлы exe с помощью PAR::packer. Есть ли способ использовать этот стиль ввода командной строки с файлами exe?

Например, я бы запустил Perl-скрипт как:

perl my_script.pl -name="Robin" -date=20130201

В этом сценарии переменные $name и $date будут инициализированы заданными значениями. Могу ли я имитировать это поведение с помощью exe-файла, который я создаю из my_script (используя PAR::packer)?


person ninjaman    schedule 01.02.2013    source источник
comment
Не знаю, но настоятельно рекомендую вместо этого перейти на Getopt::Long.   -  person melpomene    schedule 01.02.2013
comment
Я второй за комментарий Getopt :: Long. Флаг -s в лучшем случае элементарный.   -  person Jonah Bishop    schedule 01.02.2013
comment
согласился - перешел на Getopt и все работает нормально. Спасибо всем.   -  person ninjaman    schedule 05.02.2013


Ответы (1)


Вы можете добавить что-то подобное в начало ваших скриптов:

BEGIN{ 
    my %args = map {s/^-{0,2}//; split /[=:]/} @ARGV;
    no strict 'refs';
    $$_ = $args{$_} for keys %args;
    @ARGV = ();
}

Или поместите его в пакет, который вы «используете» при запуске ваших скриптов.

РЕДАКТИРОВАТЬ: изменено local => my, упростить карты и не добавлять строгие «ссылки», как было предложено.

person xlat    schedule 01.02.2013
comment
Вы не хотите этого делать. ① делать my %args = .... local здесь кажется странным. ② map +(do{...}),...map do{...},...map {...} ...! ③ Для этого требуется no strict 'refs'. ④ Это зло, но perl -Mstrict -E'@main::{qw/x y z/}=map \$_,(1..3); say for our($x, $y, $z)' тоже работает, даже при строгих рекомендациях :) Кроме того, нет никаких шансов, что это ошибочно принимают за обычные ссылки… - person amon; 01.02.2013