Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

File::Find

2 réponses
Avatar
kurtz le pirate
bonjour,

hors déclarations, mon script se réduit à : find(\&process, $startDir);

et ma fonction :

29:sub process {
30: if((-f $_)&(!/\cM/)) {
31: open (INPUT, $_) || die "can't open [$_] : $!";
32: my $data = <INPUT>;
33: close(INPUT);
34: my $checksum = md5_hex($data);
35: print "$checksum : $File::Find::name\n";
36: }
36: }

vraiment rien d'extraordinaire. mais j'ai quelques problèmes : la
variable $_ sensée contenir le nom complet du fichier n'est pas toujours
exploitable ! j'ai pu traité un cas ou le nom du fichier contient en
controle-M je trouve ça bizarre puisque c'est le script qui me retourne
le nom mais après, mon script plante avec une erreur :
Error Line 31:
can't open [ Read in a file] : No such file or directory

c'est lui qui me donne un nom de fichier/dossier qui n'existe pas ?
je pigais plus la :(((( en regardant ou ça plante, j'ai trouvé le
dossier coupable :), il se nomme "perl - expreg" :))) j'en déduis donc
que $_ est interprété (c'est comme ça qu'on dit ?) et que le script
essaye de faire un open du résultat de la commande "perl -expreg"

bon je fais quoi la ?


--
klp

2 réponses

Avatar
publimike
kurtz le pirate wrote:

29:sub process {
30: if((-f $_)&(!/cM/)) {
31: open (INPUT, $_) || die "can't open [$_] : $!";
32: my $data = <INPUT>;
33: close(INPUT);
34: my $checksum = md5_hex($data);
35: print "$checksum : $File::Find::namen";
36: }
36: }


c'est lui qui me donne un nom de fichier/dossier qui n'existe pas ?
je pigais plus la :(((( en regardant ou ça plante, j'ai trouvé le
dossier coupable :), il se nomme "perl - expreg" :))) j'en déduis donc
que $_ est interprété (c'est comme ça qu'on dit ?) et que le script
essaye de faire un open du résultat de la commande "perl -expreg"

bon je fais quoi la ?


Plusieurs remarques en vrac, il n'est pas dit que ça règlera ton
problème:

ligne 30:
il manque un '&', non ? if -f && ....
ligne 31:
corrige par open (INPUT, "<$_") or die ...
ligne 32:
est-ce bien uniquement la première ligne de ton flux INPUT qui
t'intéresse ? Sinon il faut déclarer @data au lieu de $data.

Avatar
kurtz le pirate
In article <1hd8wg5.vpnppv1giogyeN%,
(Michael H.) wrote:

kurtz le pirate wrote:

29:sub process {
30: if((-f $_)&(!/cM/)) {
31: open (INPUT, $_) || die "can't open [$_] : $!";
32: my $data = <INPUT>;
33: close(INPUT);
34: my $checksum = md5_hex($data);
35: print "$checksum : $File::Find::namen";
36: }
36: }


c'est lui qui me donne un nom de fichier/dossier qui n'existe pas ?
je pigais plus la :(((( en regardant ou ça plante, j'ai trouvé le
dossier coupable :), il se nomme "perl - expreg" :))) j'en déduis donc
que $_ est interprété (c'est comme ça qu'on dit ?) et que le script
essaye de faire un open du résultat de la commande "perl -expreg"

bon je fais quoi la ?


Plusieurs remarques en vrac, il n'est pas dit que ça règlera ton
problème:

ligne 30:
il manque un '&', non ? if -f && ....


oui bien sur.


ligne 31:
corrige par open (INPUT, "<$_") or die ...


en fait j'ai déja corriger par :
open(INPUT,"<",$_) or die...


ligne 32:
est-ce bien uniquement la première ligne de ton flux INPUT qui
t'intéresse ? Sinon il faut déclarer @data au lieu de $data.
c'est tout le contenu du fichier. j'ai fais un undef $/ (slurp mode) un

peu avant.


merci


--
klp