我基本上想这样做:
foreach my $key (keys $hash_ref) {
Do stuff with my $key and $hash_ref
# Delete the key from the hash
delete $hash_ref->{$key};
}
安全吗?为什么?
您不是在哈希上迭代,而是在返回的键列表上迭代keys
在你开始循环之前。请记住
for my $key (keys %$hash_ref) {
...
}
大致相当于
my @anon = keys %$hash_ref;
for my $key (@anon) {
...
}
从哈希中删除不会造成任何问题。
each另一方面,确实迭代哈希。每次被调用的时候,each
返回一个不同的元素。然而,它仍然是安全的delete
当前元素!
# Also safe
while (my ($key) = each(%$hash_ref)) {
...
delete $hash_ref->{$key};
...
}
如果您在迭代哈希时添加或删除哈希的元素,则可能会跳过或重复条目 - 所以不要这样做。例外:删除each()最近返回的项目总是安全的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)