每个人的意外行为

Lea*_*ing 2 perl

%h = (a => 1, b => 2);

keys %h;
while(my($k, $v) = each %h)
{
  $h{uc $k} = $h{$k} * 2; # BAD IDEA!
}
Run Code Online (Sandbox Code Playgroud)

输出是:

(a => 1, A => 2, b => 2, B => 8)
Run Code Online (Sandbox Code Playgroud)

代替

(a => 1, A => 2, b => 2, B => 4)
Run Code Online (Sandbox Code Playgroud)

为什么?

Eug*_*ash 7

来自perldoc -f

如果在迭代时添加或删除哈希的元素,则可以跳过或复制条目 - 因此不要这样做.例外:删除最近返回的项目总是安全的each().