A solution could be to take advantage of the possibility to feed sort a reference to a sorting subroutine. That way you could check if the first element is a number (for example with $array[0] =~ /^\d+$/) and select the right subroutine:
my @array = (12,23,34,56,876,324,13) ; # Use the array below to test for alphas #my @array = qw(mamma ninnonnina domani festa din don dan) ; my $sortsub ; my $sortnum = sub { $a <=> $b } ; my $sortalpha = sub { $a cmp $b } ; $sortsub = $array[0] =~ /^\d+$/ ? $sortnum : $sortalpha ; my @sorted = sort $sortsub @array ; print map "$_\n",@sorted ;
Note however that this approach is far from optimal in this case. In fact when the array contains alphas you replace the fast native sorting with a slower $sortalpha. This approach is better suited for selecting a sort sub in more complicated sorting.
Ciao!
--bronto
# Another Perl edition of a song:
# The End, by The Beatles
END {
$you->take($love) eq $you->made($love) ;
}
In reply to Re: A generic sorting problem
by bronto
in thread A generic sorting problem
by frankus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |