サンプルを見て書いてみた。けど、何も出力されない…。
use File::Tail; $file = File::Tail->new(name => "test.txt"); while( defined($line = $file->read)) { print "$line"; }ちょっと調べてみると、マニュアルにmaxintervalなるものがある。
http://search.cpan.org/~mgrabnar/File-Tail-0.99.3/Tail.pm
maxinterval The maximum number of seconds (real number) that will be spent sleeping. Default is 60, meaning File::Tail
will never spend more than sixty seconds without checking the file.
これか。要は60秒ほど待ってしまうわけだ。
さっきのサンプルを動かして、放置しておくと1分経てば出力されていた。
なるほど。
とりあえずすぐ見たいので、maxintervalを1秒に変更すると、更新から1秒後に出力されるようになった。
ただ、本当はファイル全体を読み込んで、かつ、tail -f のようにしたい。
これは
$file->tail(-1);すれば出来ますよ、みたいなのを見つけてやってみたけど、動かない。
マニュアルに戻ると、tailはnewのargmentsになってるので、以下のように書き換え。
use File::Tail; $file = File::Tail->new(name => "test.txt", maxinterval => 1, tail => -1) or die("cannot tail test.txt"); while( defined($line = $file->read)) { print "$line"; }ちゃんと動くようになった。