my $dirname = '/home/user/files'; my @dirs = ($dirname); sub subdirs { my $dname = shift; my $entry; opendir(DIR, $dname) or die "Kann Verzeichnis $dname nicht oeffnen: $!"; foreach $entry (readdir(DIR)) { # Verzeichnis oeffnen next if $entry =~ /^\.\.?$/; # Die Eintraege ".." (Eltern-Verzeichnis) # und "." (Das Verzeichnis selbst) ueberspringen if(-d "$dname/$entry") { # Wenn der Eintrag ein Verzeichnis ist... push(@dirs, "$dname/$entry"); # Abspeichern subdirs("$dname/$entry"); # Nun soll dieses Verzeichnis nach Verzeichnissen # durchsucht werden } } closedir(DIR); } subdirs($dirname); # subdir-Funktion aufrufen um Array zu erhalten. _Alternativ_ zum Obigen und wesentlich kürzer wäre: @dirs = grep { -d } glob("$dirname/*"); Nun kann man mit den Unterverzeichnissen arbeiten: foreach my $subdir (@dirs) { opendir(DIR, $subdir) or die "Kann Verzeichnis $subdir nicht oeffnen: $!"; foreach my $entry (readdir(DIR)) { next if $entry !~ /^([a-zA-Z0-9\_\-]+)\.html?$/; # Bsp, um alle HTML-Dateien # zu bearbeiten. open(FILE, "$subdir/$entry") or die "Kann Datei nicht oeffnen: $!"; # Mach' nun was mit der Datei close(FILE); } closedir(DIR); }