2013-02-12 41 views
1

我有这部分代码来捕捉一个哈希数组的更大值。当Perl的标识的最大值阵列由@slice阵列中移除:如何在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的值,就像列表一样。接下来,将生成物农业协定,我要重复过去的流...

+1

您的代码没有按”不要做你说的话。 'max(map $ _-> [1],@ $ val)'确定AoA $ val中数组的第二个元素的最大值。这个最大值然后被忽略。 '$ val'中的第二个数组被复制到'@ slice'并在'$ val'中设置为'undef'。 ('delete'在阵列上不起作用) – Borodin 2013-02-12 09:13:15

回答

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所有与\t的值:

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

完美,简单且一劳永逸的解决方案。非常感谢! – 2013-02-12 04:15:41

+0

@CristianVelandia - 非常欢迎您! – Kenosis 2013-02-12 04:25:00

相关问题