my $criteria = 3; my @sorted = sort { (split /\|\|/, $hash{$a} )[$criteria] cmp (split /\|\|/, $hash{$b} )[$criteria] } keys %hash; #### my @criteria = (0, 2); my @sorted = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_, join( "", ( split /\|\|/, $hash{$_} )[@sorted] ] } keys %hash;