2012-07-14 98 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”可能很有趣。