sub dyn_replace { my ($replace) = @_; my @groups; { no strict 'refs'; $groups[$_] = $$_ for 1 .. $#-; # the size of @- tells us the number of capturing groups } $replace =~ s/\$(\d+)/$groups[$1]/g; return $replace; }