Tag Struppi.
@sortiert = map { $_ -> [0]}
sort { $b->[0] <=> $a->[0] }
map { [ $_, (split/;/)[0] ] } @daten;
Das ist falsch.
Richtig. Der Fehler liegt allerdings nicht in den map-Anweisungen, sondern in der sort-Anweisung (ich bin mir nicht sicher, dass du das so gemeint hast).
Du willst:
[...]
my @sortiert = map { $_->[0]}
sort { $b->[1] <=> $a->[1] }
map { [ $_, (split/;/)[0,1] ] } @daten;
Wozu sollte er die ersten beiden Teile extrahieren wollen, wenn er doch nur nach dem ersten Teil sortieren will? Richtig wäre es so:
my @sortiert = map { $_->[0] }
sort { $b->[1] <=> $a->[1] }
map { [ $_, (split/;/)[0] ] } @daten;
Es ginge übrigens auch ohne Schwartzsche Transformation:
my @sortiert = sort { substr($b, 0, index($b, ";")+1) <=> substr($a, 0, index($a, ";")+1) } @Array;
Allerdings zeigt das Beispielskript, dass die Schwartzsche Transformation schneller ist.
@Gustl: Dein Code konnte mit "<=>" nicht funktionieren, da die perleigene Typumwandlung String->Integer daran scheitern musste, dass deine Array-Elemente nicht-numerische Zeichen enthielten. Nur zur Ergänzung: Siechfred versucht, die Schwartzsche Transformation zu erklären ;-)
Siechfred
«Ich liebe euch doch alle!»