open(OUT, "> $filepath"); print OUT "hoge\n"; close(OUT);とするが、この方法だと上書きする際にファイルが一度0バイトになってしまう。
その状態で読み込みが走ると、0バイトのファイルが取得されてしまう。
それを回避する為には下の方法で。
open(OUT, "+< $filepath"); flock(OUT, 2); seek(OUT, 0, 0); print OUT "hoge\n"; truncate(OUT, tell(OUT)); close(OUT);ただこのままだと、上書きするファイルが無い場合にエラーが出てしまうため場合分けする。
if (-f $filepath) {
    open(OUT, "+< $filepath");
    flock(OUT, 2);
    seek(OUT, 0, 0);
    print OUT "hoge\n";
    truncate(OUT, tell(OUT));
    close(OUT);
} else {
    open(OUT, "> $filepath");
    print OUT "hoge\n";
    close(OUT);
}
参考
 
No comments:
Post a Comment