2013-03-23 29 views
0

我有以下代碼:的perl - 陣列的混合物和散列

my @tmpRowArr =(); 
    while (my $row1 = $sth->fetchrow_hashref()) { 
     push (@tmpRowArr, $row1); 
    } 
    $cached_query_hash{$uniqKey} = \@tmpRowArr; 

其是用於從數據庫查詢結果存儲到一個散列REF。已顯示正確。然後我想讀取值,但這不起作用:

my @tmpRowArr2 = $cached_query_hash{$$value{'id'}} ; 
    foreach (@tmpRowArr2){ 
     print $_->{id} ; 
    } 

任何見解,將不勝感激。

回答

0

看來,這將解決這個問題:

第一線:

$cached_panelists_hash{$$value{'id'}} = \@tmpRowArr; 

最後一行:

my @tmpRowArr2 = @{ $cached_panelists_hash{$$value{'id'}} }; 
1

如果您結合您的兩行

$cached_query_hash{$uniqKey} = \@tmpRowArr; 
... 
my @tmpRowArr2 = $cached_query_hash{$$value{'id'}} ; 

可以減少他們

my @tmpRowArr2 = \@tmpRowArr; 

這應該說明爲什麼它不工作:你是一個數組分配一個數組引用。您需要取消引用的另一個層面:

my $aref = $cached_query_hash{$$value{'id'}}; 
for (@$aref) { 
    print $_->{id}; 
} 
+0

感謝您的回答。我終於明白了。看到我自己的答案。 – 2013-03-25 16:36:24

+0

是的......您拿出我的答案並將其作爲您自己的答案發布。 :P您應該小心'@ tmpRowArr'超出作用域之間的範圍,以便幾個鍵不會引用相同的數組。 – TLP 2013-03-25 17:48:41