use Fcntl qw( :flock ); open (LOG, "+< /path/to/log.dat") or die $!; flock(LOG, LOCK_EX); my @logfile = ; unshift @logfile, "$date - $requesturi - ($httpuseragent)" . " $remorehost: $remoteport ($remoteaddr) -" . " $httpreferer\n"; seek LOG, 0, 0; print LOG @logfile[0..99] or die $!; close(LOG) or die $!;