my %sort; for () { m!(\d+)(\D+)(\d+)(\D*)R(\d+)B?(\d*)\.(\w+)$!; $sort{$7}{$6}{"$1$2"}{$3}{$5}{$4} = $_; } for my $first (sort keys %sort) { for my $second (reverse keys %{$sort{$first}}) { for my $third (sort keys %{$sort{$first}{$second}}) { for my $fourth (sort keys %{$sort{$first}{$second}{$third}}) { for my $fifth (sort keys %{$sort{$first}{$second}{$third}{$fourth}}) { for my $sixth (sort keys %{$sort{$first}{$second}{$third}{$fourth}{$fifth}}) { print $sort{$first}{$second}{$third}{$fourth}{$fifth}{$sixth}; } } } } } }