■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
バッファをフラッシュ??
1 名前: 名無しさん 投稿日: 2000/02/03(木) 05:12
Perlで
$| = 1;
の意味がイマイチよくわかりません

どの本みても出力バッファを強制的にフラッシュする
と書いてありそれ以上のことはあまり書かれていません

ぶっちゃけた話どうゆうことですか?


2 名前: 名無しさん 投稿日: 2000/02/03(木) 05:14
同じスレッドに書けば?


3 名前: Just Another Perl User 投稿日: 2000/02/03(木) 05:41
$| の値を 0 以外にすると、出力のバッファリングが行われなくなります。
(print/writeを実行する度にfflush(3)を呼び出すようになる。)

一般に標準出力(STDOUT)に対しては行指向のバッファリングが
行われることが多いです。("\n"が来るまでは実際の出力を行わない。)

バッファリングされている場合:
$| = 0; print "foo"; sleep 3; print "bar\n";
されていない場合:
$| = 1; print "foo"; sleep 3; print "bar\n";
を比較すると違いが分かるかと思います。
(シェルかなんかでperl実行してください。)



4 名前: 1 投稿日: 2000/02/03(木) 16:45
>3
う〜んwindowsでは違いがよくわかりません・・・

foo...(sleep)...bar ←$|=1
(sleep)...foobar ←$|=0

こうなるってことですか?


5 名前: Just Another Perl User 投稿日: 2000/02/03(木) 22:59
4の方へ:
その通り。標準出力のバッファリングを行う場合は大抵の実装で、
"\n" (改行) が来るまで画面に表示されなくなります。

だから $| = 1 にすると、上記のような振る舞いになります。
(既定値は $| = 0, ie. バッファリングする。)


6 名前: 投稿日: 2000/02/03(木) 23:09
>Just Another Perl Userさん

なんとなくわかったような気がします
とりあえず$| = 1;はつけておいた方がよさそうですね
ありがとうございました