我希望为给定的键分配散列(由方法返回)到另一散列中。将散列分配给散列
对于例如,一个方法返回这种形式的哈希值:
hash1->{'a'} = 'a1';
hash1->{'b'} = 'b1';
现在,我想这些散列值分配到另一个哈希调用方法里面,要达到这样的:
hash2->{'1'}->{'a'} = 'a1';
hash2->{'1'}->{'b'} = 'b1';
作为perl的新手,我不确定最好的方法来做到这一点。但听起来微不足道......
我希望为给定的键分配散列(由方法返回)到另一散列中。将散列分配给散列
对于例如,一个方法返回这种形式的哈希值:
hash1->{'a'} = 'a1';
hash1->{'b'} = 'b1';
现在,我想这些散列值分配到另一个哈希调用方法里面,要达到这样的:
hash2->{'1'}->{'a'} = 'a1';
hash2->{'1'}->{'b'} = 'b1';
作为perl的新手,我不确定最好的方法来做到这一点。但听起来微不足道......
你的子可能是:
#!/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";
一个关键的一点是,你对与->
箭头操作符访问变量符号是处理哈希裁判,不是普通的哈希值。
我们有第一次和第二散:
my %hash1 = (
a => 'a1',
b => 'b1');
my %hash2 = (1 => undef);
我们只能将标值的哈希值,但是这包括引用。举一个参考,使用反斜杠操作:
$hash2{1} = \%hash1;
我们现在可以取消引用值几乎一样在你的榜样:
print $hash2{1}->{a}; # prints "a1"
要当心使用正确的印记($ @%)的标准。使用您期望的数据类型的符号,这不一定是您声明的类型。
“perldoc perlreftut”可能很有趣。
谢谢你,这工作得很好! – Saket 2012-07-14 10:59:41