如何使用Perl的Getopt::ArgParse拆分带空格的数组参数

oknrviil  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(161)

我试图编写一个接受空格作为分隔符的解析器,但是失败了:

#!/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个值?

zc0qhyus

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 => ' '
第一个

相关问题