Pascal R.: Fragen zu Funktion NummernSort aus Selfhtml

Hallo zusammen!

In http://selfhtml.teamone.de/cgiperl/funktionen/listenhashes.htm#sort stellt Stefan die praktische Funktion NummernSort zur Verfügung, die ich mir leider nicht erklären kann (bin noch Anfänger, ein paar kleine Scripts habe ich aber schon geschrieben).

Hier die Funktion:

sub NummernSort {
 if($a < $b)
  { return -1; }
 elsif($a == $b)
  { return 0; }
 else
  { return 1; }
}

Aufgerufen wird sie mit
my @SortierteListe = sort(NummernSort @HighscoreListe);

Was ich daran nicht verstehe:

1. Wo kommen die Variablen $a und $b her? Es sind keine vordefinierten Variablen wie $_ etc. Obwohl strict benutzt wird, werden Sie nicht mit my eingeleitet, und trotzdem meckert der Interpreter nicht. Warum nicht?

2. Was steckt überhaupt hinter diesen Variablen? Wird dabei von sort jedem Wert einmal jeder andere Wert zugeordnet?

3. Was stellt sort mit den Rückgabewerten an? Ich weiß zwar, was sie bewirken, habe aber keine Ahnung, wie und warum es funktioniert.

Ich wäre jedem sehr dankbar, der mich diesbezüglich etwas erhellen könnte. Ich weiß, RTFM, aber TFM ist für einen Anfänger sehr, sehr umfangreich. Wenn aber jemand einen (bzw. ein paar) Link(s) auf Selfhtml hätte, wodurch ich auf die Lösung gestoßen werde, freue ich mich auch!

Schöne Grüße, Pascal

  1. hi!

    1. Wo kommen die Variablen $a und $b her? Es sind keine
      vordefinierten Variablen wie $_ etc. Obwohl strict benutzt wird,
      werden Sie nicht mit my eingeleitet, und trotzdem meckert der
      Interpreter nicht. Warum nicht?

    Es sind eben doch vordefinierte Variablen. In den Variablen $a und
    $b stehen beim Sortieren immer zwei Werte. In der Funktion, die an
    dieser Stelle verwendet wird, wertet man die beiden Variablen aus
    und gibt zurück, welche der beiden kleiner ist bzw. ob beide gleich
    groß sind. Die Perl-Funktion sort() sortiert dann anhand dieser
    Angaben die Liste.

    Schau dir auch mal die entsprechende Beschreibung von sort() in
    perldoc an. Da sind jede Menge Beispiele dabei:

    http://www.perldoc.com/perl5.6.1/pod/func/sort.html

    1. Was stellt sort mit den Rückgabewerten an? Ich weiß zwar, was
      sie bewirken, habe aber keine Ahnung, wie und warum es funktioniert.

    -1 bedeutet, dass $a "kleiner" war, +1 bedeutet das Gegenteil. Wenn
    beide gleich groß sind, sollte 0 heraus kommen. "Kleiner" steht in
    dem Fall nicht unbedingt für eine übliche Ordnungsrelation: wenn du
    deine Liste zb. absteigend sortieren willst statt aufsteigend, dann
    müsste die Vergleichsfunktion 5 als kleiner als 3 ausgeben, damit
    sort() die Liste wie gewünscht ordnet.

    Hier noch ein Link auf den entsprechenden Abschnitt in SELFHTML:

    http://selfhtml.teamone.de/cgiperl/funktionen/listenhashes.htm#sort

    bye, Frank!

    1. Hallo Frank!

      Vielen Dank für die schnelle und hilfreiche Antwort! Werde sofort mal in der perldoc schauen!

      Gruß, Pascal