我正在使用Getopt::Long解析 Perl 中的命令行选项。我被迫对短命令( )使用前缀-
(一个破折号),对长命令(例如, )使用(双破折号)。-s
--
--input=file
我的问题是有一个特殊的选项 ( -r=<pattern>
) 所以它是长选项来满足参数的要求,但它必须有一个破折号 ( -
) 前缀,而不是--
像其他长选项一样的双破折号 ( )。是否可以设置Getopt::Long来接受这些?
我正在使用Getopt::Long解析 Perl 中的命令行选项。我被迫对短命令( )使用前缀-
(一个破折号),对长命令(例如, )使用(双破折号)。-s
--
--input=file
我的问题是有一个特殊的选项 ( -r=<pattern>
) 所以它是长选项来满足参数的要求,但它必须有一个破折号 ( -
) 前缀,而不是--
像其他长选项一样的双破折号 ( )。是否可以设置Getopt::Long来接受这些?
默认情况下,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
您是否设置了“捆绑”?
如果是这样,您可以禁用捆绑(但是,您将无法执行诸如 usemyprog -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/ /测试/
我错过了什么吗?