2011-12-29 39 views
1

我放棄了將它用於我的程序的想法,但我很感興趣,因爲我從未找到如何做到這一點的答案。基本上,如果我構建類似於以下(請原諒我的格式,如果下面沒有出現好嗎):Perl語法:HashReference的HashReference散列

  • A = |num_key => hashref_a|
  • hashref_a是一個散列引用a = |string_keys => hashref_b|
  • hashref_b是一個散列參考b = |num_key, num_value|

所以你看,第一個層次是用哈希鍵在數字和它的值是另一個哈希,這又是一個哈希的鍵是與它們再次散列引用值的字符串引用(這些然而只是鍵和數字的哈希值)。

現在,我該如何訪問對在第一哈希num_key和第二散列特定string_keyb(按鍵的完整列表或只爲相應的鍵的值)。

我真的很希望我能夠清楚地傳達這個問題!

回答

3

如果我理解正確你的要求:

my %hash = (num_key => { string_keys => { num_key => 1.234 } }); 

或者:

my %hash_b = (num_key => 1.234); 
my %hash_a = (string_keys => \%hash_b); 
my %hash_z = (num_keys => \%hash_a); 

嗯...編輯的問題後,我想你問如何訪問值,而不是如何構建它們。

my $value = $hash{$num_key}->{$string_key}->{num_key}; 

它在這裏有一點點,我已經使用$num_key,但給定數據的唯一有效值是'num_key';與$string_key和'string_keys'類似。雖然箭頭是符號的關鍵。

2
my %hash = (3 => { "hello" => { 18 => 583 } }); 

print $hash{3}->{"hello"}->{18}; 
# ==> 583 

編輯我看到@JonathanLeffler做了幾乎相同的答案,但我會在這裏留下我的,以補充他,作爲他的解釋可運行演示。

0
%hash = (
    one => { a => 10, b => 20 }, 
    two => { c => 30, d => 40 } 
); 

&function(\%hash); 

sub function { 
    my $hash = shift; 

    $hash->{two}->{d} = 50; # changes 'd' 
} 

你可以在這裏用你想要的散列的哈希散列。希望對你有所幫助...

+2

除非你知道它的功能,否則你不應該對函數調用使用&符號,它所做的就是你想做的事情(很少會這樣做)。 – tadmc 2011-12-29 15:55:35