Saturday, February 16, 2013

Perlでファイルの上書き

Perlでファイルを上書きしたい場合は
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