use strict; use warnings; my @in = qw/foobarbazquux foo foobarbaz foobar/; my @out = map( { $_->[0] } sort( { $a->[1] <=> $b->[1] } map( { [$_, length($_)] } @in ) ) ); foreach (@out) { print "$_\n"; }