my %seq = ('1035-2341', '1', '1035-2347', '1', '1035-65', '1', '1035-46', '1'); foreach (sort {length $a <=> length $b || $a cmp $b} keys %seq) { print $_, "\n"; }