use warnings;
use strict;
my $user_defined_string = "There's more than one way to do it (more than one).";
my $user_defined_search = '(more)(.*?)(one)';
my $user_defined_replace = '$1$2$3';
my (@subs) = $user_defined_string =~ /$user_defined_search/;
for my $sub (1..@subs) {
$user_defined_replace =~ s/\$$sub/$subs[$sub-1]/ge;
}
print "mangled replace: $user_defined_replace\n";
$user_defined_string =~ s/$user_defined_search/$user_defined_replace/ge;
print "after: $user_defined_string\n";
__OUTPUT__
mangled replace: more than one
after: There's more than one way to do it (more than one).