use File::Temp qw(tempfile); my $file = 'test.txt'; my($tmpfh, $tmpfile) = tempfile(); open my $fh, '<', $file; binmode $fh; while (<$fh>) { # Process $_ here print $tmpfh $_; } close $fh; close $tmpfh; rename $tmpfile, $file;