0

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

例如,一个方法返回这种形式的哈希:

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

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

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

作为 perl 的新手,我不确定最好的方法。但听起来很琐碎...

4

2 回答 2

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";

一个关键点是,您使用->箭头运算符访问变量的符号是处理哈希引用,而不是普通哈希。

于 2012-07-14T10:50:35.130 回答
1

我们有第一个和第二个哈希:

my %hash1 = (
  a => 'a1',
  b => 'b1');
my %hash2 = (1 => undef);

我们只能将标量值分配给哈希,但这包括引用。要获取引用,请使用反斜杠运算符:

$hash2{1} = \%hash1;

我们现在几乎可以像您的示例一样取消引用这些值:

print $hash2{1}->{a}; # prints "a1"

请注意酌情使用正确的印记 ($@%)。使用您期望的数据类型的印记,这不一定是您声明的类型。

“perldoc perlreftut”可能很有趣。

于 2012-07-14T10:42:28.203 回答