use File::Temp qw(tempfile); use Cwd; sub replace_file { my ($file, $start, $end, $replace_text) = @_; local (*ARGV, $_, $.); @ARGV = $file; my ($fh, $tmp_file) = tempfile(DIR=>cwd); my $replaced; while (<>) { my $replace = /\Q$start\E/../\Q$end\E/; print $fh $_ and next unless $replace; $replaced=1; print $fh $replace_text if $replace == 1; } close $fh; return unless $replaced; rename $tmp_file, $file or warn "Error replacing $file: $!"; }