http://www.perlmonks.org?node_id=743110

gnustavo has asked for the wisdom of the Perl Monks concerning the following question:

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.