----
perl でファイルを作っていると、出力したデータがある程度バッファリングされてからファイルに書き込まれる。
すぐに終わる処理ならそれでいいのだが、時間のかかるファイル作成処理を行なっていると、逐一書き込んでくれたほうが便利な場合がある。
と思って、逐一書き込み(flush)してくれる書き方が無いか調べてみたら
$| = 1;
というのが出てきた。
これをかけば、逐一書き込みしてくれるようだが、効果はSTDOUTのみだった。
オープンしたファイルにも適用したいと思っていろいろ調べたところ、以下の書き方で実現可能でした。
$oldFh = select(OPENFILE);
$| = 1;
select($oldFh);
*OPENFILE は開いたファイルのハンドル
コメントする