Как я могу обработать -r=<pattern> с помощью Perl Getopt::Long?
Я анализирую параметры командной строки в Perl, используя Getopt:: Long. Я вынужден использовать префикс -
(одна черта) для коротких команд (-s
) а также --
(двойная черта) для длинных команд (например, --input=file
).
Моя проблема в том, что есть одна специальная опция (-r=<pattern>
) так что это длинный вариант для его требования к аргументу, но он должен иметь одну черту (-
) префикс не двойной тире (--
) нравятся другие длинные варианты. Можно ли настроить Getopt:: Long, чтобы принимать эти?
3 ответа
По умолчанию Getopt::Long взаимозаменяемо принимает либо одну (-), либо двойную черту (-). Итак, вы можете просто использовать --r=foo
, Вы получаете какую-либо ошибку при попытке этого?
use strict;
use warnings;
use Getopt::Long;
my $input = 2;
my $s = 0;
my $r = 3;
GetOptions(
'input=s' => \$input,
's' => \$s,
'r=s' => \$r,
);
print "input=$input\n";
print "s=$s\n";
print "r=$r\n";
Эти примеры командных строк дают одинаковые результаты:
my_program.pl --r=5
my_program.pl --r 5
my_program.pl -r=5
my_program.pl -r 5
input=2
s=0
r=5
Вы устанавливаете "связывание"?
Если это так, вы можете отключить пакетирование (но тогда вы не сможете делать такие вещи, как использование myprog -abc
вместо myprog -a -b -c
).
В противном случае, единственное, что приходит на ум сейчас, это использовать Argument Callback (<>
) и вручную разобрать эту опцию.
#!/usr/bin/perl
use strict; use warnings;
use Getopt::Long;
my $pattern;
GetOptions('r=s' => \$pattern);
print $pattern, "\n";
Выход:
C: \ Temp> zz -r = / test / /тестовое задание/ C:\Temp> zz -r /test/ /тестовое задание/
Я что-то пропустил?