my @unsorted = ("A","B","C",9,"B","B","AAA","D",4,"EE","BBB",55,"BBBB","CCC",55,"BBDB","BBB","JJ","ZZZZZZ","A blue flamingo doesn't have spots"); my %tmp; $tmp{$_} = length $_ for @unsorted; my @sorted = { $tmp{$a} <=> $tmp{$b} or $a cmp $b } keys %tmp;