use strict; use warnings; my $tree = {}; read_it('D:', $tree); { my $durchlauf; sub read_it { my ($dir, $tree) = @_; my $name; $name = (split(/\\/, $dir))[-1] if ($durchlauf); $name = $dir unless ($durchlauf); $durchlauf = 1; my @file = (); my @dir = (); opendir(VERZ, $dir); while (my $read = readdir(VERZ)) { if (-d "$dir\\$read") { push (@dir, "$dir\\$read") if ($read !~ /(\.)$/); } else { push @file, $read; } } closedir(VERZ); $tree -> {$name} = { files => \@file }; foreach my $directory (@dir) { read_it("$directory", \%{ $tree -> {$name} }) } } }