foreach my $str (sort {($substrings{$b}[1]-$substrings{$b}[0]) <=> ($substrings{$a}[1]-$substrings{$a}[0]) || $substrings{$a}[0] <=> $substrings{$b}[0]} keys %substrings){ #### foreach my $str (sort {($substrings{$b}[1]-$substrings{$b}[0]) <=> ($substrings{$a}[1]-$substrings{$a}[0]) || $substrings{$a}[0] <=> $substrings{$b}[0] || $b cmp $a } keys %substrings){