end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転しました

perl で複数プロセスからログを吐くには、syswrite or open( , '>>:utf8:unix' ,)

単純に 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」しても見つけることができませんでした。