例如:
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
如何实现这一目标?
我不知道如何说服
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'
];
use strict;
use warnings;
use Getopt::Long;
my @files;
GetOptions ( "file=s{,}" => \@files );
旁注:
问题中的例子并没有什么意义。如果所有文件名都将被推送到“文件名”键,那么哈希有意义吗?
您尚未打开
use warnings;
。如果你这样做了,你会发现你实际上并没有用这一行声明任何东西:
%file;
你希望这样
my %file;
但正如另一位发帖者所说,无论如何你都不希望它出现在哈希中。我只是指出
use warnings;
的价值。