これが私のデーモンコードからのカットです:
package somepackage;
use Proc::Daemon;
use Time::HiRes qw/usleep/;
use constant{
LOGFILE => '/var/log/.../work.log'
};
our $LOG;
unless($pid)
{
open($LOG,'>>'.LOGFILE);
my $tm;
}
while ($pid == 0)
{
$tm=usleep(999940); #to be more accurate, 1 sec
print $somepackage::LOG $tm."\n";
}
しかし、問題は、10 秒後にのみ印刷がファイルに書き込まれることがあることです。print がファイルに書き込んでいる間、サイクルは待機せず、代わりに新しいループに進み、スリープするため、なぜそれが起こるのか知っています。print がファイルへの書き込みを終了してから次の反復に進むまで、どうすれば待機できますか?