I just found the bug..
--
#!/usr/bin/perl -w
use 5.010;
use strict;
sub list_dir {
my ($dir) = @_;
chdir $dir or die "$dir: $!\n";
chomp(my $pwd = `pwd`);
say "$pwd/";
foreach my $entry (glob "*") {
# if entry is a directory, call list_dir on it
if (-d $entry) {
list_dir($entry); # Do not work without "()"
} else {
say "$pwd/$entry";
}
}
chdir ".." or die "..: $!\n";
}
# main program
die "$0: missing operand\n" if @ARGV < 1;
foreach (@ARGV) {
list_dir $_;
}
--
'chdir ".." or die "..: $!\n"' is the bug fix.. :)
> Assunto: -d test stops working
> Para: [email protected]
> Data: Quinta-feira, 17 de Fevereiro de 2011, 14:56
> Hello,
> I made a program that traverses a directory listing all the
> files in it and in it's sub directories..
>
> root@pacman:/home# cat list_dir
>
> #!/usr/bin/perl -w
>
>
>
> use 5.010;
>
> use strict;
>
>
>
>
> sub list_dir {
>
> say "Entring directory $_[0]";
>
> chdir $_[0]
>
> or die "$_[0]: $!\n";
>
>
>
> chomp(my $pwd = `pwd`);
>
> foreach my $entry (glob "*") {
>
> if (-d $entry) {
>
>
> list_dir($entry); # Do not work without ()
>
> } else {
>
> say
> "$pwd/$entry";
>
> }
>
> }
>
> say "Leaving directory $_[0]";
>
> }
>
> list_dir $ARGV[0];
> --
>
> But it appears to break in the -d test of the subdirectory
> 'linux':
>
> root@pacman:/home# /bin/ls -l tessio2/Books
>
> total 10744
>
> -rw-r--r-- 1 root root 2412061 2011-02-16 21:14
> 802.1Q-2005.pdf
>
> -rw-r--r-- 1 root root 273110 2011-02-16 21:14
> Artigo_SNMP.pdf
>
> drwxr-xr-x 4 root root 4096 2011-02-16 21:14
> ASAP
>
> -rw-r--r-- 1 root root 5016115 2011-02-16 21:14
> BSD_and_LINUX_09_2010_.pdf
>
> -rw-r--r-- 1 root root 356148 2011-02-16 21:14
> crash-course.pdf
>
> -rw-r--r-- 1 root root 266236 2011-02-16 21:14
> frutas_na_alimentacao.pdf
>
> drwxr-xr-x 2 root root 4096 2011-02-16 21:14
> linux
>
> -rw-r--r-- 1 root root 2605022 2011-02-16 21:14 Milan
> Kundera - a insustent?vel leveza do ser.pdf
>
> -rw-r--r-- 1 root root 52717 2011-02-16
> 21:14 opencon06-culture.pdf
>
> drwxr-xr-x 9 root root 4096 2011-02-16 21:14
> Perl
>
> drwxr-xr-x 2 root root 4096 2011-02-16 21:14
> TMP
> --
>
> Here is the program output (note that it stops entering
> directories after it leaves ASAP):
>
> root@pacman:/home# perl list_dir tessio2
>
> Entring directory tessio2
>
> /home/tessio2/bookmarks-2011-02-16.json
>
> Entring directory Books
>
> /home/tessio2/Books/802.1Q-2005.pdf
>
> /home/tessio2/Books/Artigo_SNMP.pdf
>
> Entring directory ASAP
>
> Entring directory Dic
>
> /home/tessio2/Books/ASAP/Dic/01.txt
>
> /home/tessio2/Books/ASAP/Dic/pre.txt
>
> Leaving directory Dic
>
> /home/tessio2/Books/ASAP/Distc
>
> Leaving directory ASAP
>
> /home/tessio2/Books/BSD_and_LINUX_09_2010_.pdf
>
> /home/tessio2/Books/crash-course.pdf
>
> /home/tessio2/Books/frutas_na_alimentacao.pdf
>
> /home/tessio2/Books/linux
>
> /home/tessio2/Books/Milan Kundera - a insustentável leveza
> do ser.pdf
>
> /home/tessio2/Books/opencon06-culture.pdf
>
> /home/tessio2/Books/Perl
>
> /home/tessio2/Books/TMP
>
> Leaving directory Books
>
> /home/tessio2/commands
>
> /home/tessio2/concurso.pdf
>
> /home/tessio2/Desktop
>
> /home/tessio2/Documents
>
> /home/tessio2/Downloads
>
> /home/tessio2/examples.desktop
>
> /home/tessio2/Music
>
> /home/tessio2/perlish
>
> /home/tessio2/Pictures
>
> /home/tessio2/Public
>
> /home/tessio2/Templates
>
> /home/tessio2/tj-apt
>
> /home/tessio2/tj-net
>
> /home/tessio2/Videos
>
> Leaving directory tessio2
> --
>
> Why the -d test of subdirectory 'linux' (and posterior
> directories) don't work?
> Thanks for your time!
>
>
>
>
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/