perl 101 - 迭代哈希导致永不结束循环

air*_*net 2 perl

不知道为什么这个脚本无限运行.它看起来很好.


while (my ($k, $v) = each (%ENV)){
 my @k = keys (%ENV);
 if($k eq $k[0]){
   print "ok";
  }
}
Run Code Online (Sandbox Code Playgroud)

Mor*_*kus 12

keys(以及values)功能重置由所使用的迭代器each的功能.由于键没有改变,你可以在循环之外检索它们.


Mar*_*eed 9

keys在循环内部调用会重置使用的迭代器each.不要那样做.这应该工作:

my @k = keys (%ENV);
while (my ($k, $v) = each (%ENV)){
 if($k eq $k[0]){
   print "ok";
  }
}
Run Code Online (Sandbox Code Playgroud)