while と foreach の違い

while(<STDIN>) {
  print;
}

foreach (<STDIN>) {
  print;
}

の違いをあんまり意識していなかったが、while は、一行ずつこれを解釈し、print するのに対して、foreach はリストコンテキストで使われる。つまり、ループの実行を始める前に、リストの内容をすべて読み込むことになる。

通常2つに動作の違いは見られないが、巨大ファイルが処理の対象であった場合は、foreach だとメモリが足りなくなったり、処理が始まるまでにえらい待たされたり・・・ということが発生するだろう。