http://qs321.pair.com?node_id=759557


in reply to Re: can I get a translation
in thread can I get a translation

Thanks I was looking to strip off the . and .. from the list returned as what I am wanting to do is travel down a directory tree opening files and checking to make sure they are valid, this is for a project I am working on to store results of tests into a database. I am on windows system so my filenames don't start with a period, I managed to get my list of directories now I would like to open the files within those directories but I don't think this is quite right.
opendir(DIR, "c:\\mlx\\") || die "can't opendir: $!"; @list = grep { $_ ne '.' && $_ ne '..'&& $_ ne 'copy.pl' } @list=readdir(DIR); foreach $name (@list) { print $name, "\n"; opendir(DIR, $name); @files=readdir(DIR); foreach $file(@files){ print "filename is ", $file, "\n"; } #opendir(DIR, "$_")||die "Not able to open directory $!"; @files=readdir(DIR); foreach(@files) { print $_, "\n"; } }
this runs but I its not giving me all the files. I have files in each directory it looks to be returning for only one of them.

Replies are listed 'Best First'.
Re^3: can I get a translation
by kennethk (Abbot) on Apr 23, 2009 at 15:26 UTC
    You can easily modify your regex to match only entries that do not start a period (\^[^\.]\) to remove the current and parent directories from the list, but that is redundant with performing the file test -f, which returns false on folders. Do you want to collect folders as well as files as you traverse your tree, or are you only interested in checking file names in known directories? Removing the regular expression from you posted code will achieve the latter.