On 22/08/12 03:49, Uri Guttman wrote: > On 08/21/2012 08:29 PM, Eduardo wrote: >> how would you do with Sort::Maker? > i don't have time to show an example now but it is much cleaner > looking. all you need to do is code up how you extract each key from > the data set and how it gets sorted (number vs string, etc.). it makes > sorting into a declarative problem instead of a coding problem. > > uri
do'nt worry, that's what I'm Thanks a lot for forcing me to study sorting in perl. This morning I read sort_paper[*] apparently written by someone expert with the subject, and also Chapter 2 item 22 Effective perl, to get an overview. After that I have a vague idea and got this code: my @sorted = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, /^(\d+)-(\d+)/ && ($1 * 100 + $2) ] } keys %$hash; Tonight I reread the Sort::Maker manual, now I understand and I was able to create this code: my $sorted = make_sorter( name => 'sort_func', orcish => 1, number => '/^(\d+)-(\d+)/ && ($1 * 100 + $2)' that generate this: sub { my ( %or_cache1 ) ; sort { ( ( $or_cache1{$a} ||= do{ my ($val) = map { /^(\d+)-(\d+)/ && ($1 * 100 + $2) } $a ; $val } ) <=> ( $or_cache1{$b} ||= do{ my ($val) = map { /^(\d+)-(\d+)/ && ($1 * 100 + $2) } $b ; $val } ) ) } @_ ; } I did not think that I obtained so high performance in a short time, I just subscribe to the list. It's a pity Sort::Maker not in Debian Thanks a lot * http://www.sysarch.com/Perl/sort_paper.html Eduardo. -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/