ブラウザでリアルタイムに出力させるための
$|=1;(バッファリングのOFF)
がうまくいきません。
結局いっぺんに出力されます。
仕方ないのでコンソールで実行したりしています。
バージョン違いのサーバなどでは上手くいくこともあるのですが
(バージョンの問題とは思えませんが)
何が原因ですかね?
$|=1; として apache からブラウザにはリアルタイムで
データが流れても、ブラウザ側でバッファリングして
しまう事が原因です。従って、ブラウザの種類やバージョン、
キャッシュの ON/OFF などによって結果は大きく変わり
そうです。
原因として考えられるのはapacheしかありません。
perlで標準出力へのバッファリングをoffにしたとしても、それをパイプ経由で仲介しているapacheがバッファリングしていれば効果が出ません。ブラウザと直接通信しているのはapacheだからです。
また、リアルタイム表示を確実に実現させる為にはバッファリングoffだけでは不十分で、本来ならHTTPプロトコルレベルで制御できる「サーバープッシュ」という技法を使うべきです。
ただし、サーバープッシュはかつてNetscapeが独自仕様として実装していた歴史がありますが、あまり普及しなかった経緯があります。
CGI::Push(Netscape流サーバープッシュをサポートするモジュール。対応ブラウザは限定される)
http://perldoc.jp/docs/modules/CGI.pm-2.89/CGI/Push.pod
最近ではcometという技法もあるそうですが、Ajax的な姑息通信みたいです。
http://www.google.co.jp/search?hl=ja&q=%E3%82%B5%E3%83%BC%E3%83%...
むふむふ
なるほど