use Fcntl qw(:DEFAULT :flock); if (open(FILE, "+< stuff.txt")) #if (sysopen(FILE, "stuff.txt", O_RDWR)) { # if (flock(FILE, LOCK_EX|LOCK_NB)) { local $/ = undef; my $buff = ; # my $buff = ''; # sysread(FILE, $buff, -s FILE); # DO STUFF TO $buff HERE, can GROW or SHRINK # Split it into pieces... seek(FILE, 0, 0); print FILE, $top_of_buffer; print FILE, $new_stuff; print FILE, $bot_of_buffer; close(FILE);