Rob Dixon schreef:
> Nishi Bhonsle wrote:
> >
> > If I am still using the below logic, how can i modify the below
> prog > to ignore empty directories and list only directories
> containing > directories
> > and files in buildlist.txt ?
> >
> > opendir DIR, $path or die "Can't open $path: $!";
> >
> > #my @new = grep /[^.]/, readdir DIR;
> > my @new = grep { $_ ne "." and $_ ne ".." } readdir DIR;
> > closedir DIR;
> >
> > open FILE,">>C:\buidlist.txt";
> > print FILE "$_\n" foreach @new;
> > close FILE;
>
> Hi Nishi
>
> To check whether a directory's empty or not you need to read /that/
> directory in turn. Since you'll be doing it twice it may as well go
> into a subroutine:
>
> use strict;
> use warnings;
>
> my $path = 'C:\data';
>
> my @new = grep { -d and dirlist($_) } dirlist($path);
>
> open my $fh,">> C:\\buildlist.txt";
> print $fh "$_\n" foreach @new;
> close $fh;
>
> sub dirlist {
> my $path = shift;
> opendir my $dh, $path or die "Can't open $path: $!";
> my @dir = grep { $_ ne "." and $_ ne ".." } readdir $dh;
> closedir $dh;
> map "$path\\$_", @dir;
> }
Variant:
#!perl
use strict ;
use warnings ;
my $path = 'C:/data' ;
my @new = grep { -d and dirlist($_) } dirlist($path) ;
my $fh_name = 'C:/buildlist.txt' ;
open my $fh, '>>', $fh_name
or die "open $fh_name, stopped $!" ;
print $fh "$_\n" for @new, '-- ' ;
close $fh
or die "close $fh_name, stopped $!" ;
sub dirlist
{
my $dh_name = shift ;
opendir my $dh, $dh_name
or die "open $dh_name, stopped $!" ;
my @dir = grep { $_ ne "." and $_ ne ".." } readdir $dh;
closedir $dh
or die "close $dh_name, stopped $!" ;
map "$path/$_", @dir;
}
--
Affijn, Ruud
"Gewoon is een tijger."
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>