用于连接备用数组元素的Perl命令

时间:2015-07-09 21:11:24

标签: perl

我正在寻找一种在Perl脚本中加入备用数组元素的方法。例如,如果我有数组:

[max, 123, min, 111, avg, 116]

我需要输出看起来像这样:

Output: 123|111|116

由于我是perl的新手,我正在寻找一种格式化方法,如同一命令中的输出所示

3 个答案:

答案 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]