my $filename = 'foo.txt'; open IN, "< $filename" or die "Can't open $filename: $!\n"; open OUT, "> $filename.bak" or die "Can't write to $filename: $!\n"; while () { s/foo/blah/g; print OUT $_; } close IN; close OUT; rename "$filename.bak", $filename;