You can use regular expresssions to change text, too. So far, we’ve only shown you how to match a pattern. Now, we’ll show you how to use patterns to locate the parts of strings that you want to change.
If you think of the
m// pattern match as being like your word processor’s “search” feature, the “search and replace” feature would be Perl’s
s/// substitution operator. This replaces whichever part of a variable matches a pattern with a replacement string:
$_ = "He's out bowling with Barney tonight."; s/Barney/Fred/; # Replace Barney with Fred print "$_\n";
If the match fails, nothing happens, and the variable is untouched:
# Continuing from above; $_ has "He's out bowling with Fred tonight." s/Wilma/Betty/; # Replace Wilma with Betty (fails)
The pattern and the replacement string could be more complex. Here, the replacement string uses the first memory variable,
$1, which is set by the pattern match:
s/with (\w+)/against $1's team/; print "$_\n"; # says "He's out bowling against Fred's team tonight."
Here are some other possible substitutions. (These are here only as samples; in the real world, it would not be typical to do so many unrelated substitutions in a row.)
$_ = "green scaly dinosaur"; s/(\w+) (\w+)/$2, $1/; # Now it's "scaly, green dinosaur" s/^/huge, /; # Now it's "huge, scaly, green dinosaur" s/,.*een//; # Empty replacement: Now it's "huge dinosaur" s/green/red/; # Failed match: still "huge dinosaur" ...