例如:
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
如何实现这一目标?
答案 0 :(得分:2)
use strict;
use warnings;
use Getopt::Long;
my @files;
GetOptions ( "file=s{,}" => \@files );
旁注:
问题中的例子并没有多大意义。如果要将所有文件名推送到'filename'键,那么有一个哈希是否有意义?
答案 1 :(得分: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);
__END__
perl multipls.pl --file "filename=a.txt filename=b.txt"
$VAR1 = [
'filename=a.txt',
'filename=b.txt'
];
答案 2 :(得分:0)
您没有启用use warnings;
。如果你这样做了,你会发现你实际上没有用这一行声明任何内容:
%file;
你希望那是
my %file;
但正如另一张海报所说的那样,无论如何你都不想要它。我只是指出use warnings;
的价值。