use File::Slurp; use warnings; use strict; my %PATTERNS =( 'http://www.abc.com/test\b' => 'http://www.test.com/twist', 'http://www.abc.com/(?:test[\d])\b' => 'http://www.test.com/', ); # patterns to regexps my @REGEXPS = map { qr/$_/ } keys %PATTERNS; # read from commandline die "usage: $0 ...\n" unless @ARGV; for my $filename (@ARGV){ die "NOT A FILE! '$filename' " unless -f $filename; die "NOT READABLE! '$filename' " unless -r $filename; # read in a whole file into an array of lines my $lines = read_file( $filename ); my $changes = 0; for my $r (@REGEXPS){ if($lines =~ $r){ $changes++; last; } } if($changes == 0){ print "no changes for $filename\n"; exit 0; } rename $filename, $filename . ".bak"; my ($r,$s); for $r (keys %PATTERNS){ $s = $PATTERNS{$r}; $lines =~s/$r/$s/gei; } # write out a whole file write_file( $filename, $lines ); print "Modified $filename\n"; }