[Perl] Erreur avec « exists » à moins que...

Philippe Delavalade philippe.delavalade at orange.fr
Mer 23 Mar 11:15:15 CET 2016


Le mercredi 23 mars à 10:50, Sebastien Moretti a écrit :
> Bonjour,
> 
> dans un cas comme celui-ci tu pourrais utiliser List::Compare qui permet
> d'avoir l'intersection, l'union, ... entre deux listes.

Je ne connais pas ce module mais je vais m'y intéresser.

> Ça aurait l'avantage de permettre d'avoir des lignes dupliquées dans les
> fichiers ce que ta variable associative ne permet pas.
> 
> 
> Sinon il ne manque pas un $i++ quelque part dans ta boucle while finale?

Évidemment :-( mais ça bloque dès la première ligne. Il était bien dans
le script original. Désolé pour cet oubli !

-- 
Ph. Delavalade
> 
> >Bonjour.
> >
> >Je donne ci-dessous une « simplification simpliste » d'un problème que je
> >rencontre avec un script plus long et compliqué.
> >
> >Je charge les lignes d'un premier fichier dans un tableau ; puis je fais un
> >peu pareil avec un autre fichier dont je charge les lignes dans une
> >variable associative. Je veux ensuite savoir si des lignes du premier
> >fichier sont déjà dans le second mais j'ai toujours une réponse négative
> >même avec l'exemple ci-joint dans lequel les deux fichiers sont identiques.
> >
> >La méthode peut sembler très compliquée dans l'exemple minimal ci-joint
> >mais ça ne semble pas idiot dans mon cas réel et j'ai construit cet
> >exemple en restant au plus près du script initial.
> >
> >Si quelqu'un pouvait me montrer mon erreur, je lui en serais très
> >reconnaissant.
> >
> >----------------------------------------
> >#!/usr/bin/perl -w
> >
> >use Modern::Perl;
> >
> >my $src;
> >my @t1;
> >my @t2;
> >my %lst;
> >
> >open( $src, "<", "$ARGV[0]" ) || die;
> >$/ = undef;
> >my $t = <$src>;
> >chomp($t);
> >@t1=split(/\n/,$t);
> >close $src;
> >
> >open( $src, "<", "$ARGV[0]") || die;
> >while (my $l = <$src>) {
> >   chomp($l);
> >   $lst{$l}=1;
> >}
> >close $src;
> >
> >my $i=0;
> >while (defined($t1[$i]) ) {
> >   push(@t2,$t1[$i]);
> >   (exists $lst{$t2[$#t2]}) || die "$t2[$#t2] introuvable dans $ARGV[0]";
> >}
> >
> >exit 0;
> >----------------------------------------
> >
> >Merci d'avance
> 
> --
> Sébastien Moretti
> 
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl



Plus d'informations sur la liste de diffusion Perl