OVH Cloud OVH Cloud

file::find

1 réponse
Avatar
hubert.toullec
Je rencontre une "subtilité" dans l'utilisation de File::find
(j'utilise la version 5.8.0, build 806 du Perl d'ActiveState sous
Windows XP Pro)

Le script ci-dessous :

use File::Find;
find(\&wanted, @ARGV);
sub wanted
{
if (-f $File::Find::name)
{
print $File::Find::name, "\n";
}
}

appliqué à l'arborescence suivante :

Directory of C:\wrkff\*

30/12/2003 22:04 <DIR> .
30/12/2003 22:04 <DIR> ..
30/12/2003 22:00 <DIR> test
30/12/2003 22:04 338 ff.pl
338 bytes in 1 file and 3 dirs 4 096 bytes allocated

Directory of C:\wrkff\test\*

30/12/2003 22:00 <DIR> .
30/12/2003 22:00 <DIR> ..
30/12/2003 22:01 4 test.txt
4 bytes in 1 file and 2 dirs 4 096 bytes allocated


produit les résultats suivants :

Avec la ligne de commande "perl ff.pl ." exécutée dans c:/wrkff,
j'obtiens :
./ff.pl

Avec la ligne de commande "perl ff.pl c:/wrkff", également exécutée
dans c:/wrkff, j'obtiens :
c:/wrkff/ff.pl
c:/wrkff/test/test.txt

Lorsque le '.' est utilisé comme répertoire de base, le
sous-répertoire 'test' ne semble pas être parcouru ! Quelqu'un peut-il
m'éclairer sur cette particularité (bug ou pas ?) ?

1 réponse

Avatar
Scetbon Cyril
Je pense que c'est une mauvaise interprétation de la chaine. (sûrement
dû aux slashs.A vérifier)

Essaie plutôt ça:
use File::Find;
find(&wanted, @ARGV);
sub wanted
{
print $File::Find::name, "n" if (-f $_);
}


Hubert Toullec wrote:
Je rencontre une "subtilité" dans l'utilisation de File::find
(j'utilise la version 5.8.0, build 806 du Perl d'ActiveState sous
Windows XP Pro)

Le script ci-dessous :

use File::Find;
find(&wanted, @ARGV);
sub wanted
{
if (-f $File::Find::name)
{
print $File::Find::name, "n";
}
}

appliqué à l'arborescence suivante :

Directory of C:wrkff*

30/12/2003 22:04 <DIR> .
30/12/2003 22:04 <DIR> ..
30/12/2003 22:00 <DIR> test
30/12/2003 22:04 338 ff.pl
338 bytes in 1 file and 3 dirs 4 096 bytes allocated

Directory of C:wrkfftest*

30/12/2003 22:00 <DIR> .
30/12/2003 22:00 <DIR> ..
30/12/2003 22:01 4 test.txt
4 bytes in 1 file and 2 dirs 4 096 bytes allocated


produit les résultats suivants :

Avec la ligne de commande "perl ff.pl ." exécutée dans c:/wrkff,
j'obtiens :
./ff.pl

Avec la ligne de commande "perl ff.pl c:/wrkff", également exécutée
dans c:/wrkff, j'obtiens :
c:/wrkff/ff.pl
c:/wrkff/test/test.txt

Lorsque le '.' est utilisé comme répertoire de base, le
sous-répertoire 'test' ne semble pas être parcouru ! Quelqu'un peut-il
m'éclairer sur cette particularité (bug ou pas ?) ?