sub dir_explorer { my $entry = $_ ; if (-d $entry) { ... # ignore . and .. opendir(DIR, $entry) or die "Can not open $entry: $!"; # don't bother with "open(FILE, ">>$entry.tab") while ( defined( my $file = readdir DIR ) { if ( -f "$entry/$file" ) { textsformat( "$entry/$file" ); } # now "$entry/$file.txt" should exist, so: system "cat $entry/$file.txt >> $entry.tab"; } closedir DIR: } }