# bart's setup: $re = 'Il est (\d+) heurs moins (\d+).'; $translation = 'It\'s $2 to $1.'; $_ = 'Il est 14 heurs moins 28.'; # my code: $translator{$re} ||= do { (my $t = $translation) =~ s/([\\"])/\\$1/g; eval qq(sub { "$t" }); }; s/$re/$translator{$re}()/e; # and a print: print