use Fcntl qw( SEEK_SET ); use File::ReadBackwards qw( ); my (@lines, $loc); { my $bw = File::ReadBackwards->new($qfn) or die($!); @lines = map { $bw->readline() } 1..9; $bw->readline(); $loc = $bw->tell(); } { open(my $fh, '+<', $qfn) or die($!); seek($fh, $loc, SEEK_SET) or die($!); truncate($fh) or die($!); print($fh "abc\n"); print($fh @lines); }