1

我有这部分代码来捕获沉浸在哈希中的数组的更大值。当 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,我想迭代最后一个流程......

4

1 回答 1

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

你有一个数组数组,所以每个元素@ignored都是一个数组。符号$ignored[0]到达第零个元素(这是一个数组),->[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所有带有 a 的值\t

print join "\t", $key, @{ $ignored[0] }[ 0, 1 ];
于 2013-02-12T03:53:53.943 回答