我正在尝试编写一个程序,其中有一个选项需要
可选参数,以这样的方式接受相同的选项
时尚与 perl -i
或
git --color
完全相同相同的行为。很遗憾
Getopt::Long
不完全那样工作,我无法做到。请允许我解释一下。
示例 #1:如果您运行
perl -i .bak
,它不会使用 .bak
作为备份文件
用于就地编辑的扩展,就像 perl -i.bak
那样。
示例 #2:如果您运行
git diff --color always
,它不会指定 always
--color
选项;为此,您必须使用 --color=always
。
我称之为“非贪婪”。
我不知道如何配置
Getopt::Long
来处理这个问题
场景类似。使用它的程序在这方面表现得“贪婪”。
考虑以下程序:
#!/usr/bin/env perl
use warnings;
use strict;
use Getopt::Long;
our $color;
our $backup;
Getopt::Long::Configure(qw(no_bundling));
Getopt::Long::GetOptions(
"color:s" => \$color,
"i:s" => \$backup,
) or die(":-(\n");
printf("\$color = '%s'\n", $color // '(undef)');
printf("\$backup = '%s'\n", $backup // '(undef)');
printf("\@ARGV = '%s'\n", join(', ', @ARGV));
以及以下调用,例如:
./foo.pl -i .bak --color always
期望的行为:
$ perl ./foo.pl -i .bak --color always meow moo
$color = ''
$backup = ''
@ARGV = .bak, always, meow, moo
实际行为:
$ perl ./foo.pl -i .bak --color always meow moo
$color = 'always'
$backup = '.bak'
@ARGV = meow, moo
作为解决方法,您可以使用选项终止符
--
。
./foo.pl -i .bak --color -- always meow moo