use strict; use warnings; sub toy_sed_on_file { my $pattern = shift; my $replacement = shift; my $file = shift; my $count = 0; open my $in, '<', $file or die "open $file: $!"; open my $out, '>', $file.$$ or die "open output ${file}$$: $!"; while (<$in>) { $count += s/$pattern/$replacement/g; # does nothing if m/$pattern/ would not match print $out $_; } close $in or die "close $file: $!"; close $out or die "close output ${file}$$: $!"; if ($count > 0) { rename $file.$$, $file or die "replace input file: $!" } else { unlink $file.$$ or die "remove output file: $!" } return $count; }