对于给定的键,我希望将散列(由方法返回)分配给另一个散列。
例如,一个方法返回这种形式的哈希:
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”可能很有趣。