我正在寻找一种在Perl脚本中加入备用数组元素的方法。例如,如果我有数组:
[max, 123, min, 111, avg, 116]
我需要输出看起来像这样:
Output: 123|111|116
由于我是perl的新手,我正在寻找一种格式化方法,如同一命令中的输出所示
答案 0 :(得分:3)
您可以使用List::Util
中的pairvalues
:
use strict;
use warnings;
use 5.010;
use List::Util qw(pairvalues);
my @stats = qw(max 123 min 111 avg 116);
say join '|', pairvalues @stats;
123|111|116
请注意,版本1.29(2013年8月发布)中pairvalues
已添加List::Util
,因此如果您使用的是较旧的Perl,则可能需要升级模块。
另请注意,如果数组包含奇数个元素,这将生成警告并返回未定义的元素。适用于任何大小数组的不太可读的替代方案是:
say join '|', @stats[ grep $_ % 2, 1..$#stats ];
答案 1 :(得分:0)
如果您只能访问旧版本的List :: Util,则可以这样做:
#!/usr/bin/env perl
use strict;
use warnings;
my @stats = qw(max 123 min 111 avg 116);
my $i;
print join '|',
map { $_->[1] } # value
grep { $_->[0] % 2 } # keep if index is odd
map { [$i++, $_] } # [ index, value ]
@stats;
print "\n";
输出:
123|111|116
答案 2 :(得分:-1)
或use List::Gen;
获取切片范围:
use Modern::Perl;
use List::Gen;
print 'Perl: ', $^V, ' List::Gen: ', $List::Gen::VERSION, "\n";
my $ar = ['max', 123, 'min', 111, 'avg', 116];
print 1, ' [', join('|', @$ar), "]\n";
print 2, ' [', join('|', @$ar[1, 3, 5]), "]\n";
my $r = range 1, scalar @$ar, 2;
print 3, ' [', join('|', @$ar[@$r]), "]\n";
print 4, ' [', join('|', @$ar[@{range 1, scalar @$ar, 2}]), "]\n";
输出:
perl 31328310.pl
Perl: v5.10.0 List::Gen: 0.80
1 [max|123|min|111|avg|116]
2 [123|111|116]
3 [123|111|116]
4 [123|111|116]