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