#!perl use strict; use warnings; sub printDir { my $headDir = shift; # get starting directory our $indent = 3; # indentation our $increase = 3; # indentation steps sub recurseDir { my ($home, $dir) = @_; # get home directory and current directory unless (-d "$home\\$dir") { # if it is a file print " " x $indent . "$dir\n"; # just print its name return; } print " " x $indent . "[$dir]\n"; # it's a dir, so print its name fancily opendir(DIR, "$home\\$dir") # let's have a look at the dir's contents or die "Failed to open '$home\\$dir': $!\n"; my @filelist = readdir DIR; # get them closedir DIR; # close the handle $indent += $increase; # increase indentation for next recursion level for (@filelist) { # iterate through dir contents next if ($_ eq '.' or $_ eq '..'); # ignore if . or .. recurseDir("$home\\$dir", $_); # and recurse otherwise } $indent -= $increase; # restore indentation } unless (-d "$headDir") { print " " x $indent . "$headDir\n"; return; } print " " x $indent . "[$headDir]\n"; opendir(DIR, $headDir) or die "Failed to open '$headDir': $!\n"; my @filelist = readdir DIR; closedir DIR; $indent += $increase; for (@filelist) { next if ($_ eq '.' or $_ eq '..'); recurseDir($headDir, $_); } } printDir 'C:\Dokumente';