我怎么能在Perl中打印@slice数组元素?

时间:2013-02-12 03:33:56

标签: arrays perl hash slice

我有这部分代码来捕获沉浸在Hash中的数组的更大价值。当Perl识别出@slice数组删除数组的最大值时:

if ( max(map $_->[1], @$val)){
my @slice = (@$val[1]);             
my @ignored = @slice;
delete(@$val[1]);
print "$key\t @ignored\n";
warn Dumper \@slice; 

}

数据:倾销:

$VAR1 = [ [ '3420', '3446', '13', '39', 55 ] ];

我想将标签(\ t)分隔的信息打印在一行中,如下所示:

miRNA127 dvex589433 -    131     154
miRNA154 dvex546562 +    232     259    
miRNA154 dvex573491 +    297     324    
miRNA154 dvex648254 +    147     172
miRNA154 dvex648254 +    287     272
miRNA32 dvex320240 -     61  83
miRNA32 dvex623745 -     141     163
miRNA79 dvex219016 +     ARRAY(0x100840378)

但是在最后一行总是得到这个结果。

我怎样才能生成此输出?:

miRNA127 dvex589433 -    131     154
miRNA154 dvex546562 +    232     259    
miRNA154 dvex573491 +    297     324    
miRNA154 dvex648254 +    147     172
miRNA154 dvex648254 +    287     272
miRNA32 dvex320240 -     61  83
miRNA32 dvex623745 -     141     163
miRNA79 dvex219016 +     3420    3446

补充说明: 在这种情况下,我希望在$ VAR-> [1]中捕获最高值,并查看$ VAR-> [0]中最小值的减法是否<=到55.如果不是,我需要消除此AoA(最高值)并用它填充@ignored数组。接下来,我想打印@ignored的一些值,就像列表一样。接下来,结果AoA,我想迭代最后一个流......

1 个答案:

答案 0 :(得分:2)

print "$key\t $ignored[0]->[0]\t$ignored[0]->[1]";

您有一个数组数组,因此@ignored的每个元素都是一个数组。符号$ignored[0]到达第0个元素(这是一个数组),->[0]->[1]检索该数组的第0和第1个元素。

例如:

use strict;
use warnings;
use Data::Dumper;

my @ignored;
$ignored[0] = [ '3420', '3446', '13', '39', 55 ];
my $key = 'miRNA79 dvex219016 +';

print Dumper \@ignored;
print "\n";

print "$key\t$ignored[0]->[0]\t$ignored[0]->[1]";

输出:

$VAR1 = [
          [
            '3420',
            '3446',
            '13',
            '39',
            55
          ]
        ];

miRNA79 dvex219016 +    3420    3446

生成相同输出的另一个选项是join所有带\t的值:

print join "\t", $key, @{ $ignored[0] }[ 0, 1 ];