単純に print() すると、バッファリングの影響?で、ログが混ざるらしい。
(混ざった経験は今のところ、ありませんが)
syswrite()を使う
にひりずむ::しんぷる - perl で復数のプロセスからログを吐くときは syswrite または flock すべし で
my $s = 'a' x (1024 * 100); open my $fh, '>>', "/tmp/$$"; syswrite $fh, $s; close $fh;
と紹介されていました。
syswrite() 関数の存在は知っていましたが、利用経験がありませんでした。
open( $fh, '>>:utf8:unix', $fname) を使う
perl で複数のプロセスからログを吐くときは :unix layer で開いてもいい - skaji's blog で File::RotateLogs にある
open $fh, '>>:utf8:unix', $fname or die "Cannot open file($fname): $!";
Masahiro Nagano / File-RotateLogs - search.cpan.org
を紹介されていました。
私個人としては、「open( $fh, '>>:utf8:unix', $fname)」を利用したいのですが、この記法って、正式?には何処で定義されているんでしょ?
「$ perldoc open」しても見つけることができませんでした。