对于给定的密钥,我希望将散列(由方法返回)分配给另一个散列。
例如,方法返回此格式的哈希:
hash1->{'a'} = 'a1';
hash1->{'b'} = 'b1';
现在,我希望将这些哈希值分配给调用方法中的另一个哈希,以获得类似:
hash2->{'1'}->{'a'} = 'a1';
hash2->{'1'}->{'b'} = 'b1';
成为perl的新手,我不确定最好的方法。但听起来微不足道......
答案 0 :(得分: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";
一个关键点是,使用->
箭头运算符访问变量的符号是处理散列引用,而不是使用普通哈希值。
答案 1 :(得分:1)
我们有第1和第2个哈希:
my %hash1 = (
a => 'a1',
b => 'b1');
my %hash2 = (1 => undef);
我们只能将标量值指定给哈希值,但这包括引用。要获取引用,请使用反斜杠运算符:
$hash2{1} = \%hash1;
我们现在几乎可以像您的示例中那样取消引用值:
print $hash2{1}->{a}; # prints "a1"
小心使用正确的sigil($ @%)。使用您期望的数据类型的sigil,它不一定是您声明的类型。
“perldoc perlreftut”可能很有趣。