in reply to Re^3: get directory listing
in thread get directory listing

From perldoc File::Glob: ...

Your one liner is no longer really one line if you go that way. For the OP's solution, you'll need to be able to construct some magic looking glob string with '*' and '.*', and you'll have to weed out '.' and '..' as well. Assuming you can do that easily, you'll have something like this...

use File::Glob ':glob'; my @dirs = grep { -d } bsd_glob('/usr/darren/' . $some_magic_globstr_h +ere, GLOB_ERR); die "glob: $!" if GLOB_ERROR;
... which IMHO isn't shorter or easier to comprehend/maintain than this ...
opendir my $dh, /usr/darren' or die "opendir: $!"; my @dirs = grep { -d } map { "/usr/darren/$_" } grep { !/^\.\.?$/ } re +addir $dh; closedir $dh or die "closedir: $dh"; # this line optional
... esp if you have to change what is matched in the future, but YMMV.

Replies are listed 'Best First'.
Re^5: get directory listing
by blazar (Canon) on Nov 09, 2005 at 14:36 UTC
    Your one liner is no longer really one line if you go that way. For the OP's solution, you'll need to be able to construct some magic looking glob string with '*' and '.*', and you'll have to weed out '.' and '..' as well. Assuming you can do that easily, you'll have something like this...

    Fair enough! (++)

    However in my experience (but YMMV too!) I've found that in the vast majority of cases you either want:

    1. files after some definite name pattern in a given directory (e.g.: 'log--*'), or
    2. all files in a given directory hierarchy. In which case I usually resort to plain File::Find, although its "enhanced" cousins would do.

    Incidentally the "magic looking glob string" is nothing but '* .*'.