我想像OpenSSH一样处理详细级别选项:通过多次传递-v
选项。
Getopt::Std
不会增加无参数的选项值,而只是将它们设置为1
。这意味着将-vvv
与Getopt :: Std传递将产生$opt_v == 1
,在这种情况下,我需要将其设为3
。
Getopt::Long
选项的 v+
-spec可以正确理解-v -v
(目标变量以2
结尾),但是它误解了-vvv
作为名为{ {1}}-未定义并导致错误。
如何获得所需的行为?
答案 0 :(得分:3)
我在写完问题之后,但在发布之前就弄清楚了答案-经典。
处理此问题的最佳方法是将vvv
与Getopt::Long
一起使用:
bundling
这将按预期处理use Getopt::Long qw(:config bundling);
GetOptions ("v+" => \$verbose);
:-v -vv -vvv
。
如果由于某种原因您不能使用或不想使用$verbose == 6
,则唯一的另一种方法是将选项bundling
,vv
等定义为一个合理的最大值:< / p>
vvv
然后,它还会按预期处理use Getopt::Long;
GetOptions (
"v+" => \$verbose);
"vv" => sub { $verbose += 2 },
"vvv" => sub { $verbose += 3 },
);
:-v -vv -vvv
。