folder |--folder2 |--folder3 | |--folderX | |--folderY |-folder4 #### Folder 4464 - foldername_1. count subfolders 0. Folder 4465 - foldername_2. count subfolders 0. Folder 4466 - foldername_3. count subfolders 4. ... #### Folder 1298 - foldername_ten. subfolder 1299. subfolder 1300. Folder 1299 - foldername_eleven. No sub folders. Folder 1300 - foldername_twelve. No sub folders. Folder 1311 - foldername_thirteen. subfolder 1317. subfolder 1318. subfolder 1958. #### # %folders has each folder ID as a key and the name as the value # @subfolders is the Folder/Folder data as shown above, line-for-line foreach my $k (sort (keys (%folders))) { $folderpaths{$k} = &build_path($k,@subfolders); print "$k => $folderpaths{$k}\n"; } sub build_path($@) { my $folderid = shift @_; my @dumpff = @_; my $path = "$folderid"; my $parentid = ""; foreach my $line (@dumpff) { if ($line =~ /^Folder (\d{3,5})\s+\-\s+.*\./) { $parentid = $1; } elsif ($line =~ /\s+subfolder\s+$folderid\s+\-\s+.*\./) { $path = join('/', &build_path($parentid,@subfolders),$folderid); } } return $path; }