On Wednesday 26 July 2006 00:59, Rob Dixon wrote:
> Hello Alan
>
> Alan_C wrote:
> > On Tuesday 25 July 2006 15:56, Rob Dixon wrote:
> >>Nishi Bhonsle wrote:
[ snip ]
> > [ snip ]
[ snip ]
> > #!/usr/bin/perl
> > use strict;
> > use warnings;
> >
> > my @dir = do {
> > # opendir my $dh, 'C:\build\Sample\NewDir' or die $!;
> > opendir my $dh, '/home/al/temp4' or die $!;
> > # grep -f, readdir $dh;
> > readdir $dh;
> > };
> >
> > print "$_\n" foreach @dir;
[ snip ]
> > That works on Linux (not matters the current dir, I was in /home/al when
> > I ran it) which leads me to guess that something be wrong with the grep
> > line.
[ snip ]
> but the error in my code was that without a full path
> the -f operator will look for the file in the current directory to decide
> whether it is a plain file or not instead of in its proper place. Files
> were being filtered out of the list because they didn't exist at all (in
> the current directory), not because they were the unwanted directories.
> Your code succeeds because you have removed the grep() but now it no longer
Ok, *now* I get it.
my @dir = do {
# opendir my $dh, 'C:\build\Sample\NewDir' or die $!;
opendir my $dh, '/home/al/temp4' or die $!;
# grep -f, readdir $dh;
Therein, the grep works on the $dh (/home/al/temp4) while the -f operator
works on the current dir [not (sp) necisarily /home/al/temp4]
Thus the fixed version has the full path in the grep line (or, obviously,
could first change dir to desired dir before doing the grep -f)
I tinkered with it a bit, added a file filter capability.
#!/usr/bin/perl
use strict;
use warnings;
my $path = '/home/al/temp4'; # c:/multi/platform
my @dir = do {
opendir my $dh, $path or die $!;
grep -f "$path/$_", readdir $dh;
};
# print "$_\n" foreach @dir; # all files
foreach ( @dir ) {
print $_, "\n" if /\.htm/i; # my file filter
}# end
--
Alan.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>