jokey2
Erfahrenes Mitglied
Hallo Gemeinde!
Ich schreibe gerade ein Perl-Skript, das mir C-Code-Dateien einlesen soll.
Ich habe also eine Funktion ParseFile, die ich mit dem Namen einer *.c-Datei aufrufe. Diese Funktion parst dann die Datei durch und wertet u.A. auch Präprozessoranweisungen aus. Wenn sie also auf eine Zeile mit '#include ...' stößt, ruft sie sich selbst wieder auf mit dem Namen der Includedatei. Wenn sie dort wieder auf eine '#include ...'-Zeile stößt, ruft sie wieder sich selbst auf mit dem Namen der Neuen Includedatei. Also ein rekursiver Aufruf der ParseFile-Funktion.
Das Problem, das ich habe ist, daß alle Dateien natürlich mit dem gleichen HANDLE geöffnet werden, und das gilt offenbar global. Wenn ich also in der gerade aktuellen Rekursionsstufe die Datei schließe und in die vorhergehende Rekursionsstufe zurückkehre, ist das HANDLE dort scheinbar auch geschlossen und ich kann nicht mehr auf die Datei zugreifen.
Die Fragen:
- Kann ich ein Dateihandle lokal definieren, so daß in jeder Rekursionsstufe ein neues HANDLE angelegt wird?
- Kann ich ein HANDLE dynamisch erzeugen und nicht nur als Konstante? (Also in der Art:
)
- Gibt es irgendeine andere Lösung für mein Problem?
- Gibt es noch etwas, was ich in PERL bei rekursiven Aufrufen beachten muß?
Für etwas Hilfe wäre ich sehr dankbar!
Ich schreibe gerade ein Perl-Skript, das mir C-Code-Dateien einlesen soll.
Ich habe also eine Funktion ParseFile, die ich mit dem Namen einer *.c-Datei aufrufe. Diese Funktion parst dann die Datei durch und wertet u.A. auch Präprozessoranweisungen aus. Wenn sie also auf eine Zeile mit '#include ...' stößt, ruft sie sich selbst wieder auf mit dem Namen der Includedatei. Wenn sie dort wieder auf eine '#include ...'-Zeile stößt, ruft sie wieder sich selbst auf mit dem Namen der Neuen Includedatei. Also ein rekursiver Aufruf der ParseFile-Funktion.
Das Problem, das ich habe ist, daß alle Dateien natürlich mit dem gleichen HANDLE geöffnet werden, und das gilt offenbar global. Wenn ich also in der gerade aktuellen Rekursionsstufe die Datei schließe und in die vorhergehende Rekursionsstufe zurückkehre, ist das HANDLE dort scheinbar auch geschlossen und ich kann nicht mehr auf die Datei zugreifen.
Die Fragen:
- Kann ich ein Dateihandle lokal definieren, so daß in jeder Rekursionsstufe ein neues HANDLE angelegt wird?
- Kann ich ein HANDLE dynamisch erzeugen und nicht nur als Konstante? (Also in der Art:
Code:
$FileHandle = "HANDLE_$nummer";
open($FileHandle, $FileName);
- Gibt es irgendeine andere Lösung für mein Problem?
- Gibt es noch etwas, was ich in PERL bei rekursiven Aufrufen beachten muß?
Für etwas Hilfe wäre ich sehr dankbar!