On Sat, Feb 09, 2002 at 11:43:40PM +0100, Nicolas Bertolissio wrote: > Bonjour, > > Journal des modification : > ddts-script (0.4.14) unstable; urgency=low > > * fix typo for ppart match due to ddts fix > * turn `until' loop into `while' > * prevent from using [EMAIL PROTECTED]' sample address > thanks to Martin Quinson for reporting these bugs > > Je ne comprends pas pourquoi la deuxième modification est nécessaire, il > me semble que ça fait la même chose, si quelqu'un peut m'expliquer...
Le while sort dès que <> rend un truc non defini. On peut le rééecrire en while (defined($_ = <>)) Ca s'arrete donc immédiatement si le résultat n'est pas défini. La version en until s'arrete quand $_ concorde avec la chaine vide. Bon, #UNDEF concorde avec cette chaine, mais c'est tout de meme mal de manipuler #UNDEF. La preuve, on prend un warning dans les dents. En fait, j'ai beaucoup de problemes avec le script. Il n'arrive pas à décoder les morceaux en base64 correctement. Les symptomes, c'est qu'il prétend qu'il n'y a rien dans le base64, et ne dit rien de plus, meme en débug 9. Meme en ajoutant un print "Seen $_" brutal la ou la copie se fait (autour de la ligne 891, qui est celle sur laquelle porte mon patch précédent), on a rien. Visiblement, l'analyse du base64 s'arrete avant meme d'avoir commencé. J'ai remplacé le corps de la boucle "Read the mail text" par ca: # Read the mail text while (<>) { $filename = $1 if (/filename="([^"]*)"/); if (/Content-Transfer-Encoding: base64/) { $base64 = 1; next; # skip the first empty line } if (/$boundary/) { undef $filename; undef $base64; next; } next unless (defined $base64); next unless (defined $filename); next if ($filename =~ /^close-bug/); # skip bug closure next if /^$/; $filename =~ s/^new(\..*)?/new/; # new\..* contains descriptions to translate open FILE, ">$temp_dir/ddts-$filename-$$" || die "Can't create temp file `ddts-$filename-$$': $!"; print FILE "begin-base64 400 $temp_dir/ddts-$filename-$$\n"; while (<>) { last if /^$/; print FILE $_; } print FILE "===="; close FILE || die "Can't write temp file `ddts-$filename-$$': $!"; &parse_uuencoded("$temp_dir/ddts-$filename-$$", $report_id); unlink "$temp_dir/ddts-$filename-$$" || die "Can't remove temp file `ddts-$filename-$$': $!"; } Ce qui change, c'est que maintenant, j'arrive à commencer à lire le bout en base64, et j'ai bien les fichiers à faire sur mon disque. Mais par contre, c'est la derniere chose que fait le script. Apres avoir parsé le boulot à faire, il échoue avec un "ERROR unknown line" tout à fait compréhensible, puisque la ligne donnée comme inconnue n'est pas faite de caractères affichables. Alors c'est pas tres grave, puisque je recois le boulot a faire, mais j'ai pas les bugs attachés (dans le cas d'une traduction à reprendre de quelqu'un d'autre). Et pis, j'ai l'impression que j'ai tout cassé dans ton beau script, Nico. D'ou ma question, est ce que quelqu'un arrive à demander une traduction au serveur, et à la parser avec le script en ce moment ? Merci, Mt.