open my $fh, "+<", $fname or die $!; my $pos = (-s $fh) - 1; my $s; do { seek $fh, $pos--, 0; read $fh, $s, 1; } while $s eq "\n"; truncate $fh, $pos + 3;