regexperlreplace

How do I perform a Perl substitution on a string while keeping the original?


In Perl, what is a good way to perform a replacement on a string using a regular expression and store the value in a different variable, without changing the original?

I usually just copy the string to a new variable then bind it to the s/// regex that does the replacement on the new string, but I was wondering if there is a better way to do this?

$newstring = $oldstring;
$newstring =~ s/foo/bar/g;

Solution

  • This is the idiom I've always used to get a modified copy of a string without changing the original:

    (my $newstring = $oldstring) =~ s/foo/bar/g;
    

    In perl 5.14.0 or later, you can use the new /r non-destructive substitution modifier:

    my $newstring = $oldstring =~ s/foo/bar/gr; 
    

    NOTE:
    The above solutions work without g too. They also work with any other modifiers.

    SEE ALSO:
    perldoc perlrequick: Perl regular expressions quick start