use vars qw(%unk, @foo); my(@ulist) = map{ # Sort descending $_->[1] } sort{ $b->[0] <=> $a->[0] } map{ [scalar(@foo=split(/\t/, $unk{$_})), $_ ] } keys %unk;