From d.minix at gmail.com Wed Mar 2 03:01:37 2016 From: d.minix at gmail.com (Dominique) Date: Tue, 1 Mar 2016 16:01:37 -1000 Subject: [Perl] CPAN et vielles dentelles. Message-ID: Bonjour a tous j'ai un truc pas ordinaire a faire, on se traine dans notre boite un applicatif heureusement ré-écrit qui tournait jadis sous QNX 4 j'ai donc plein d'instance ce cet OS encore dans la nature. j'ai besoin de faire un truc qui permettra la transition vers un la modernité "java/mysql touça" mais il me faudrait coder quelques rustine. notamment pour nous aider a migrer. mais voila, sniff # perl -v This is perl, v5.8.1 built for x86-qnx Copyright 1987-2003, Larry Wall je n'ai pratiquement rien de CPAN qui s'installe... trop vieux mon système. QUESTION : a votre connaissance existe t'il un site ou on peux retrouver l?état du CPAN a une date précise (et ancienne) si j'avais un CPAN de disons 2003 ou au pire 2005 je pense que pas mal de chose passerais. En plus, bonjour QNX. c'est posix, j'ai pas les outils de dev qui vont bien. je suis dans l'artisanat total, mais je pense que même en pure-perl je peux piocher pas mal de chose pour m'aider dans le CPAN. j'ai bien trouvé backpan.perl.org mais je sais pas trop comment prendre au max les version ante-2005 merci de vos lumières. # perl -V Summary of my perl5 (revision 5.0 version 8 subversion 1) configuration: Platform: osname=qnx, osvers=425, archname=x86-qnx uname='qnx 2 j 425 pci 32 ' config_args='-de' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=y, bincompat5005=undef Compiler: cc='cc', ccflags ='-mf -w4 -Wc,-wcd=202 -Wc,-wcd=203 -Wc,-wcd=302 -Wc,-fi=unix.h -I/usr/local/include', optimize='-O', cppflags='-w4 -Wc,-wcd=202 -Wc,-wcd=203 -Wc,-wcd=302 -Wc,-fi=unix.h -I/usr/local/include' ccversion='', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=, d_longdbl=define, longdblsize=8 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=4 alignbytes=1, prototype=define Linker and Libraries: ld='ld', ldflags ='-g -N1M -L/usr/local/lib' libpth=/usr/local/lib /usr/lib libs=-lsocket -lcrypt -lunix perllibs=-lsocket -lcrypt -lunix libc=/usr/lib/clib3r.lib, so=none, useshrplib=false, libperl=libperl3r.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_none.xs, dlext=none, d_dlsymun=undef, ccdlflags='' cccdlflags='', lddlflags='' Characteristics of this binary (from libperl): Compile-time options: USE_LARGE_FILES Built under qnx Compiled at Oct 27 2003 20:03:31 @INC: /usr/local/lib/perl5/5.8.1/x86-qnx /usr/local/lib/perl5/5.8.1 /usr/local/lib/perl5/site_perl/5.8.1/x86-qnx /usr/local/lib/perl5/site_perl/5.8.1 /usr/local/lib/perl5/site_perl . -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From pauamma at gundo.com Wed Mar 2 05:33:39 2016 From: pauamma at gundo.com (Pau Amma) Date: Wed, 2 Mar 2016 04:33:39 -0000 Subject: [Perl] CPAN et vielles dentelles. In-Reply-To: References: Message-ID: <8e2e503a8ca1a3825155cc6526b80e85.squirrel@www.gundo.net> On Wed, March 2, 2016 2:01 am, Dominique wrote: > Bonjour a tous > si j'avais un CPAN de disons 2003 ou au pire 2005 je pense que pas mal de > chose passerais. A tout hasard, essaye https://web.ahttps://web.archive.org/web/*/http://www.cpan.org ? Il y a l'air d'avoir plein de page aechivées remontant à 1998 From ponder.stibbons at orange.fr Wed Mar 2 07:09:33 2016 From: ponder.stibbons at orange.fr (Jean) Date: Wed, 02 Mar 2016 07:09:33 +0100 Subject: [Perl] CPAN et vielles dentelles. In-Reply-To: References: Message-ID: <1456898973.15721.6.camel@jf-xubuntu> Le mardi 01 mars 2016 à 16:01 -1000, Dominique a écrit : > > Bonjour a tous > > > j'ai un truc pas ordinaire a faire, on se traine dans notre boite un > applicatif heureusement ré-écrit qui tournait jadis sous QNX 4 > j'ai donc plein d'instance ce cet OS encore dans la nature. j'ai > besoin de faire un truc qui permettra la transition vers un la > modernité "java/mysql touça" > mais il me faudrait coder quelques rustine. notamment pour nous aider > a migrer. > > > mais voila, sniff > > > # perl -v > > > This is perl, v5.8.1 built for x86-qnx > > > Copyright 1987-2003, Larry Wall > > > je n'ai pratiquement rien de CPAN qui s'installe... trop vieux mon > système. > QUESTION : a votre connaissance existe t'il un site ou on peux > retrouver l?état du CPAN a une date précise (et ancienne) > si j'avais un CPAN de disons 2003 ou au pire 2005 je pense que pas mal > de chose passerais. > En plus, bonjour QNX. c'est posix, j'ai pas les outils de dev qui vont > bien. je suis dans l'artisanat total, mais je pense que même en > pure-perl je peux piocher pas mal de chose pour m'aider dans le CPAN. > j'ai bien trouvé backpan.perl.org mais je sais pas trop comment > prendre au max les version ante-2005 > merci de vos lumières. Une autre piste est de voir sur Gitpan : https://github.com/gitpan Pour une distribution donnée, tu demande la liste des commits et tu obtiens une série de messages du genre : Import of TARTEMPION/Mon-Super-Module-1.05 from CPAN Julien Tartempion commited with Gitpan on 5 Oct 2005 Et il ne te reste plus qu'à écrire un programme Perl pour analyser tous ces messages et en extraire la date. Evidemment, il faut le faire distrbution par distribution. Donc ce n'est pas forcément plus simple ou plus rapide que l'examen de backpan. Peut-être peux-tu trouver une façon d'utiliser Gitpan meilleure que cela. Mais je ne connais pas de site qui puisse donner l'état de CPAN à une date donnée. Jean From d.minix at gmail.com Wed Mar 2 22:41:30 2016 From: d.minix at gmail.com (Dominix) Date: Wed, 2 Mar 2016 11:41:30 -1000 Subject: [Perl] CPAN et vielles dentelles. In-Reply-To: <8e2e503a8ca1a3825155cc6526b80e85.squirrel@www.gundo.net> References: <8e2e503a8ca1a3825155cc6526b80e85.squirrel@www.gundo.net> Message-ID: <56D75E0A.3080109@gmail.com> super ! je me suis fait un miroir de http://web.archive.org/web/20050831075652/http://www.cpan.org/ en local et j'utilise ce miroir local dans cpan::Config.pm de mes QNX je n'ai même pas de tri a faire. c'est direct cpan merci pour le tuyau, j'avais pas pensé a web.archive.org, je vais pourvoir rattraper les 20 ans de dette technologique ... Le 01/03/2016 18:33, Pau Amma a écrit : > On Wed, March 2, 2016 2:01 am, Dominique wrote: >> Bonjour a tous >> si j'avais un CPAN de disons 2003 ou au pire 2005 je pense que pas mal de >> chose passerais. > A tout hasard, essaye > https://web.ahttps://web.archive.org/web/*/http://www.cpan.org ? Il y a > l'air d'avoir plein de page aechivées remontant à 1998 > > > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl From philippe.bruhat at free.fr Thu Mar 3 09:21:15 2016 From: philippe.bruhat at free.fr (Philippe Bruhat (BooK)) Date: Thu, 3 Mar 2016 09:21:15 +0100 Subject: [Perl] CPAN et vielles dentelles. In-Reply-To: References: Message-ID: <20160303082115.GA2341@zok> > Bonjour a tous > > j'ai un truc pas ordinaire a faire, on se traine dans notre boite un > applicatif heureusement ré-écrit qui tournait jadis sous QNX 4 > j'ai donc plein d'instance ce cet OS encore dans la nature. Si tu avais plein de temps libre, tu pourrais même faire un CPAN tester sur une de ces machines... ;-) > j'ai besoin de > faire un truc qui permettra la transition vers un la modernité "java/mysql > touça" > mais il me faudrait coder quelques rustine. notamment pour nous aider a > migrer. > > mais voila, sniff > > # perl -v > > This is perl, v5.8.1 built for x86-qnx > > Copyright 1987-2003, Larry Wall > > je n'ai pratiquement rien de CPAN qui s'installe... trop vieux mon système. > QUESTION : a votre connaissance existe t'il un site ou on peux retrouver > l?état du CPAN a une date précise (et ancienne) > si j'avais un CPAN de disons 2003 ou au pire 2005 je pense que pas mal de > chose passerais. > En plus, bonjour QNX. c'est posix, j'ai pas les outils de dev qui vont > bien. je suis dans l'artisanat total, mais je pense que même en pure-perl > je peux piocher pas mal de chose pour m'aider dans le CPAN. > j'ai bien trouvé backpan.perl.org mais je sais pas trop comment prendre au > max les version ante-2005 C'est un problème que David Cantrell (DrHyde) a résolu pour toi: http://cp5.8.1an.barnyard.co.uk/ Une autre solution, ce serait de compiler un Perl récent pour ton système. -- Philippe Bruhat (BooK) One lesson learned is never enough. (Moral from Groo The Wanderer #104 (Epic)) From d.minix at gmail.com Fri Mar 4 10:11:55 2016 From: d.minix at gmail.com (Dominique) Date: Thu, 3 Mar 2016 23:11:55 -1000 Subject: [Perl] CPAN et vielles dentelles. In-Reply-To: <20160303082115.GA2341@zok> References: <20160303082115.GA2341@zok> Message-ID: Le 2 mars 2016 22:21, "Philippe Bruhat (BooK)" a écrit : > > > Bonjour a tous > > > > j'ai un truc pas ordinaire a faire, on se traine dans notre boite un > > applicatif heureusement ré-écrit qui tournait jadis sous QNX 4 > > j'ai donc plein d'instance ce cet OS encore dans la nature. > > Si tu avais plein de temps libre, tu pourrais même faire un CPAN tester > sur une de ces machines... ;-) j'ai pas... et puis l'interêt ? ca m'etonnerais qu'on me corrige un bug de 2003 qui gene personne. ... > > j'ai bien trouvé backpan.perl.org mais je sais pas trop comment prendre au > > max les version ante-2005 > > C'est un problème que David Cantrell (DrHyde) a résolu pour toi: > http://cp5.8.1an.barnyard.co.uk/ super, exactement ce qu'il me faut, merci book. > > Une autre solution, ce serait de compiler un Perl récent pour ton système. ou grimper l'himalaya en pantoufle pour trouver fonds ... non merci. j'ai super galéré pour trouver mieux que perl 5.0004.0004 sous QNX4 et celui qui avait réussi a compiler 5.8.1 (frank liu ???) avait dit sur un forum qu'on ne l'y reprendrai pas ... je comprend pourquoi. QNX4 c'est de la techno de l'epoque windows98. tres peu de port, pas d'outils, compilateur proprio ... mais merci du conseil. > > -- > Philippe Bruhat (BooK) > > One lesson learned is never enough. > (Moral from Groo The Wanderer #104 (Epic)) > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From olivier.mengue at gmail.com Fri Mar 4 14:25:41 2016 From: olivier.mengue at gmail.com (=?UTF-8?Q?Olivier_Mengu=C3=A9?=) Date: Fri, 4 Mar 2016 14:25:41 +0100 Subject: [Perl] CPAN et vielles dentelles. In-Reply-To: References: Message-ID: Le 2 mars 2016 à 03:01, Dominique a écrit : > > Bonjour a tous > > j'ai un truc pas ordinaire a faire, on se traine dans notre boite un > applicatif heureusement ré-écrit qui tournait jadis sous QNX 4 > j'ai donc plein d'instance ce cet OS encore dans la nature. j'ai besoin de > faire un truc qui permettra la transition vers un la modernité "java/mysql > touça" > Java, c'est déjà has-been. La modernité, c'est Go. Et Perl. Mais l'environnment dans lequel tournera le code "moderne", ça va rester QNX ? > mais il me faudrait coder quelques rustine. notamment pour nous aider a > migrer. > > mais voila, sniff > > # perl -v > > This is perl, v5.8.1 built for x86-qnx > > Copyright 1987-2003, Larry Wall > > je n'ai pratiquement rien de CPAN qui s'installe... trop vieux mon système. > Dis nous de quels modules tu aurais besoin. On pourra peut-être d'indiquer si tu as des chances d'arriver à une solution... Ensuite, les développeurs de modules ne peuvent pas être au courant des problèmes que tu rencontres si tu ne les signales pas. Un moyen pas trop contraignant pour toi (à condition que la publication d'informations sur ton système sur le web n'est pas problématique) est d'installer un client CPAN Testers dans ton client CPAN. Voici le mode d'emploi http://wiki.cpantesters.org/wiki/QuickStart Grâce à cela, à chaque tentative d'installation (réussie ou en échec) un rapport sera publié et l'auteur du module pourra le consulter. Il n'y a aucun rapports venant de machines QNX actuellement. > QUESTION : a votre connaissance existe t'il un site ou on peux retrouver > l?état du CPAN a une date précise (et ancienne) > Backpan.org contient toutes les archives publiées sur le CPAN. Pour avoir un état du CPAN à une date précise, il te faut une copie de l'index à cette date là. L'index se trouve dans le fichier 02packages.details.txt.gz. Je ne crois pas qu'il y ait d'archive publique de ce fichier. Mais Andreas Koening (andk at cpan.org) doit sûrement en avoir une (si tu lui demandes, tu peux lui dire que tu viens de ma part et mets moi en copie). Une fois que tu as cela, la commande suivante pourrait peut-être te permettre d'installer les modules : cpanm --mirror http://backpan.org/ --mirror-index ./02packages.details.txt.gz Si tu persistes dans ce projet et que ça ne marche pas, je te recommande de reposer ta question sur la liste cpan-workers at perl.org http://lists.perl.org/list/cpan-workers.html si j'avais un CPAN de disons 2003 ou au pire 2005 je pense que pas mal de > chose passerais. > En plus, bonjour QNX. c'est posix, j'ai pas les outils de dev qui vont > bien. je suis dans l'artisanat total, mais je pense que même en pure-perl > je peux piocher pas mal de chose pour m'aider dans le CPAN. > j'ai bien trouvé backpan.perl.org mais je sais pas trop comment prendre > au max les version ante-2005 > merci de vos lumières. > Il y a toutefois une autre solution, bien plus simple, si tu arrives à mieux identifier les modules dont tu as besoin et que ceux-ci sont en pur-Perl : il s'agit d'utiliser App::FatPacker pour construire sur ton environnement de développement Perl moderne un paquet complet qui embarquera ton script et tous les modules pur-Perl qui manquent sur l'environnement cible. Grâce à cela tu n'a plus qu'un seul fichier à déployer sur le système cible, et donc plus besoin de client CPAN et de toute la toolchain CPAN sur QNX. C'est l'approche qu'utilise cpanm. C'est aussi l'approche que j'ai choisie pour le maximum de portabilité pour mes deux projets personnels github-keygen [1] et angel-PS1 [3]. Tu peux voir mes scripts d'assemblage sur [2] et [4]. [1] https://github.com/dolmen/github-keygen/ [2] https://github.com/dolmen/github-keygen/blob/devel/release.pl [3] https://github.com/dolmen/angel-PS1/ [4] https://github.com/dolmen/angel-PS1/blob/devel/dist Olivier. -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From d.minix at gmail.com Sat Mar 5 01:51:27 2016 From: d.minix at gmail.com (Dominix) Date: Fri, 4 Mar 2016 14:51:27 -1000 Subject: [Perl] CPAN et vielles dentelles. In-Reply-To: References: Message-ID: <56DA2D8F.4080705@gmail.com> Le 04/03/2016 03:25, Olivier Mengué a écrit : > Le 2 mars 2016 à 03:01, Dominique > a écrit : > > > Bonjour a tous > > j'ai un truc pas ordinaire a faire, on se traine dans notre boite > un applicatif heureusement ré-écrit qui tournait jadis sous QNX 4 > j'ai donc plein d'instance ce cet OS encore dans la nature. j'ai > besoin de faire un truc qui permettra la transition vers un la > modernité "java/mysql touça" > > > Java, c'est déjà has-been. La modernité, c'est Go. Et Perl. quand tu as 20 ans de retard, n'en avoir plus que 5 c'est une grande avancé. > > Mais l'environnment dans lequel tournera le code "moderne", ça va > rester QNX ? non, ça va tourner sur du vieux linux 4.x > ... > j'ai bien trouvé backpan.perl.org mais > je sais pas trop comment prendre au max les version ante-2005 > merci de vos lumières. > > > > Il y a toutefois une autre solution, bien plus simple, si tu arrives à > mieux identifier les modules dont tu as besoin et que ceux-ci sont en > pur-Perl : il s'agit d'utiliser App::FatPacker pour construire sur ton > environnement de développement Perl moderne un paquet complet qui > embarquera ton script et tous les modules pur-Perl qui manquent sur > l'environnement cible. Grâce à cela tu n'a plus qu'un seul fichier à > déployer sur le système cible, et donc plus besoin de client CPAN et > de toute la toolchain CPAN sur QNX. > C'est l'approche qu'utilise cpanm. > C'est aussi l'approche que j'ai choisie pour le maximum de portabilité > pour mes deux projets personnels github-keygen [1] et angel-PS1 [3]. > Tu peux voir mes scripts d'assemblage sur [2] et [4]. > vous vous rendez pas compte. sous QNX4 ya même pas cpanm. j'ai galéré pour trouver une version 1 de wget, et encore il ne supporte pas de proxy. de toute façon l?environnement est complètement isolé. (et ça vaut bien mieux) > [1] https://github.com/dolmen/github-keygen/ > [2] https://github.com/dolmen/github-keygen/blob/devel/release.pl > [3] https://github.com/dolmen/angel-PS1/ > [4] https://github.com/dolmen/angel-PS1/blob/devel/dist > > merci je regarderais pour ma culture. > Olivier. > > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From olivier.mengue at gmail.com Sat Mar 5 09:23:50 2016 From: olivier.mengue at gmail.com (=?UTF-8?Q?Olivier_Mengu=C3=A9?=) Date: Sat, 5 Mar 2016 09:23:50 +0100 Subject: [Perl] CPAN et vielles dentelles. In-Reply-To: <56DA2D8F.4080705@gmail.com> References: <56DA2D8F.4080705@gmail.com> Message-ID: Le 5 mars 2016 à 01:51, Dominix a écrit : > > > > > vous vous rendez pas compte. sous QNX4 ya même pas cpanm. j'ai galéré pour > trouver une version 1 de wget, et encore il ne supporte pas de proxy. > de toute façon l?environnement est complètement isolé. (et ça vaut bien > mieux) > Au contraire, je me rends très bien compte. cpanm est un unique script Perl à déposer sur ta machine QNX. Télécharge le depuis ton environnement favori avec la commande suivante : wget -O cpanm http://cpanmin.us Tu n'a plus qu'un seul fichier à transférer sur la machine cible. Mais bon comme je l'ai écrit, chercher à installer des modules du CPAN directement sur la machine cible avec un client CPAN n'est pas la solution que tu devrais privilégier. Un paquetage personalisé avec App::FatPacker est vraiment la solution la plus simple et la plus fiable à mettre en oeuvre. Olivier. -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From philippe.delavalade at orange.fr Wed Mar 23 10:43:41 2016 From: philippe.delavalade at orange.fr (Philippe Delavalade) Date: Wed, 23 Mar 2016 10:43:41 +0100 Subject: [Perl] =?utf-8?b?RXJyZXVyIGF2ZWMgwqvCoGV4aXN0c8Kgwrsgw6AgbW9pbnMg?= =?utf-8?b?cXVlLi4u?= Message-ID: <20160323094341.GA1300@magellan.home> 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. -- Ph. Delavalade From sebastien.moretti at unil.ch Wed Mar 23 10:50:52 2016 From: sebastien.moretti at unil.ch (Sebastien Moretti) Date: Wed, 23 Mar 2016 10:50:52 +0100 Subject: [Perl] =?utf-8?b?RXJyZXVyIGF2ZWMgwqvCoGV4aXN0c8Kgwrsgw6AgbW9pbnMg?= =?utf-8?b?cXVlLi4u?= In-Reply-To: <20160323094341.GA1300@magellan.home> References: <20160323094341.GA1300@magellan.home> Message-ID: <56F266FC.2060601@unil.ch> Bonjour, dans un cas comme celui-ci tu pourrais utiliser List::Compare qui permet d'avoir l'intersection, l'union, ... entre deux listes. Ç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? > 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 From biz at joueb.com Wed Mar 23 11:06:50 2016 From: biz at joueb.com (=?UTF-8?Q?St=c3=a9phane_Gigandet?=) Date: Wed, 23 Mar 2016 11:06:50 +0100 Subject: [Perl] =?utf-8?b?RXJyZXVyIGF2ZWMgwqvCoGV4aXN0c8Kgwrsgw6AgbW9pbnMg?= =?utf-8?b?cXVlLi4u?= In-Reply-To: <56F266FC.2060601@unil.ch> References: <20160323094341.GA1300@magellan.home> <56F266FC.2060601@unil.ch> Message-ID: <56F26ABA.4040209@joueb.com> Bonjour, Quand tu ouvres le 2ème fichier, tu lis tout le fichier au lieu d'une ligne à cause du $/ = undef du 1er fichier. Et comme tu Sébastien il manque le $i++ dans la boucle de fin. Ci-dessous le script corrigé. Avec des print en plus pour voir ce qui se passe. Bonne journée, Stéphane #!/usr/bin/perl -w use Modern::Perl; use strict; 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; $/ = "\n"; open( $src, "<", "$ARGV[0]") || die; while (my $l = <$src>) { chomp($l); print "!--> $l <--\n"; $lst{$l}=1; } close $src; my $i=0; while (defined($t1[$i]) ) { print "--> $t1[$i] <--\n"; push(@t2,$t1[$i]); (exists $lst{$t2[$#t2]}) || die "$t2[$#t2] introuvable dans $ARGV[0]"; $i++; } exit 0; Le 23/03/2016 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. > > Ç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? > >> 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 > From philippe.delavalade at orange.fr Wed Mar 23 11:15:15 2016 From: philippe.delavalade at orange.fr (Philippe Delavalade) Date: Wed, 23 Mar 2016 11:15:15 +0100 Subject: [Perl] =?utf-8?b?RXJyZXVyIGF2ZWMgwqvCoGV4aXN0c8Kgwrsgw6AgbW9pbnMg?= =?utf-8?b?cXVlLi4u?= In-Reply-To: <56F266FC.2060601@unil.ch> References: <20160323094341.GA1300@magellan.home> <56F266FC.2060601@unil.ch> Message-ID: <20160323101515.GA1350@magellan.home> 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 From philippe.delavalade at orange.fr Wed Mar 23 11:19:00 2016 From: philippe.delavalade at orange.fr (Philippe Delavalade) Date: Wed, 23 Mar 2016 11:19:00 +0100 Subject: [Perl] =?utf-8?b?RXJyZXVyIGF2ZWMgwqvCoGV4aXN0c8Kgwrsgw6AgbW9pbnMg?= =?utf-8?b?cXVlLi4u?= In-Reply-To: <56F26ABA.4040209@joueb.com> References: <20160323094341.GA1300@magellan.home> <56F266FC.2060601@unil.ch> <56F26ABA.4040209@joueb.com> Message-ID: <20160323101900.GA1660@magellan.home> Le mercredi 23 mars à 11:06, Stéphane Gigandet a écrit : > Bonjour, > > Quand tu ouvres le 2ème fichier, tu lis tout le fichier au lieu d'une ligne > à cause du $/ = undef du 1er fichier. OK. Je croyais bêtement que le $/=undef ne concernait que le premier fichier. Merci beaucoup. -- Ph. Delavalade > Et comme tu Sébastien il manque le $i++ dans la boucle de fin. > > Ci-dessous le script corrigé. Avec des print en plus pour voir ce qui se > passe. > > Bonne journée, > > Stéphane > > > #!/usr/bin/perl -w > > use Modern::Perl; > > use strict; > > 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; > > $/ = "\n"; > > open( $src, "<", "$ARGV[0]") || die; > while (my $l = <$src>) { > chomp($l); > print "!--> $l <--\n"; > $lst{$l}=1; > } > close $src; > > my $i=0; > while (defined($t1[$i]) ) { > print "--> $t1[$i] <--\n"; > push(@t2,$t1[$i]); > (exists $lst{$t2[$#t2]}) || die "$t2[$#t2] introuvable dans $ARGV[0]"; > $i++; > } > > exit 0; > > > > > Le 23/03/2016 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. > > > >Ç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? > > > >>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 > > > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl From sylvain at lhullier.org Wed Mar 23 11:35:10 2016 From: sylvain at lhullier.org (Sylvain Lhullier) Date: Wed, 23 Mar 2016 11:35:10 +0100 Subject: [Perl] =?utf-8?b?RXJyZXVyIGF2ZWMgwqvCoGV4aXN0c8Kgwrsgw6AgbW9pbnMg?= =?utf-8?b?cXVlLi4u?= In-Reply-To: <20160323101900.GA1660@magellan.home> References: <20160323094341.GA1300@magellan.home> <56F266FC.2060601@unil.ch> <56F26ABA.4040209@joueb.com> <20160323101900.GA1660@magellan.home> Message-ID: <20160323103509.GA4465@lhullier.org> Pour localiser les modifications : { local $/=undef; ... } # Ici $/ revient à sa valeur initale Philippe Delavalade a écrit : > Le mercredi 23 mars à 11:06, Stéphane Gigandet a écrit : > > Bonjour, > > > > Quand tu ouvres le 2ème fichier, tu lis tout le fichier au lieu d'une ligne > > à cause du $/ = undef du 1er fichier. > > OK. Je croyais bêtement que le $/=undef ne concernait que le premier fichier. > > Merci beaucoup. > > -- > Ph. Delavalade > > > Et comme tu Sébastien il manque le $i++ dans la boucle de fin. > > > > Ci-dessous le script corrigé. Avec des print en plus pour voir ce qui se > > passe. > > > > Bonne journée, > > > > Stéphane > > > > > > #!/usr/bin/perl -w > > > > use Modern::Perl; > > > > use strict; > > > > 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; > > > > $/ = "\n"; > > > > open( $src, "<", "$ARGV[0]") || die; > > while (my $l = <$src>) { > > chomp($l); > > print "!--> $l <--\n"; > > $lst{$l}=1; > > } > > close $src; > > > > my $i=0; > > while (defined($t1[$i]) ) { > > print "--> $t1[$i] <--\n"; > > push(@t2,$t1[$i]); > > (exists $lst{$t2[$#t2]}) || die "$t2[$#t2] introuvable dans $ARGV[0]"; > > $i++; > > } > > > > exit 0; > > > > > > > > > > Le 23/03/2016 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. > > > > > >Ç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? > > > > > >>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 > > > > > > > _______________________________________________ > > Perl mailing list > > Perl at mongueurs.net > > http://listes.mongueurs.net/mailman/listinfo/perl > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl -- Sylvain Lhullier From stephane.teletchea at univ-nantes.fr Wed Mar 23 18:40:50 2016 From: stephane.teletchea at univ-nantes.fr (=?UTF-8?B?VMOpbGV0Y2jDqWEgU3TDqXBoYW5l?=) Date: Wed, 23 Mar 2016 18:40:50 +0100 Subject: [Perl] =?utf-8?b?RXJyZXVyIGF2ZWMgwqvCoGV4aXN0c8Kgwrsgw6AgbW9pbnMg?= =?utf-8?b?cXVlLi4u?= In-Reply-To: <20160323094341.GA1300@magellan.home> References: <20160323094341.GA1300@magellan.home> Message-ID: <56F2D522.60505@univ-nantes.fr> Le 23/03/2016 10:43, Philippe Delavalade a écrit : > my $i=0; > while (defined($t1[$i]) ) { > push(@t2,$t1[$i]); > (exists $lst{$t2[$#t2]}) || die "$t2[$#t2] introuvable dans $ARGV[0]"; > } Salut, Idem que les autres, il manque i++;, mais aussi il faut $ARGV[1] dans la deuxième boucle, sinon tu lis deux fois le même fichier ... Ce qui m'amène à la question à 100 000 $, tes deux fichiers font bien la même taille o_O ? Bonne soirée, Stéphane -- Assistant Professor in BioInformatics, UFIP, UMR 6286 CNRS, Team Protein Design In Silico UFR Sciences et Techniques, 2, rue de la Houssinière, Bât. 25, 44322 Nantes cedex 03, France Tél : +33 251 125 636 / Fax : +33 251 125 632 http://www.ufip.univ-nantes.fr/ - http://www.steletch.org From philippe.delavalade at orange.fr Wed Mar 23 22:23:13 2016 From: philippe.delavalade at orange.fr (Philippe Delavalade) Date: Wed, 23 Mar 2016 22:23:13 +0100 Subject: [Perl] =?utf-8?b?RXJyZXVyIGF2ZWMgwqvCoGV4aXN0c8Kgwrsgw6AgbW9pbnMg?= =?utf-8?b?cXVlLi4u?= In-Reply-To: <56F2D522.60505@univ-nantes.fr> References: <20160323094341.GA1300@magellan.home> <56F2D522.60505@univ-nantes.fr> Message-ID: <20160323212313.GA4124@magellan.home> Le mercredi 23 mars à 18:40, Téletchéa Stéphane a écrit : > Le 23/03/2016 10:43, Philippe Delavalade a écrit : > >my $i=0; > >while (defined($t1[$i]) ) { > > push(@t2,$t1[$i]); > > (exists $lst{$t2[$#t2]}) || die "$t2[$#t2] introuvable dans $ARGV[0]"; > >} > > Salut, > > Idem que les autres, il manque i++;, mais aussi il faut $ARGV[1] dans la > deuxième boucle, > sinon tu lis deux fois le même fichier ... Oui, c'était exprès dans ce cas-là qui ne devait, ne pouvait pas poser de problèmes... Tout venait en fait du $/ qui, au départ, était dans un bloc et donc, je croyais qu'il n'influerait pas sur la suite. Dans l'exemple simplifié, ben, j'ai été léger mais ça a été révélateur.... Merci encore. -- Ph. Delavalade From sebastien.moretti at unil.ch Tue Mar 29 14:15:39 2016 From: sebastien.moretti at unil.ch (=?UTF-8?Q?S=c3=a9bastien_MORETTI?=) Date: Tue, 29 Mar 2016 14:15:39 +0200 Subject: [Perl] =?utf-8?b?T8O5ICQxIGVzdC1pbCBjYXB0dXLDqT8=?= Message-ID: <56FA71EB.9020701@unil.ch> Hello je suis en train de tester le code Perl d'un autre gars et j'ai quelques soucis avec $1 qui capture je ne sais trop quoi. foreach my $r_num ( keys %{$self->{mnet}{$mnet_num}{rc}} ){ my $r_id = $self->{rc}{$r_num}{id}; $r_id =~ s/_(B|LR|RL)$//; my $dir = $1; die "Invalid ID syntax: [$r_id]\n" unless $dir; $buf{$r_id}{$dir} = $r_num; } Auparavant la substitution $r_id =~ s/_(B|LR|RL)$//; était utile car $r_id se terminait par _(B|LR|RL). Désormais ce n'est plus le cas. Je m'attendais à ce que $dir soit undef mais $dir prend une valeur qui vient de je ne sais où. Même comportement si j'enlève la ligne de la substitution. Avez-vous une idée d'où $1 tire sa valeur? Est-ce possible que ce soit hors de la boucle? Merci Perl 5.18.2, Linux 2.6.32-504.el6.x86_64 -- Sébastien Moretti From s.wernerus at gmail.com Tue Mar 29 16:37:47 2016 From: s.wernerus at gmail.com (Wernerus Sebastien) Date: Tue, 29 Mar 2016 16:37:47 +0200 Subject: [Perl] =?utf-8?b?T8O5ICQxIGVzdC1pbCBjYXB0dXLDqT8=?= In-Reply-To: <56FA71EB.9020701@unil.ch> References: <56FA71EB.9020701@unil.ch> Message-ID: Cela peut effectivement venir d'une capture antérieure. Essaye plutôt ceci: foreach my $r_num ( keys %{$self->{mnet}{$mnet_num}{rc}} ){ my $r_id = $self->{rc}{$r_num}{id}; if ($r_id =~ s/_(B|LR|RL)$//) { my $dir = $1; $buf{$r_id}{$dir} = $r_num; } else { die "Invalid ID syntax: [$r_id]\n"; } } 2016-03-29 14:15 GMT+02:00 Sébastien MORETTI : > Hello > > je suis en train de tester le code Perl d'un autre gars et j'ai quelques > soucis avec $1 qui capture je ne sais trop quoi. > > foreach my $r_num ( keys %{$self->{mnet}{$mnet_num}{rc}} ){ > my $r_id = $self->{rc}{$r_num}{id}; > $r_id =~ s/_(B|LR|RL)$//; > my $dir = $1; > die "Invalid ID syntax: [$r_id]\n" unless $dir; > $buf{$r_id}{$dir} = $r_num; > } > > Auparavant la substitution $r_id =~ s/_(B|LR|RL)$//; était utile car $r_id > se terminait par _(B|LR|RL). > Désormais ce n'est plus le cas. > Je m'attendais à ce que $dir soit undef mais $dir prend une valeur qui > vient de je ne sais où. Même comportement si j'enlève la ligne de la > substitution. > > Avez-vous une idée d'où $1 tire sa valeur? > Est-ce possible que ce soit hors de la boucle? > > Merci > > Perl 5.18.2, Linux 2.6.32-504.el6.x86_64 > > -- > Sébastien Moretti > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl > -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From sebastien.moretti at unil.ch Wed Mar 30 09:44:07 2016 From: sebastien.moretti at unil.ch (Sebastien Moretti) Date: Wed, 30 Mar 2016 09:44:07 +0200 Subject: [Perl] =?utf-8?b?T8O5ICQxIGVzdC1pbCBjYXB0dXLDqT8=?= In-Reply-To: References: <56FA71EB.9020701@unil.ch> Message-ID: <56FB83C7.2030501@unil.ch> C'est effectivement mieux comme ça mais my $dir = $1; va disparaître avec $r_id =~ s/_(B|LR|RL)$// Le plus troublant est que je ne soupçonnais une telle étendue et portée des parenthèses capturantes! Voici une portion plus large du code, avec là où $1 semble être capturée. $1 est propagée dans la méthode "unify". Je ne pensais pas cela possible. my $id = ''; ... else{ ( $id ) = $txt =~ /ID\t(\w+)/; ... $mtnt->unify( 'in', 'out' ); ... sub unify { ... foreach my $r_num ( keys %{$self->{mnet}{$mnet_num}{rc}} ){ my $r_id = $self->{rc}{$r_num}{id}; $r_id =~ s/_(B|LR|RL)$//; my $dir = $1; die "Invalid ID syntax: [$r_id]\n" unless $dir; $buf{$r_id}{$dir} = $r_num; } > Cela peut effectivement venir d'une capture antérieure. > > Essaye plutôt ceci: > > foreach my $r_num ( keys %{$self->{mnet}{$mnet_num}{rc}} ){ > my $r_id = $self->{rc}{$r_num}{id}; > if ($r_id =~ s/_(B|LR|RL)$//) { > my $dir = $1; > $buf{$r_id}{$dir} = $r_num; > } else { > die "Invalid ID syntax: [$r_id]\n"; > } > } > > > 2016-03-29 14:15 GMT+02:00 Sébastien MORETTI >: > > Hello > > je suis en train de tester le code Perl d'un autre gars et j'ai > quelques soucis avec $1 qui capture je ne sais trop quoi. > > foreach my $r_num ( keys %{$self->{mnet}{$mnet_num}{rc}} ){ > my $r_id = $self->{rc}{$r_num}{id}; > $r_id =~ s/_(B|LR|RL)$//; > my $dir = $1; > die "Invalid ID syntax: [$r_id]\n" unless $dir; > $buf{$r_id}{$dir} = $r_num; > } > > Auparavant la substitution $r_id =~ s/_(B|LR|RL)$//; était utile car > $r_id se terminait par _(B|LR|RL). > Désormais ce n'est plus le cas. > Je m'attendais à ce que $dir soit undef mais $dir prend une valeur > qui vient de je ne sais où. Même comportement si j'enlève la ligne > de la substitution. > > Avez-vous une idée d'où $1 tire sa valeur? > Est-ce possible que ce soit hors de la boucle? > > Merci > > Perl 5.18.2, Linux 2.6.32-504.el6.x86_64 -- Sébastien Moretti From elbeho at boivin.eu Wed Mar 30 22:37:55 2016 From: elbeho at boivin.eu (L Boivin) Date: Wed, 30 Mar 2016 22:37:55 +0200 Subject: [Perl] =?utf-8?q?Fwd=3A_Cours_de_Damian_Conway_=C3=A0_Lausanne?= In-Reply-To: <56FBF8E7.6060209@mathgen.ch> References: <56FBF8E7.6060209@mathgen.ch> Message-ID: <56FC3923.9040003@boivin.eu> Pour info -------- Forwarded Message -------- Subject: Cours de Damian Conway à Lausanne Date: Wed, 30 Mar 2016 18:03:51 +0200 From: Frédéric Schütz To: contact at mongueurs.net Bonjour les mongueurs de Perl, j'organise une série de cours donnés par Damian Conway à fin avril, à Lausanne (Suisse). Il y aura 2 jours de cours sur "comment donner une présentation", mais surtout (le plus intéressant pour les Perl Mongers), une journée sur les modèles de programmation de Perl6. Celle-ci sera quasiment offerte (prix: 20 CHF -- environ 18? -- pour la documentation), le but étant que les participants puissent facilement découvrir Perl6. Le dernier cours sera un cours sur les regular expressions -- intéressant pour les programmeurs Perl, mais qui traitera du sujet dans tous les langages et pas spécialement en Perl. La liste des cours est donnée ci-dessous; ils sont aussi résumés sur la page web http://www.sib.swiss/training/upcoming-training-events/training/2016-03-courses-conway Il y aura aussi un séminaire (gratuit) donné par Damian le mardi soir, sur un sujet lié à Perl (voir la dernière entrée dans la liste). S'il était possible de mentionner leur existence auprès des Mongers Perl (et dans votre agenda ?), ce serait idéal -- en particulier pour le cours Perl6. Je vais contacter séparément la liste des mongers de Genève. Merci d'avance pour votre aide ! Frédéric --- Monday 25 April 2016: "Presentation Aikido (or: Advanced Technical Presentation Techniques 1, core techniques)": basic course on presentation skills http://www.isb-sib.ch/training/upcoming-training-events/training/201604-presentation-core Tuesday 26 April 2016: "Presentation Ninjutsu (or: Advanced Technical Presentation Techniques 2: Design and delivery skills)": advanced course on presentation skills http://www.isb-sib.ch/training/upcoming-training-events/training/201604-presentation-design Wednesday 27 April 2016: "Perl 6: Transparadigm Programming 101": introduction of Perl6 through the different programming models it uses. Cost: 20 CHF (to cover for the printed documentation) http://www.isb-sib.ch/training/upcoming-training-events/training/201604-perl6 Thursday 28 April 2016: "Understanding Regular Expressions": what are regular expression and how do they work, in a language-agnostic way (the course covers all major dialects of regex syntax) http://www.isb-sib.ch/training/upcoming-training-events/training/201604-regularexpressions Free seminar: Tuesday 26 April 2016: "Don't change languages. Change your language!" http://damian.conway.org/Seminars/ChangeLanguage.html From s.wernerus at gmail.com Wed Mar 30 23:39:34 2016 From: s.wernerus at gmail.com (Wernerus Sebastien) Date: Wed, 30 Mar 2016 23:39:34 +0200 Subject: [Perl] =?utf-8?b?T8O5ICQxIGVzdC1pbCBjYXB0dXLDqT8=?= In-Reply-To: <56FB83C7.2030501@unil.ch> References: <56FA71EB.9020701@unil.ch> <56FB83C7.2030501@unil.ch> Message-ID: C'est pour cette raison qu'il faut vérifier que la regex a bien été reconnue avant d'utiliser $1. Exécute le code qui suit pour illustration. Le premier bloc est incorrect car $1 conserve sa valeur tant qu'une nouvelle correspondance n'est pas réussie (auquel cas $1 est mis à jour). # BAD foreach my $r_id ( qw(qsdqsdqsd_B qsdqsdqsd_A qsdqsdqsd_LR) ) { $r_id =~ /_(B|LR|RL)$/; print "FOUND: $1\n"; } # GOOD foreach my $r_id ( qw(qsdqsdqsd_B qsdqsdqsd_A qsdqsdqsd_LR) ) { if ( $r_id =~ /_(B|LR|RL)$/ ) { print "FOUND: $1\n"; } else { print "FAILED!\n" } } -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From sebastien.moretti at unil.ch Thu Mar 31 09:12:07 2016 From: sebastien.moretti at unil.ch (Sebastien Moretti) Date: Thu, 31 Mar 2016 09:12:07 +0200 Subject: [Perl] =?utf-8?b?T8O5ICQxIGVzdC1pbCBjYXB0dXLDqT8=?= In-Reply-To: References: <56FA71EB.9020701@unil.ch> <56FB83C7.2030501@unil.ch> Message-ID: <56FCCDC7.70206@unil.ch> > C'est pour cette raison qu'il faut vérifier que la regex a bien été > reconnue avant d'utiliser $1. Tu prêches un converti! > Exécute le code qui suit pour illustration. Le premier bloc est > incorrect car $1 conserve sa valeur tant qu'une nouvelle correspondance > n'est pas réussie (auquel cas $1 est mis à jour). Je pensais quand même qu'il y avait une limite, un scope, à ça. Mais non semble-t-il. Potentiellement très dangereux. > # BAD > foreach my $r_id ( qw(qsdqsdqsd_B qsdqsdqsd_A qsdqsdqsd_LR) ) { > $r_id =~ /_(B|LR|RL)$/; > print "FOUND: $1\n"; > } > > # GOOD > foreach my $r_id ( qw(qsdqsdqsd_B qsdqsdqsd_A qsdqsdqsd_LR) ) { > if ( $r_id =~ /_(B|LR|RL)$/ ) { > print "FOUND: $1\n"; > } else { > print "FAILED!\n" > } > } -- Sébastien Moretti