#earlier in the script, we have created #the array of files to edit, and named it @files foreach my $filename (@files) { my $backup = $filename . '.bak'; copy($filename, $backup) unless -e $backup; open(FILE2CHANGE, "<$backup"); open(UPDATED, ">$filename") or die "$filename: $!"; while () { s/foo/bar/g; print UPDATED; } close FILE2CHANGE; close UPDATED; }