Mit solchen %hash-Variablen kann man übrigens einiges anfangen, deswegen lohnt es sich, sich mal damit zu beschäftigen ;-)
Da hänge ich mich mal dran, zum Thema hashes ...
Ich habe gestern "mal schnell" die directory browsing-Funktion des Apache-Webservers nachprogrammiert (Fancy-Indexing, also Ausgabe vorwärts und rückwärts sortierbar nach allen Spalten durch Mausklick auf die Überschriftszeile - diese enthält einen CGI-Link auf dieselbe Funktion mit einem zusätzlichen CGI-Parameter, der das Sortierkriterium festlegt).
Dabei habe ich beim Einlesen des Verzeichnisinhalts jeweils den Wert und den Index des Eintrags für jede einzelne Spalte abgespeichert (am Beispiel des Änderungsdatums):
$datum{$wert} = $index;
@datum[$index] = $wert;
Ich habe also (gleichnamig) einen Hash und einen Array für dieselbe Datenspalte definiert; der Hash bildet Werte auf Indizes ab, der Array Indizes auf Werte.
Später kann ich das gewünschte Sortierkriterium abfragen, und falls dies das Änderungsdatum war, kann ich mit
foreach my $key (sort keys %datum)
{
$index = $datum{$key};
tu_was ($index);
}
alle Indizes meiner Einträge in der gewünschten Reihenfolge abarbeiten: Mit $datum[$index] greife ich im Array auf das passende Änderungsdatum dieses Eintrags zu (*das* könnte ich mit $key auch direkter tun), mit $groesse[$index] auf die Dateigröße desselben Eintrags usw.
Sinn der Sache war eigentlich, in diese Verzeichnisanzeige dann noch ein paar Zusatzfunktionen einzubauen. Meine Benutzer müssen beispielsweise die Möglichkeit haben, aus einem solchen Verzeichnis auch Dateien *löschen* zu können - keine sehr typische Web-Funktion, aber der Inhalt dieses Verzeichnisses wird durch Benutzer-Aktionen dynamisch erzeugt, und irgendwann wird es halt unübersichtlich ...
Cheatah, geht das irgendwie noch eleganter? (Ich hätte gern ein Äquivalent für PASCAL-records oder C-structs, um nicht zwei Variablen pro Spalte definieren zu müssen - das macht die Parameterübergabe so unhandlich ...)