in reply to Re: Getting a simple directory listing
in thread Getting a simple directory listing

Ok, ZZamboni, I tried that and it works. I am just trying to get an array with all the subdirectories of the current dir, and this doesn't work:
use Cwd; print "Current dir is: ", cwd, "\n"; opendir(TEXTFILES, "desktop") || die "Couldn't open the text file dire +ctory: $!"; @data=readdir(TEXTFILES); foreach (@data) { push (@dir) if (-d "./desktop/$_"); } closedir(TEXTFILES); print @dir; # This line is just here to make sure it worked, which it +currently doesn't.
Update: Is there a more efficient way to do this? This seems a bit bulky. If someone could show me a better way (and explain it for this newbie) to do this, I'd really appreciate it.

Replies are listed 'Best First'.
Re: Re: Re: Getting a simple directory listing
by ZZamboni (Curate) on May 01, 2001 at 04:24 UTC
    push does not use $_ as an implicit argument, so when you do push(@dir) you are not pushing anything into @dir. You have to do:
    push(@dir, $_) if (-d "./desktop/$_");
    Although I would substitute that whole block (the readdir and the foreach) by:
    @dir = grep { -d "./desktop/$_" } readdir(TEXTFILES);
    :-)

    --ZZamboni

      Bingo, that worked. Is there a way I can strip out the . and .. directories?
        Just check for them. In your original code:
        foreach (@data) { next if $_ eq "." || $_ eq ".."; push @dir, $_ if -d "./desktop/$_"; }
        Using grep:
        @dir = grep { $_ ne "." && $_ ne ".." && -d "./desktop/$_" } readdir(TEXTFILES);

        --ZZamboni