[Munich-pm] sort mit curried function

Robert C. Helling helling at lmu.de
Mo Nov 19 02:06:01 PST 2012


Hallo,

ich stehe grade mal wieder auf dem Schlauch. Ich habe eine Liste mit 
Hashreferenzen, wobei die Hashes mehrere Felder vom gleichen Typ haben. 
Nun moechte ich gerne die Liste sortieren anhand jeweils eines Feldes des 
Hashes. Die Vergleichsfunktion ist etwas kompliziert. Daher will ich sie 
nicht fuer jedes Hashfeld neu schreiben, sondern mach lieber eine 
gemeinsame Vergleichsfunktion, die den Namen des Feldes bekommt und dann 
entsprechend gecurried wird. Schematisch wie in diesem Beispiel:

#!/usr/bin/perl -w

use strict;

my @liste = ({ x => 1, y => 4}, {x => 3, y => 2});


my $byx = &bykey('x');

foreach my $h (sort $byx @liste){
     print $h->{x}, $h->{y}, "\n";
}

sub bykey {
     my $key = shift;

     return(sub {$a->{$key} <=> $b->{$key}});
}


Das funktioniert so. Meine Frage ist nun: Wie komme ich ohne die 
Dummyvariable $byx aus? Ich habe zB schon probiert

foreach my $h (sort &&bykey('x') @liste){

aber das gibt einen Syntaxerror. Auch aehnliche Versionen mit weniger &'s 
und mehr oder wenigen Klammern verschiedenen Typs habe ich probiert, aber 
nichts davon funktionierte.

Wer erleuchtet mich?

Viele Gruesse
Robert

-- 
.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oO
Robert C. Helling     Elite Master Course Theoretical and Mathematical Physics
                       Scientific Coordinator
 		      Ludwig Maximilians Universitaet Muenchen, Dept. Physik
print "Just another   Phone: +49 89 2180-4523  Theresienstr. 39, rm. B339
     stupid .sig\n";   http://www.atdotde.de


Mehr Informationen über die Mailingliste Munich-pm