Как я могу обработать -r = <pattern>с помощью Perl Getopt :: Long? - PullRequest
2 голосов
/ 16 марта 2010

Я анализирую параметры командной строки в Perl, используя Getopt :: Long . Я вынужден использовать префикс - (один тире) для коротких команд (-s) и -- (двойной тире) для длинных команд (например, --input=file).

Моя проблема в том, что есть одна специальная опция (-r=<pattern>), поэтому это длинная опция для требования к аргументу, но она должна иметь один префикс тире (-), а не двойной тире (--) как другие длинные варианты. Возможно ли настроить Getopt :: Long для принятия этих?

Ответы [ 3 ]

6 голосов
/ 16 марта 2010

По умолчанию 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
3 голосов
/ 16 марта 2010

Вы устанавливаете "связывание"?

Если это так, вы можете отключить связывание (но тогда вы не сможете делать что-то вроде использования myprog -abc вместо myprog -a -b -c).

В противном случае, единственное, что сейчас приходит на ум, - это использовать Аргумент обратного вызова (<>) и вручную проанализировать эту опцию.

0 голосов
/ 16 марта 2010
#!/usr/bin/perl

use strict; use warnings;

use Getopt::Long;

my $pattern;

GetOptions('r=s' => \$pattern);

print $pattern, "\n";

Выход:

C:\Temp> zz -r=/test/
/test/
C:\Temp> zz -r /test/
/test/

Я что-то упустил?

...