2013-02-12 42 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

相關問題