あるいはもう1つの選択枝。
単純に、

use Fcntl qw(:flock);
open(OUT, "+< $datafile");
    flock (LOCKF, LOCK_EX);
        truncate(OUT, 0);          # ファイルサイズを0バイトにする
        seek(OUT, 0, 0);            # ファイルポインタを先頭にセット
        print OUT "新しい行" . "\n";;  # 書き込む
close(OUT);                     # closeすれば自動でロック解除

・・・・どっちがいいのでしょうか・・・?