use strict; my $source = 'c:\directory'; my $folders = 0; my $files = 0; opendir (SOURCE, $source) or die "Cannot open the source folder for reading: $!\n"; my $file; while (defined($file = readdir(SOURCE))){ next if $file =~ /^\.{1,2}$/; my $full_name = "$source/$file"; if (-d $full_name){ #my $full_name = "$source/$file"; print qq($file); $folders++; print "\n"; process($full_name); }else{ print qq($full_name$file); $files++; print "\n"; } #next; } closedir (SOURCE); # Subroutine to process subdirectory and list content. sub process{ my ($path, $file, @files, $file_full_path); $path = shift; opendir (SUBDIR, $path) or die "Cannot open the subfolder for reading: $!\n"; @files = sort grep {!/^\.{1,2}$/} readdir(SUBDIR); closedir (SUBDIR); for (@files){ $file_full_path = "$path/$_"; if (-d $_){ print qq($_); $folders++; print "\n"; process($_); }else { print qq($file_full_path); $files++; print "\n"; } } } print $folders; print "\n"; print $files;