open(LOG,"$datfile");
flock(LOG, LOCK_EX);
@alldata = <LOG>;
close(LOG);
foreach $data (@alldata){

中略

}
print "<p>完了しました。</p>";

という構文で、ファイルの各行の文字列を読み取って、処理を行う、という動作をさせ、
終了時に「完了しました。」の文字列を表示、という風にしているのですが、
ファイルの行数が少なかった頃は何の問題もなく処理を完了していたのですが、
800行を超えた辺りから、「完了しました。」の文字を表示しないこともあります(ブラウザは完了したような振る舞いをします)。
また、処理の結果を見ても、ファイルの途中までしか処理されていないようです。
恐らくforeach文の回数が多すぎるからだと思うのですが、何か対処法は御座いませんでしょうか?

お教え下さいますようお願い致します。