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で結果を表示するとき,バッファをある程度ためてから吐き出すように動作していたのは
こういったことが原因だったのでしょうか