Getopt::Long 在哈希选项中推送多个值

问题描述 投票:0回答:3

例如:

use Getopt::Long;
%file ;
GetOptions('file=s%' =>
sub { push(@{$file{$_[1]}}, $_[2]) });

use Data::Dumper ;
print Dumper %file ;


print  @{$file{filename}} ;

my @file_array = @{$file_ref};

print "==\n @file_array == ";

我可以执行并且它正在工作:

 perl multipls.pl  --file filename=a.txt  --file  filename=b.txt filename=c.txt

我正在寻找

 perl multipls.pl  --file filename=a.txt  filename=b.txt filename=c.txt

如何实现这一目标?

perl
3个回答
2
投票

我不知道如何说服

Getopt::Long
完全按照你的要求去做,但我经常使用shell引用将多个项目分组到一个字符串中,然后将字符串拆分为一个数组:

use strict;
use warnings;
use Data::Dumper;
use Getopt::Long;

my @files;
my $filelist;
GetOptions('file=s' => \$filelist);

if ($filelist) {
    $filelist =~ s/^\s+//; # Remove any leading whitespace
    @files = split /\s+/, $filelist;
}
print Dumper(\@files);

带有输出的命令行示例:

perl multipls.pl --file "filename=a.txt filename=b.txt"

$VAR1 = [
          'filename=a.txt',
          'filename=b.txt'
        ];

2
投票
use strict;
use warnings;
use Getopt::Long;

my @files;

GetOptions ( "file=s{,}" => \@files );

旁注:

问题中的例子并没有什么意义。如果所有文件名都将被推送到“文件名”键,那么哈希有意义吗?


0
投票

您尚未打开

use warnings;
。如果你这样做了,你会发现你实际上并没有用这一行声明任何东西:

%file;

你希望这样

my %file;

但正如另一位发帖者所说,无论如何你都不希望它出现在哈希中。我只是指出

use warnings;
的价值。

© www.soinside.com 2019 - 2024. All rights reserved.