2015-01-27 54 views
0

Perl初學者在這裏。我已經構建了一個哈希哈希哈希'最終'值是一個字符串數組。 它看起來像這樣:如何將具有矢量值的哈希散列打印到製表符分隔的列文件中?

my %sampleHash =() 

$sampleHash{$sample1} = { 
    R1Tests => \@sample1Results_1, 
    R2Tests => \@sample1Results_2, 
    }; 

$sampleHash{$sample2} = { 
    R1Tests => \@sample2Results_1, 
    R2Tests => \@sample2Results_2, 
    }; 

$sampleHash{$sample3} = { 
    R1Tests => \@sample3Results_1, 
    R2Tests => \@sample3Results_2, 
    }; 

我要打印整個散列成一個製表符分隔的文件看起來像這樣:

sample1 @sample1Results_1[0] @sample1Results_1[1] .... @sample1Results_2[0] @sample1Results_2[1] ... 
sample2 @sample2Results_1[0] @sample2Results_1[1] .... @sample2Results_2[0] @sample2Results_2[1] ... 
sample3 @sample3Results_1[0] @sample3Results_1[1] .... @sample3Results_2[0] @sample3Results_2[1] ... 

什麼是有效的方式來做到這一點?我知道它涉及了一段時間或foreach循環,但我不知道如何將它打印到文件中,以列爲單位進行打印,並在同一行上打印出兩個子哈希。

回答

3

我假設你的散列中的數組真的是數組引用,而分號真的是逗號嗎?

真的很簡單。有幾種方法可以實現,但我會使用each遍歷樣本,並使用join來組裝內容。

像這樣(未經測試,因爲我只有一個平板電腦,我旅行時手)

while (my ($sample, $results) = each %sampleHash) { 
    print join("\t", 
      $sample, 
      @{ $results->{R1Tests} }, 
      @{ $results->{R2Tests} } 
    ), "\n"; 
} 
+0

一件事假設:$ sampleHash {$ SAMPLE1}等都是真的$ {sampleHash 'sample1'}等。 – nlu 2015-01-27 10:15:02

+0

謝謝,@Borodin!並感謝與分號和參考的頭。編輯以顯示正確的語法。 – gaelgarcia 2015-01-28 03:24:29

+0

當聲明/構建哈希時,大括號是否正確,還是應該用括號括起來? – gaelgarcia 2015-01-28 03:26:39