2011-06-10 183 views
2

我在這裏看到過類似的問題,但是沒有一個可以專門回答我自己的問題。哈希的Perl哈希問題

我試圖以編程方式創建哈希散列。我的問題代碼如下:

my %this_hash =(); 
if ($user_hash{$uuid}) 
{ 
    %this_hash = $user_hash{$uuid}; 
} 

$this_hash{$action} = 1; 

$user_hash{$uuid} = %this_hash; 
my %test_hash = $user_hash{$uuid}; 
my $hello_dumper = Dumper \%this_hash; 

根據我的輸出,$ this_hash被正確分配,但

$user_hash{$uuid} = %this_hash 

正顯示出在調試器1/8的值;不知道他的意思。我也得到一個警告:「哈希賦值中奇數個元素...」

+1

另請參閱http://perldoc.perl.org/perldiag.html獲取錯誤消息,以及http://perldoc.perl.org/index-tutorials.html獲取關於數據結構的幾個教程。 – FMc 2011-06-10 22:07:21

回答

12

任何時候你寫

%anything = $anything 

你做錯了什麼。幾乎任何時候你寫

$anything = %anything 

你做錯了什麼。這包括$anything是數組或哈希訪問(即$array[$index]$hash{$key})。存儲在數組和散列中的值總是標量,而數組和哈希本身不是標量。所以,當你想在一個散列中存儲一個散列時,你將一個引用存儲到它:$hash{$key} = \%another_hash。而當你想要訪問散列中存有引用的散列時,你可以解除引用:%another_hash = %{ $hash{$key} }$hashref = $hash{$key}; $value = $hashref->{ $another_key }$value = $hash{$key}{$another_key}

爲了適應參考的速度,我強烈建議您閱讀Perl References TutorialPerl Data Structures Cookbook

+1

已經發生了很多學習。謝謝你的答案。 – SemperFly 2011-06-10 22:14:59

5

這不是一個「散列哈希」;這是一個「散列引用散列」。

嘗試:

$user_hash{$uuid} = \%this_hash; 
+0

感謝Nemo的回答。 – SemperFly 2011-06-10 22:14:48