Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hello perl friends,
I have a question about reading directories, I have the following directory structure

/home/dev/jhon which is $strPath in my script, now
/home/dev/jhon contains
/home/dev/jhon/work
/home/dev/jhon/school
/home/dev/jhon/vacation

after this each dir below jhon, i.e work, school and vacation have the same subpath, /WORKAREA/work so it looks like below

/home/dev/jhon/work/WORKAREA/work 
/home/dev/jhon/school/WORKAREA/work 
/home/dev/jhon/vacation/WORKAREA/work 

what i want to do is if $strPath equals "/home/dev/jhon"
then do a readdir on

/home/dev/jhon/work/WORKAREA/work 
/home/dev/jhon/school/WORKAREA/work 
/home/dev/jhon/vacation/WORKAREA/work 
and store it in an array so something like what I have roughed up like so
opendir (DIR,$strPath) || die print "can't open dir : !$\n"; my @arrDirList=readdir(DIR); if ($strPath eq "/home/dev/jhon") { foreach $arrDirList(@arrDirList) { my $temp = "/WORKAREA/work"; open (DIR1, $strPath/$arrDirList$temp) || die print "nuts"; my @SubList=readdir(DIR1); } } else { continue on whatever i am doing }

do you think the above is something right that i am doing , can anyone provide me some inputs please
thank you very much

Edited 2003-05-20 by Ovid -- tried (sort of) to preserve author's structure

Replies are listed 'Best First'.
Re: help on reading directory
by halley (Prior) on May 20, 2003 at 18:44 UTC

    Wow. Preview before submit. Use <code> tags for output or code. Use capitals, punctuation, grammar in English. Please. :)

    What errors are you getting? Why is it not what you expect? What do you expect? What have you read to figure it out so far? How to ask questions the smart way.

    Don't use the 'print' in your die statements: just die "can't open dir: $!"

    --
    [ e d @ h a l l e y . c c ]

Re: help on reading directory
by Limbic~Region (Chancellor) on May 21, 2003 at 14:26 UTC
    Anonymous Monk,
    This is the way that I would do it:
    if ($strPath eq "/home/dev/jhon" && -d $strPath && -r _) { foreach my $subdir ( qw(work school vacation) ) { if (-d "$StrPath/$subdir/WORKAREA/work && -r _) { my @SubList=<"$StrPath/$subdir/WORKAREA/work/*>; } } } else { #Continue about your business }
    This seems a lot simpler to me. If there was an intentional reason for your complex structure (there was more to it than what you put in your post), then let me know and I will try again.

    Cheers - L~R