Michael Schröpl: (Perl/Datenstruktur) Hash of Files?

Beitrag lesen

Mit Typeglobs kannst du von einem bereits existierenden Filehandle eine Variable erzeugen:
  $filehandle = *FILEHANDLE;
  print $filehandle "Hallo Filehandle!\n";
Typeglobs dienten ursprünglich dazu, Arrays und Hashes über eine Referenz an Funktionen zu übergeben (bevor es echte Referenzen gab).

Super, da wäre ich so schnell niemals drauf gekommen! Genau so etwas suchte ich ... :-)))

Mit einer kleinen Funktion kannst du dir aus lokalen Filehandles Variablen erzeugen:
  sub return_fh
  {
    my $filename = shift;
    local *FH;  # local, nicht my!

Hoppla, daran wäre ich eventuell noch gescheitert.

Was genau macht denn "local" hier?
(Insbesondere: Überlebt es den Funktionsaufruf?)

Ich brauche die Files nämlich eine ganze Weile, der hash wird eine globale Variable sein müssen ... und ich brauche viele davon ...

Die so erzeugten Skalare solltest du dann auch problemlos in Hashes oder Arrays speichern können.

Fein!

Ich werde mir also eine Funktion
      store ($record, $datum)
bauen, die
1. nachsieht, ob die zu $datum passende handle im hash schon existiert (und bei Bedarf mit Deiner Funktion eine neue öffnet und das handle im Hash ablegt) und
2. $record in diese Datei schreibt.
(Falls das Öffnen nicht ging, dann haben wir halt ein Problem ...)

Das löst mein Problem perfekt!
(Die ganze Konfigurationsdatei-Einleserei - das Ganze muß nämlich DAU-konfigurierbar sein - habe ich in der Zwischenzeit schon mal geschrieben ...)

Eine weitere Möglichkeit, über die ich nichts genaueres schreiben möchte, sind die Module IO::File und IO::Handle, mit denen du Filehandles als Objekte anlegen und mit ihnen arbeiten kannst.

Aber dies durchzuarbeiten, wollte ich mir ohne jegliche Ahnung von Objekten nicht antun, zumal das Programm besser heute noch halbwegs fertig werden sollte ...

Mein Perl-Kochbuch nennt als Referenzen mit weiteren Informationen die open-Funktion in perlfunc(1) und in Kapitel 3 von "Programming Perl", die Dokumentation des FileHandle-Moduls (auch in Kapitel 7 von "Programming Perl") und "Typeglobs and Filehandles" aus Kapitel 2 von "Programming Perl".

Danke, werde ich mir alles merken - wenn ich mal wieder Zeit dafür habe, das wird in nächster Zeit wahrscheinlich etwas enger werden ...