使用perl Getopt惯用地处理-v -vv -vvv之类的重复选项

时间:2019-06-02 20:26:30

标签: perl getopt

我想像OpenSSH一样处理详细级别选项:通过多次传递-v选项。

Getopt::Std不会增加无参数的选项值,而只是将它们设置为1。这意味着将-vvv与Getopt :: Std传递将产生$opt_v == 1,在这种情况下,我需要将其设为3

带有Getopt::Long选项的

v+-spec可以正确理解-v -v(目标变量以2结尾),但是它误解了-vvv作为名为{ {1}}-未定义并导致错误。

如何获得所需的行为?

1 个答案:

答案 0 :(得分:3)

我在写完问题之后,但在发布之前就弄清楚了答案-经典。


处理此问题的最佳方法是将vvvGetopt::Long一起使用:

bundling

这将按预期处理use Getopt::Long qw(:config bundling); GetOptions ("v+" => \$verbose); -v -vv -vvv


如果由于某种原因您不能使用或不想使用$verbose == 6,则唯一的另一种方法是将选项bundlingvv等定义为一个合理的最大值:< / p>

vvv

然后,它还会按预期处理use Getopt::Long; GetOptions ( "v+" => \$verbose); "vv" => sub { $verbose += 2 }, "vvv" => sub { $verbose += 3 }, ); -v -vv -vvv