For example : $keys{a} = 2; $keys{b} = 1; $keys{c} = 12; $keys{d} = 'a12'; $keys{d} = 'a9'; # 3 = sort by value - numeric ascending- will not work if contain characters foreach my $key (sort {$keys{$a} $keys{$b} || length($a) <=> length($b) || $a cmp $b} (keys %keys)) { print "Key = $key, Value = $keys{$key}\n"; }