in reply to Getting a simple directory listing

Your code works for me, after I made a simple substitution of opendir(TEXTFILES, ".") || die "Couldn't open the text file directory: $!"; instead of trying to open directory "desktop".. You need to change to the "desktop" directory, because you're doing the test on the current directory..
HTH

The full code that worked for me follows:

use Cwd; print "Current dir is: ", cwd, "\n"; local $_; opendir(TEXTFILES, "c:\\CA_LIC") || die "Couldn't open the text file d +irectory: $!"; @data=readdir(TEXTFILES); foreach (@data) { print $_, "\n" if(-d "C:\\CA_LIC\\$_ "); } closedir(TEXTFILES);

Update:ZZamboni types faster than I do :o), obviously, he's said what I've tried to say too, better, in fact :o)

Replies are listed 'Best First'.
Re: Re: Getting a simple directory listing
by Stamp_Guy (Monk) on May 01, 2001 at 04:16 UTC
    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.
      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?