I want to implement a function that accepts a qr/Regexp/ and a string. The regexp is going to be matched against another string and, after that, I want to interpolate any backreferences contained in the string argument.
I thought about evaluating the string in an eval, but it seems that the capture buffers aren't available in the eval context.
As an example of what I'm attempting to do, take the following code:
#!/usr/bin/perl
if ('abc' =~ qr/a(.)c/) {
print "a$1$1c", "\n";
}
sub expand {
my ($rx, $from, $to) = @_;
if ($from =~ $rx) {
print eval {$to}, "\n";
}
}
expand(qr/a(.)c/, 'abc', 'a$1$1c');
I'd like it to output two identical lines:
abbc
abbc
However, it actually doesn't interpolate the backreferences in the eval and output this:
abbc
a$1$1c
Any suggestion would be appreciated.