2

我正在使用Getopt::Long解析 Perl 中的命令行选项。我被迫对短命令( )使用前缀-(一个破折号),对长命令(例如, )使用(双破折号)。-s----input=file

我的问题是有一个特殊的选项 ( -r=<pattern>) 所以它是长选项来满足参数的要求,但它必须有一个破折号 ( -) 前缀,而不是--像其他长选项一样的双破折号 ( )。是否可以设置Getopt::Long来接受这些?

4

3 回答 3

6

默认情况下,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
于 2010-03-16T15:37:15.787 回答
3

您是否设置了“捆绑”?

如果是这样,您可以禁用捆绑(但是,您将无法执行诸如 usemyprog -abc而不是 的事情myprog -a -b -c)。

否则,现在唯一想到的就是使用Argument Callback ( <>) 并手动解析该选项。

于 2010-03-16T15:37:03.100 回答
0
#!/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/
/测试/

我错过了什么吗?

于 2010-03-16T15:39:43.047 回答