use Data::Dumper; '12' =~ / (? (?1) (?2) ) /x; print "All accounted for:\n"; print Dumper(\%-); print "Here too:\n"; print Dumper([$1, $2, $3]); print "Where are one and two?\n"; print Dumper(\%+); #### All accounted for: $VAR1 = { 'one' => [ '1' ], 'twelve' => [ '12' ], 'two' => [ '2' ] }; Here too: $VAR1 = [ '12', '1', '2' ]; Where are one and two? $VAR1 = { 'twelve' => '12' };