use File::Find; use Data::Dumper; my $files = {}; find(sub {wanted($files);}, "c:/perl58"); print Dumper($files); sub wanted { if (($_ ne ".") && ($_ ne "..")) { insert(shift); } } sub insert { my @elements = split("/", $File::Find::name); my $parent = shift; my $index; foreach ($index = 0; $index <= $#elements; $index ++) { if (($index == $#elements) && (-f $_)) { $parent->{$elements[$index]} = $File::Find::name; } else { if (!defined($parent->{$elements[$index]})) { $parent->{$elements[$index]} = {}; } $parent = $parent->{$elements[$index]}; } } }