opendir(my $DIR,'../') || die "Kann Verzeichnis nicht öffnen: $!"; foreach (my $eintrag=readdir($DIR)){ print "$_\n";
}
closedir ($DIR);
Das Beispiel versucht, die nächst höhere Ebene des Verzeichnissystems zu öffnen.
Im Fehlerfall wird eine Meldung ausgegeben,
wenn das Öffnen möglich ist, werden alle Dateien und Verzeichnisse ausgegeben.
Wozu closedir?
Klar, meist kommt man auch ohne closedir aus, da das Verzeichnis ja automatisch geschlossen wird, wenn das Script beendet wird bzw. ein weiteres Handle geöffnet werden kann, falls nicht explizit gelockt wurde.
Aber: Man weiß nicht immer, was kommt, und der "Gute Ton" verlangt, eine Datei, oder in dem Fall das Verzeichnis, wieder zu schließen, wenn man alle Arbeiten erledigt hat. Außerdem werden durch das closedir wieder Ressourcen freigegeben, die ja den Rechner entlasten, auf dem das Script läuft. Also bittschön: closedir() verwenden!
Kommentare zum Beitrag "closedir - Verzeichnis schließen"
Kommentar von Renée Bäcker
Ich würde dazu raten, sowohl beim Auslesen von Verzeichnissen wie auch bei Dateien, mit einer while-Schleife zu arbeiten:
opendir my $dir, '..' or die $!;
while( my $entry = readdir $dir ){
print $entry,"\n";
}
closedir $dir;
Das hat den Vorteil, das nicht alles erst in eine Liste geholt wird und dann über die Einträge iteriert wird, sondern dass immer ein Eintrag nach dem anderen geholt wird.
Bei Verzeichnissen spielt das vielleicht keine besonders wichtige Rolle (außer es sind Verzeichnisse mit einigen tausend Einträgen), aber bei Dateien kann es erhebliche Geschwindigkeits- und Speicherverbrauchsvorteile gegenüber der for(each)-Schleife haben.