是否可以像这样合并两个哈希:
%one = {
name => 'a',
address => 'b'
};
%two = {
testval => 'hello',
newval => 'bye'
};
$one{location} = %two;
所以结束哈希看起来像这样:
%one = {
name => 'a',
address => 'b',
location => {
testval => 'hello',
newval => 'bye'
}
}
我已经看了一眼,但不确定这是否可以在没有for循环的情况下完成。谢谢:))
答案 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
,可以单独修改。