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

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

I currently am using the line

my @dirs = grep { -d "$base/$_" and $_ ne "." and $_ ne ".." } readdir +(DIR);
to build a list of dirs from the return of readdir. What I now wish to do is build a second list of just the files from the same readdir list. In keeping with Swartzian principle, what I want to write is something like:

my (@dirs,@files) = grep { -d "$base/$_" and $_ ne "." and $_ ne ".." } { -f "$base/$_" } readdir(DIR);
I realise that I can do:

my @all = readdir(DIR); my @dirs = grep {-d "$base/£_" and $ne "." and $_ ne ".." } @all; my @files = grep {-f "$base/£_" } @all;

But my instinct say (probably wrongly) that this can be done without the need to name @all? Thanks.