Hi!
@daten = sort {x($a) <=> x($b)} @daten;
sub x
{
($nicht1,$nicht2,$nicht3,$wichtig,..) = split(/,/,$daten[ ??? ]);
$a = $wichtig;
}
- Die Funktion wird von sort() mit einem (skalaren) Parameter aufgerufen. Auf den mußt Du zugreifen, nicht auf @daten.
Sagen wir's doch einfach auf Deutsch:
sub x {
my $line = shift;
my $wichtig;
(undef, undef, undef, $wichtig, undef) = split(/,/, $line);
return $wichtig;
}
- Und ihr Ergebnis muß sie nicht an $a zuweisen (eine solche Variable existiert m. E. gar nicht - in welchem scope auch? Das ist nur eine symbolische Notation),
Doch doch, die existiert tatsaechlich. $a und $b sind globale Variablen im aktuellen package. Die Perl-Erfinder haben diesen Weg aus Geschwindigkeitsgruenden gewaehlt. See also perldoc->perlfunc->sort.
Um noch etwas mehr Geschwindigkeit rauszukitzeln, kann man vielleicht die sub x ganz weglassen und stattdessen einfach
@daten = sort { (split(/,/, $a))[3] <=> (split(/,/, $b))[3] } @daten;
schreiben. Falls die einzelnen Felder in jeder Zeile dieselbe Laenge haben, kann man statt split() auch substr() verwenden, was wahrscheinlich noch schneller wird.
So long