in reply to Choosing the sort routine on the fly
I think you are being bitten by the optimisation that translates {$a cmp $b} and {$b cmp $a} into direct sorts that do not use a callback. Effectively the block supplied, if one of a few pre-defined forms is used to compile in a different codepath at compile time.
About the best I've achieved in the past is to have both codepaths in the code and select between them yourself.
$flag = 1; print $flag ? sort 'a'..'z' : sort {$b cmp $a } 'a'..'z';; a b c d e f g h i j k l m n o p q r s t u v w x y z $flag = 0; print $flag ? sort 'a'..'z' : sort {$b cmp $a } 'a'..'z';; z y x w v u t s r q p o n m l k j i h g f e d c b a
It means some repetition but avoids a callback and so speeds up the sorting. I've wished several times that there were sortAplhaAscending, sortAlphaDescending, sortNumericAscending & sortNumericDescending keywords in the language. The codepaths already exist in the runtime, but you have to use somewhat obscure syntax to get at them.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Choosing the sort routine on the fly
by grinder (Bishop) on Sep 08, 2006 at 10:54 UTC |