2012-07-14 99 views
0

我希望爲給定的鍵分配散列(由方法返回)到另一散列中。將散列分配給散列

對於例如,一個方法返回這種形式的哈希值:

hash1->{'a'} = 'a1'; 
hash1->{'b'} = 'b1'; 

現在,我想這些散列值分配到另一個哈希調用方法裏面,要達到這樣的:

hash2->{'1'}->{'a'} = 'a1'; 
hash2->{'1'}->{'b'} = 'b1'; 

作爲perl的新手,我不確定最好的方法來做到這一點。但聽起來微不足道......

回答

3

你的子可能是:

#!/usr/bin/env perl 
use strict; 
use warnings; 

sub mystery 
{ 
    my($hashref) = { a => 'a1', b => 'b1' }; 
    return $hashref; 
} 

my $hashref1 = mystery; 
print "$hashref1->{a} and $hashref1->{b}\n"; 
my $hashref2 = { 1 => $hashref1 }; 
print "$hashref2->{1}->{a} and $hashref2->{1}->{b}\n"; 

一個關鍵的一點是,你對與->箭頭操作符訪問變量符號是處理哈希裁判,不是普通的哈希值。

+0

謝謝你,這工作得很好! – Saket 2012-07-14 10:59:41

1

我們有第一次和第二散:

my %hash1 = (
    a => 'a1', 
    b => 'b1'); 
my %hash2 = (1 => undef); 

我們只能將標值的哈希值,但是這包括引用。舉一個參考,使用反斜槓操作:

$hash2{1} = \%hash1; 

我們現在可以取消引用值幾乎一樣在你的榜樣:

print $hash2{1}->{a}; # prints "a1" 

要當心使用正確的印記($ @%)的標準。使用您期望的數據類型的符號,這不一定是您聲明的類型。

「perldoc perlreftut」可能很有趣。