我试图编写一个接受空格作为分隔符的解析器,但是失败了:
#!/usr/bin/env perl
use 5.036;
use warnings FATAL => 'all';
use autodie ':all';
use Getopt::ArgParse;
my $parser = Getopt::ArgParse->new_parser(
help => 'help menu',
);
$parser-> add_args(
['-foo', '-f', required => 1, type => 'Array', split => ' '],
#the above list gets output
#in: perl Getopt_ArgParse.pl -f a b c
#out: a
);
my $ns = $parser->parse_args(@ARGV);
say join ("\n", @{ $ns->foo });
然而,当我跑
perl Getopt_ArgParse.pl -f a b c
我得到的只有a
如何编写脚本,以便在运行perl Getopt_ArgParse.pl -f a b c
时获得-f
的3个值?
1条答案
按热度按时间zc0qhyus1#
所有参数中都没有空格。(您传递的是
@ARGV = ( "-f", "a", "b", "c" );
。)这表明split => ' '
对于您想要实现的目标来说是完全错误的。那么,怎样才能使用这种语法呢?虽然Getopt::Long支持这种语法,但我在Getopt::ArgParse的文档中没有看到任何支持这种语法的内容。请注意,Getopt::ArgParse不支持这种语法可能是故意的。
-f a b c
通常意味着-f a -- b c
,所以很容易混淆,人们可能会不小心使用-f a b c
,以为它意味着-f a -- b c
。那么,您可以使用什么语法来代替呢?您可以使用
-f a -f b -f c
或-f 'a b c'
。后者除了type => 'Array'
之外还需要split => ' '
,而前者可以使用或不使用split => ' '
。第一个