our @Search = ("/directory_2b_searched"); sub open_dir { ...Code to open and read directory... #Loop thru Directory objects foreach $object (@objects) { if (-d $path . $object) { push @Search, $path . $object; # It's a directory to be searched } else { push @files, $object; # It's a file } } # If @files is empty return %tree with 1 key if ($#>files > 0) { my %tree = (ROOT=>$path, FILES=>\@files); return %tree; } else { my %tree = (ROOT=>"0"); return %tree; } } for (@Search) { my %dir_tree = open_dir($_); push @dir, \%dir_tree if ($dir_tree{ROOT}); }