@sorted = map { $_->[0] } sort { $a->[1] <=> $b->[1] } # use numeric comparison map { [$_, length($_)] } # calculate the length of the string @unsorted; #### #!/usr/bin/perl use strict; use Devel::Peek; my @arr = (22, 5.555, 1, 4444, 333); print Dump(\@arr, @arr+0), "\n\n\n"; # at this point, there are 4 IVs and one NV in our array; # naturally, none of the elements have their length ("CUR") field set my ($retval, $just_once); my @sorted = sort { # does this alter the internal structures of our actual # array elements, turning IVs and NVs into PVIVs/PVNVs? $retval = length $a <=> length $b; print Dump \@arr, @arr+0 if !$just_once++; # of course it does! $retval; } @arr; print "\nsorted = @sorted\n";