dir_walk
que recorra los arboles de directorios de sus argumentos
generando un fichero de cada vez.
Observe el modo de uso y el resultado de una ejecución:
lhp@nereida:~/Lperl/src/hop/Chap4$ cat -n dirwalk.pl 1 #!/usr/bin/perl -w 2 use strict; 3 4 sub dir_walk { . .............. 19 } 20 21 my $d = dir_walk(@ARGV); 22 23 my $f; 24 while ($f = $d->()) { 25 print "$f\n"; 26 } lhp@nereida:~/Lperl/src/hop/Chap4$ ./dirwalk.pl /tmp/Parallel-Simple-Pipe-0.01 /tmp/Parallel-Simple-Pipe-0.01 /tmp/Parallel-Simple-Pipe-0.01/script /tmp/Parallel-Simple-Pipe-0.01/t /tmp/Parallel-Simple-Pipe-0.01/META.yml /tmp/Parallel-Simple-Pipe-0.01/lib /tmp/Parallel-Simple-Pipe-0.01/Changes /tmp/Parallel-Simple-Pipe-0.01/MANIFEST /tmp/Parallel-Simple-Pipe-0.01/Makefile.PL /tmp/Parallel-Simple-Pipe-0.01/README /tmp/Parallel-Simple-Pipe-0.01/script/test2.pl /tmp/Parallel-Simple-Pipe-0.01/script/test.pl /tmp/Parallel-Simple-Pipe-0.01/t/Parallel-Simple-Pipe.t /tmp/Parallel-Simple-Pipe-0.01/lib/Parallel /tmp/Parallel-Simple-Pipe-0.01/lib/Parallel/Simple /tmp/Parallel-Simple-Pipe-0.01/lib/Parallel/Simple/Pipe.pm /tmp/Parallel-Simple-Pipe-0.01/lib/Parallel/Simple/Communicator.pm lhp@nereida:~/Lperl/src/hop/Chap4$Nota: para que el operador
-d
funcione
es necesario que los nombres de fichero especifiquen
también el camino al archivo. No basta con el nombre de base.
Sin embargo, lo que devuelve readdir es el nombre
base.
lhp@nereida:~/Lperl/src$ perl -de 0 main::(-e:1): 0 DB<1> opendir $d,'/tmp/Parallel-Simple-Pipe-0.01' DB<2> x scalar(readdir $d) 0 '.' DB<3> x scalar(readdir $d) 0 '..' DB<4> x scalar(readdir $d) 0 'script' DB<5> x scalar(readdir $d) 0 't' DB<6> x scalar(readdir $d) 0 'META.yml' DB<7> x -d 't' 0 undef DB<8> x -d '/tmp/Parallel-Simple-Pipe-0.01/t' 0 1
Como se ve en las líneas 2 y 3 de la sesión readdir retorna las referencias al directorio actual y al directorio padre. Tenga esto en cuenta apartando estos dos directorios para evitar la posibilidad de una recursión infinita.
Si lo considera necesario, repase las secciones sobre el manejo de directorios y ficheros 2.5, 2.9 y 2.10.
Casiano Rodríguez León