如何使用Perl Getopt :: Long?</pattern>处理-a = <pattern>

时间:2010-03-16 15:13:26

标签: perl getopt-long

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

我的问题是有一个特殊选项(-r=<pattern>)因此它对参数的要求是长选项,但它必须有一个短划线(-)前缀而不是双短划线({ {1}})像其他长期选项一样。是否可以设置Getopt::Long来接受这些?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

您是否正在设置“捆绑”?

如果是这样,您可以禁用捆绑(但是,您将无法执行使用myprog -abc而非myprog -a -b -c)的操作。

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

答案 2 :(得分: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/
/test/
C:\Temp> zz -r /test/
/test/

我错过了什么吗?