use strict;
use warnings;
use Perl6::Slurp;
use File::Basename;
use File::stat;
my $name = basename($0);
die "Usage: $name 's/FIND/REPLACE/OPTS' FILE...n"
if $#ARGV < 1;
my $op = "$text =~ " . (shift) . "mg";
push @ARGV, "-" if $#ARGV < 0;
foreach my $file (@ARGV) {
my $text;
if ($file eq "-") {
$text = slurp *STDIN or warn "$name: could not read `$file': $!n";
} else {
if (!-e $file) {
warn "$name: no such file `$file'n";
next;
} elsif (!-f $file) {
warn "$name: skipping non-regular file `$file'n";
next;
}
$text = slurp $file;
}
if (eval $op) {
if ($file eq "-") {
print $text;
} else {
my $stat = stat $file;
system "mv", "-f", $file, "$file~";
open FILE, ">$file" or warn "$name: could not write to `$file': $!n";
print FILE $text;
close FILE;
chmod $stat->mode, $file or warn "$name: $!";
chown $stat->uid, $stat->gid, $file or warn "$name: $!";
warn "$name: changed `$file'n";
}
}
}