2

このスクリプトが無限に実行される理由がわかりません。私にはうまく見えます。


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

3 に答える 3

12

(keysおよびvalues) 関数は、関数で使用される反復子をリセットしますeach。キーは変更されないため、ループの外でキーを取得できます。

于 2013-08-21T19:53:39.863 に答える
9

ループ内で呼び出すkeysと、 で使用されるイテレータがリセットされeachます。そうしないでください。これはうまくいくはずです:

my @k = keys (%ENV);
while (my ($k, $v) = each (%ENV)){
 if($k eq $k[0]){
   print "ok";
  }
}
于 2013-08-21T19:53:45.977 に答える