foreach(<>)使ウナwhile(<>)使エ

Perlベストプラクティス(p.228-)より.
forループの反復リストはリストコンテキストなので,<>がリストコンテキストで呼び出される.
すなわち,<>をEOFが検出されるまで入力ストリームをメモリ上に丸飲みするまで,処理が実行されない.

open(IN, "< hoge.txt") or die "Cannot open hoge.txt\n";

/* foreachの場合 */
foreach my $line (<IN>){
# 処理
}

/* whileの場合 */
while(my $line = <IN>){
# 処理
}

ただ,最近のperlでは呼び出されるリストコンテキストが膨大な場合,全部読み込む前に処理を開始するよう
処理系で工夫をするらしい.


そういえばforeachで結果を表示するとき,バッファをある程度ためてから吐き出すように動作していたのは
こういったことが原因だったのでしょうか