Hi,
ich bin gerade dabei, mir ein package zu basteln, mit dem ich eine bestimmte Klasse von Datensätzen zwischen ihrer Strings-Form (eine Zeile einer Datei) und einer elegant verarbeitbaren Form als Hash hin- und herkonvertieren kann.
Da ich diese Art von Datensätzen mehrfach simultan brauche, brauche ich auch mehrere Hashes.
Also habe ich versucht, einen Pointer auf einen solchen Hash an die entsprechenden Funktionen zu übergeben - VAR-Parameter wie in PASCAL gibt es in Perl ja leider nicht.
Beim Zerlegen klappt das auch prima:
$$hash_ptr {$key} = $wert
setzt wie gewünscht $wert unter dem Schlüssel $key in den Hash.
Schwieriger wird es überraschenderweise beim Lesen des Hashes. Klar, $$hash_ptr {$key} würde auch hier funktionieren. Ich will aber *alle* Einträge bearbeiten und wieder zu einer Zeile zusammenkleben.
Leider aber funktioniert die folgende Konstruktion nicht:
foreach my $key (keys $$hash_ptr) { ... }
, weil das "typfreie" Perl nämlich plötzlich meckert, die Funktion "keys" benötige als Parameter einen Hash und keinen dereferenzierten Skalar. Auch wenn da sehr wohl ein Pointer auf einen Hash drinsteht - Perl rafft es offenbar nicht.
Was tun?
Mit der Holzhammermethode habe ich mir jetzt erst mal eine lokale Kopie des Hashes angelegt - *das* funktioniert! - aber performancemäßig ist das eine Katastrophe, wenn ich bloß zur Umgehung einer syntaktischen Schwäche von Perl ständig meine kompletten Daten duplizieren muß (ich weiß noch nicht mal die Zehnerpotenz der erforderlichen Aufrufe ...).
Hat jemand eine Idee, wie ich ohne diese Duplizierung sämtliche Einträge eines über einen Pointer adressierten Hashs verarbeiten kann?
Die Reihenfolge ist mir nicht so wichtig, bei der nächsten Zersplitterung wird ja wieder ein Hash daraus - ich muß bloß alle Einträge erwischen ...