>perl 546453.pl 20 (?x-ism: ^ (?{ +{} }) ( .{1} (?{ my %r = %{$^R}; $r{1}++; +{ %r } }) )* ( .{5} (?{ my %r = %{$^R}; $r{5}++; +{ %r } }) )* ( .{10} (?{ my %r = %{$^R}; $r{10}++; +{ %r } }) )* ( .{20} (?{ my %r = %{$^R}; $r{20}++; +{ %r } }) )* ( .{50} (?{ my %r = %{$^R}; $r{50}++; +{ %r } }) )* ( .{100} (?{ my %r = %{$^R}; $r{100}++; +{ %r } }) )* $ (?{ push(@matches, $^R) }) (?!) ) $VAR1 = [ { '1' => '20' }, { '1' => '15', '5' => '1' }, { '1' => '10', '5' => '2' }, { '1' => '10', '10' => '1' }, { '1' => '5', '5' => '3' } ];