You might consider assigning your matches into an array, and subscripting that programmatically.

my %patterns = ( 123 => [ 1, 2, 3 ], 312 => [ 3, 1, 2 ] ); @matches = $string =~ /regexp/; $string = join "", @matches[ @{ $patterns{$patternkey} } ];
(You need error handling here, of course; and it probably makes sense to promote the scope of %patterns a bit so that it doesn't get constructed every time you enter the sub.)

In reply to Re: Double interpolation of captured substrings by gaal
in thread Double interpolation of captured substrings by bobf

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":