mkdirでやってみたんですが、以上終了してディレクトリーが残っていたら、
3秒で消し去るのって問題ありでしょうか?

とほほとか見て作ってみたんですけど指摘があればお願いします。

(my $mode, my $file, @_) = @_;

while(!mkdir("$file.lock", 0755))
{
sleep(1);
rmdir "$file.lock" if(time - (stat "$file.lock")[9] > 3);
}

open(DATA, "$mode$file");
print DATA @_;
close DATA;

return rmdir "$file.lock";