>>717
> while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
このopenて、毎回必ず成功するか毎回必ず失敗するか、しかないよ。たぶん。
必ず失敗するとしたらファイルのパーミッションで弾かれるとかくらい。(他にもあるかな?)
だからwhileで「closeが成功するまで繰り返す」てのは意味ない。

まあ仮にこれで「ファイル使用中ですよ」宣言ができたとして、
前者のプロセスと後者のプロセス、それぞれ同時に1つのプロセスしか起動しないとしても
タイミングによってはまったく排他処理できない。
上のプロセスをA、下のプロセスをB、としてそれぞれ行番号つけてみる。

A1: my $flagfile="locked";
A2: while(!do{ open my $fh,">",$flagfile; close $fh; }) {}
A3: # ファイル処理
A4: unlink $locked;

B1: my $flagfile="locked";
B2: while (-e $flagfile) {}
B3: # ファイル処理

(続く)