将哈希分配给哈希

时间:2012-07-14 10:28:13

标签: perl hash

对于给定的密钥,我希望将散列(由方法返回)分配给另一个散列。

例如,方法返回此格式的哈希:

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

现在,我希望将这些哈希值分配给调用方法中的另一个哈希,以获得类似:

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

成为perl的新手,我不确定最好的方法。但听起来微不足道......

2 个答案:

答案 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”可能很有趣。