Perl合并哈希

时间:2014-03-12 16:18:43

标签: perl hash hashref

是否可以像这样合并两个哈希:

%one = {
    name    => 'a',
    address => 'b'
};

%two = {
    testval => 'hello',
    newval  => 'bye'        
};

$one{location} = %two;

所以结束哈希看起来像这样:

%one = {
    name    => 'a',
    address => 'b',
    location => {
        testval => 'hello',
        newval  => 'bye'
    }
}

我已经看了一眼,但不确定这是否可以在没有for循环的情况下完成。谢谢:))

2 个答案:

答案 0 :(得分:6)

由于散列元素的值是标量,因此无法在散列中存储散列,但可以将引用存储到散列中。 (同样适用于存储数组和存储到数组中。)

my %one = (
   name    => 'a',
   address => 'b',
);

my %two = (
   testval => 'hello',
   newval  => 'bye',     
);

$one{location} = \%two;

相同
my %one = (
   name    => 'a',
   address => 'b',
   location => {
      testval => 'hello',
      newval  => 'bye',
   },
);

答案 1 :(得分:3)

如果您使用

$one{location} = \%two

然后您的哈希将包含引用以哈希%two,因此如果您使用$one{location}{newval} = 'goodbye'之类的内容修改它,那么%two也将被更改。

如果您想要%two中数据的单独副本,那么您需要编写

$one{location} = { %two }

之后%one的内容独立于%two,可以单独修改。