File::RotateLogs が大変便利でよく使っているのだが、これはファイルへ書き込むときに print を呼んでいる。 一方 にひりずむ::しんぷる - perl で復数のプロセスからログを吐くときは syswrite または flock すべし によると長いログを吐くときは syswrite にしないと混ざるとある。 よって File::RotateLogs も実は混ざることがあるのかなと思い、複数プロセスから長いログを吐きまくってみたが一向に混ざらなかった。 いろいろ調べた結果、open layer に最も低級な layer である :unix を指定すれば print 時も 1 つの write(2) になるようだった。 > cat test.pl open my $fh, ">:unix", "test.txt"; print $fh "a" x (1024 * 100);