#! /usr/bin/perl use warnings; use strict; use File::Find; use File::Basename; my $base_dir = 'C:\Perl\TestData'; my (@columns,@dirs,@buf,@dir_names,@filenames); my ($dir,$file,$resultxmlfile,$line,$fh); $line=''; sub process_files { print "dive into: $_[0]\n"; opendir DIR, $_[0] or die "Could not open directory"; print $_[0]; print "\n"; @dirs = readdir DIR; closedir DIR; foreach $file (@dirs) { if ($file =~ /\.{1,2}/) {next } print "processing: $file\n"; if ( -d "$_[0]/$file" ) { process_files ("$_[0]/$file"); push(@dir_names, basename($file)); print @dir_names; print "\n"; foreach my $file (@dirs){ print $file; next if $file eq '.' or $file eq '..'; print "\n"; open (FILE, "<", $file) or die "Could not open file -- $_[0]/$file"; @buf = ; foreach $line (@buf) { $line = ; # this line doesn't work. don't know what's wrong here.. $line=~ s/ /,/g; print $line; push(@columns,$line); print @columns; print "\n"; $file =~ s/.*\///; $file =~ s/\.[^.]+$//; push(@filenames, $file); print @filenames; } &write_output; # need to pass @columns/@filenames/@dir_names values to this function close FILE; } } } } process_files $base_dir;