in reply to Interpolating backreferences in an eval

eval's are evil. Templates are the way to go. How would you account for:
expand(qr/a(.)c/, 'abc', 'a$1${ print \\"haha! lets do something else +...\n\\"; 1 }c');

At least it was nice enough to give you your "abbc" :)