我有下面的散列,我想给它添加更多的值;然而,这样做会替换整个散列。我很确定这是一个基本的问题,但perl是一个神秘的谜。
my %myNewHash = ();
%myNewHash = (
lastName => $primaryInfo->{lastName},
firstName => $primaryInfo->{firstName}
);
%myNewHash = (
email => $primaryInfo->{email},
phone => $primaryInfo->{phone}
);
此时,%myNewHash
只包含email/phone,lastName/firstName都被抹掉了。
5条答案
按热度按时间fhg3lkii1#
现有的hash(注意,在赋值之前不需要创建空hash):
因为你在新的和旧的哈希中使用相同的键:
或者使用hash slice:
关键(双关语)是您将其分配给单个元素
而不是散列本身
deikduxw2#
这里有一个方法可以做到这一点:
或者:
6tqwzwtp3#
每当你这样做:
您正在重新初始化%myNewHash的值。这就是
=
运算符的作用。它与以下操作相同:为了解决这个问题,你可以做以下事情:
在这种情况下,
%myNewHash
中的键/值对被视为一个数组,其他两个键/值对被放入该数组并作为一个大数组分配给%myNewHash
。%myNewHash
被重新初始化,但现在包含它以前拥有的现有键/值对。我个人不会这样做,因为它不是100%清楚发生了什么。如果你想把你的哈希引用转换成哈希,你可以解引用它,并在一个单一的镜头做这一切:
或者使用一个循环来选择你想要传输的几个键:
我确信甚至有一种方法可以使用
map
,但我一时想不出来。wz8daaqr4#
尝试添加如下内容:
68bkxrlz5#
我会通过对散列进行“切片”来做到这一点。将sigil @放在散列名称的前面(这表明您使用了散列的一个切片),在花括号中提供新的键(这表明您引用的是散列及其单个条目),然后只需为新条目分配值