From Patrick.TONNERRE at enim.eu Fri Jul 8 10:31:15 2016 From: Patrick.TONNERRE at enim.eu (TONNERRE Patrick - ENIM/SDSI/DIP) Date: Fri, 8 Jul 2016 08:31:15 +0000 Subject: [Perl] =?iso-8859-1?q?Parcours_r=E9cursif_d=27un_partage_smb?= Message-ID: Bonjour, Je dois parcourir récursivement le contenu d'un partage SMB d'une machine Windows distante depuis une machine de servitude Linux. J'ai fait des essais, infructueux, avec les modules Filesys::Smclient et Filesys::SmclientParser : le parcours s'arrête au répertoire courant et ne descend pas dans les sous-répertoires. Merci pour votre aide -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From laurent.rosenfeld at googlemail.com Fri Jul 8 23:37:25 2016 From: laurent.rosenfeld at googlemail.com (Laurent Rosenfeld) Date: Fri, 8 Jul 2016 23:37:25 +0200 Subject: [Perl] =?utf-8?q?Parcours_r=C3=A9cursif_d=27un_partage_smb?= In-Reply-To: References: Message-ID: Bonjour, pour information, il y a une discussion en cours, avec quelques précisions supplémentaires, sur cette question sur le forum Developpez.com: http://www.developpez.net/forums/d1593823/autres-langages/perl/langage/recherche-module-parcours-recursif-partage-windows/ Laurent. Le 8 juillet 2016 à 10:31, TONNERRE Patrick - ENIM/SDSI/DIP < Patrick.TONNERRE at enim.eu> a écrit : > Bonjour, > > > > Je dois parcourir récursivement le contenu d?un partage SMB d?une machine > Windows distante depuis une machine de servitude Linux. > > J?ai fait des essais, infructueux, avec les modules Filesys::Smclient et > Filesys::SmclientParser : le parcours s?arrête au répertoire courant et ne > descend pas dans les sous-répertoires. > > > > Merci pour votre aide > > > > _______________________________________________ > 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 asseline at telecom-paristech.fr Wed Jul 13 18:25:20 2016 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Wed, 13 Jul 2016 18:25:20 +0200 Subject: [Perl] =?utf-8?q?Download_de_gros_volume_de_donn=C3=A9es?= Message-ID: <20160713162519.GA15508@telecom-paristech.fr> Bonjour, Je cherche à optimiser la sortie de gros fichiers sur STDOUT dans un contexte Internet et j'aurais souhaité m'assurer de la bonne procédure et connaître les paramètres appropriés. Tout d'abord, pour sortir des données, je n'ai remarqué que la fonction print et je fais donc des read sur les fichiers à transférer, qui remplit un buffer, puis des print de ce buffer. Cette méthode marche apparemment bien mais est-ce la plus efficace ? Si la procédure ci-dessus est bonne, - quel est la bonne taille du buffer ? - a-t-on intérêt à laisser la variable Perl $| à 0 pour laisser Perl optimiser l'affaire ? À propos de la taille du buffer, c'est probablement une histoire de compromis. Merci de vos éclaircissements. Dominique -- From laurent.rosenfeld at googlemail.com Wed Jul 13 19:24:32 2016 From: laurent.rosenfeld at googlemail.com (Laurent Rosenfeld) Date: Wed, 13 Jul 2016 19:24:32 +0200 Subject: [Perl] =?utf-8?q?Download_de_gros_volume_de_donn=C3=A9es?= In-Reply-To: <20160713162519.GA15508@telecom-paristech.fr> References: <20160713162519.GA15508@telecom-paristech.fr> Message-ID: Bonsoir, tu lis tes fichiers ligne par ligne, par blocs d'octets, ou autrement? Dans le cas ligne à ligne, il est probable qu'il soit préférable de laisser Perl et/ou le système gérer la bufférisation. Le 13 juillet 2016 à 18:25, Dominique Asselineau < asseline at telecom-paristech.fr> a écrit : > Bonjour, > > Je cherche à optimiser la sortie de gros fichiers sur STDOUT dans un > contexte Internet et j'aurais souhaité m'assurer de la bonne > procédure et connaître les paramètres appropriés. > > Tout d'abord, pour sortir des données, je n'ai remarqué que la fonction > print et je fais donc des read sur les fichiers à transférer, qui remplit > un buffer, puis des print de ce buffer. > Cette méthode marche apparemment bien mais est-ce la plus efficace ? > > Si la procédure ci-dessus est bonne, > - quel est la bonne taille du buffer ? > - a-t-on intérêt à laisser la variable Perl $| à 0 pour laisser Perl > optimiser l'affaire ? > > À propos de la taille du buffer, c'est probablement une histoire de > compromis. > Merci de vos éclaircissements. > > Dominique > > -- > _______________________________________________ > 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 asseline at telecom-paristech.fr Wed Jul 13 19:47:54 2016 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Wed, 13 Jul 2016 19:47:54 +0200 Subject: [Perl] =?utf-8?q?Download_de_gros_volume_de_donn=C3=A9es?= In-Reply-To: References: <20160713162519.GA15508@telecom-paristech.fr> Message-ID: <20160713174754.GB17600@telecom-paristech.fr> Laurent Rosenfeld wrote on Wed, Jul 13, 2016 at 07:24:32PM +0200 > Bonsoir, > > tu lis tes fichiers ligne par ligne, par blocs d'octets, ou autrement? Je lis les fichiers par bloc, la plupart du temps ce sont des PDF. Et justement ce serait la taille des blocs que je cherche à régler correctement. Et puis l'influence de la variable $| devrait être significative ? Dominique > > Dans le cas ligne à ligne, il est probable qu'il soit préférable de laisser > Perl et/ou le système gérer la bufférisation. > > > > Le 13 juillet 2016 à 18:25, Dominique Asselineau < > asseline at telecom-paristech.fr> a écrit : > > > Bonjour, > > > > Je cherche à optimiser la sortie de gros fichiers sur STDOUT dans un > > contexte Internet et j'aurais souhaité m'assurer de la bonne > > procédure et connaître les paramètres appropriés. > > > > Tout d'abord, pour sortir des données, je n'ai remarqué que la fonction > > print et je fais donc des read sur les fichiers à transférer, qui remplit > > un buffer, puis des print de ce buffer. > > Cette méthode marche apparemment bien mais est-ce la plus efficace ? > > > > Si la procédure ci-dessus est bonne, > > - quel est la bonne taille du buffer ? > > - a-t-on intérêt à laisser la variable Perl $| à 0 pour laisser Perl > > optimiser l'affaire ? > > > > À propos de la taille du buffer, c'est probablement une histoire de > > compromis. > > Merci de vos éclaircissements. > > > > Dominique > > > > -- > > _______________________________________________ > > 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 laurent.rosenfeld at googlemail.com Wed Jul 13 20:01:15 2016 From: laurent.rosenfeld at googlemail.com (Laurent Rosenfeld) Date: Wed, 13 Jul 2016 20:01:15 +0200 Subject: [Perl] =?utf-8?q?Download_de_gros_volume_de_donn=C3=A9es?= In-Reply-To: <20160713174754.GB17600@telecom-paristech.fr> References: <20160713162519.GA15508@telecom-paristech.fr> <20160713174754.GB17600@telecom-paristech.fr> Message-ID: Si tu modifies $| (et lui donne une valeur vraie), tu forces un auto-flush après chaque écriture, autrement dit tu empêches la bufferisation des sorties et les optimisations que Perl peut faire avec. A priori, je dirais qu'il vaut mieux ne pas y toucher et la laisser à 0. Le 13 juillet 2016 à 19:47, Dominique Asselineau < asseline at telecom-paristech.fr> a écrit : > Laurent Rosenfeld wrote on Wed, Jul 13, 2016 at 07:24:32PM +0200 > > Bonsoir, > > > > tu lis tes fichiers ligne par ligne, par blocs d'octets, ou autrement? > > Je lis les fichiers par bloc, la plupart du temps ce sont des PDF. Et > justement ce serait la taille des blocs que je cherche à régler > correctement. Et puis l'influence de la variable $| devrait être > significative ? > > Dominique > > > > > Dans le cas ligne à ligne, il est probable qu'il soit préférable de > laisser > > Perl et/ou le système gérer la bufférisation. > > > > > > > > Le 13 juillet 2016 à 18:25, Dominique Asselineau < > > asseline at telecom-paristech.fr> a écrit : > > > > > Bonjour, > > > > > > Je cherche à optimiser la sortie de gros fichiers sur STDOUT dans un > > > contexte Internet et j'aurais souhaité m'assurer de la bonne > > > procédure et connaître les paramètres appropriés. > > > > > > Tout d'abord, pour sortir des données, je n'ai remarqué que la fonction > > > print et je fais donc des read sur les fichiers à transférer, qui > remplit > > > un buffer, puis des print de ce buffer. > > > Cette méthode marche apparemment bien mais est-ce la plus efficace ? > > > > > > Si la procédure ci-dessus est bonne, > > > - quel est la bonne taille du buffer ? > > > - a-t-on intérêt à laisser la variable Perl $| à 0 pour laisser Perl > > > optimiser l'affaire ? > > > > > > À propos de la taille du buffer, c'est probablement une histoire de > > > compromis. > > > Merci de vos éclaircissements. > > > > > > Dominique > > > > > > -- > > > _______________________________________________ > > > 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 > -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From asseline at telecom-paristech.fr Wed Jul 13 20:13:42 2016 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Wed, 13 Jul 2016 20:13:42 +0200 Subject: [Perl] =?utf-8?q?Download_de_gros_volume_de_donn=C3=A9es?= In-Reply-To: References: <20160713162519.GA15508@telecom-paristech.fr> <20160713174754.GB17600@telecom-paristech.fr> Message-ID: <20160713181342.GA18117@telecom-paristech.fr> Laurent Rosenfeld wrote on Wed, Jul 13, 2016 at 08:01:15PM +0200 > Si tu modifies $| (et lui donne une valeur vraie), tu forces un auto-flush > après chaque écriture, autrement dit tu empêches la bufferisation des > sorties et les optimisations que Perl peut faire avec. A priori, je dirais > qu'il vaut mieux ne pas y toucher et la laisser à 0. Merci. Je me doutais de ce comportement. Merci de me l'avoir confirmé. Et je suppose que la taille du buffer n'a pas trop d'importance dans le cas où $|=0. On peut même la choisir assez grande,, de l'ordre de plusieurs dizaines de KO pour éviter les opérations de lectures nombreuses, sachant qu'en aval, Perl se débrouillera pour sortir les données efficacement. Si toutefois il y a une idée plus précise sur la taille du buffer, ça pourrait améliorer la situation. Dominique > > > > Le 13 juillet 2016 à 19:47, Dominique Asselineau < > asseline at telecom-paristech.fr> a écrit : > > > Laurent Rosenfeld wrote on Wed, Jul 13, 2016 at 07:24:32PM +0200 > > > Bonsoir, > > > > > > tu lis tes fichiers ligne par ligne, par blocs d'octets, ou autrement? > > > > Je lis les fichiers par bloc, la plupart du temps ce sont des PDF. Et > > justement ce serait la taille des blocs que je cherche à régler > > correctement. Et puis l'influence de la variable $| devrait être > > significative ? > > > > Dominique > > > > > > > > Dans le cas ligne à ligne, il est probable qu'il soit préférable de > > laisser > > > Perl et/ou le système gérer la bufférisation. > > > > > > > > > > > > Le 13 juillet 2016 à 18:25, Dominique Asselineau < > > > asseline at telecom-paristech.fr> a écrit : > > > > > > > Bonjour, > > > > > > > > Je cherche à optimiser la sortie de gros fichiers sur STDOUT dans un > > > > contexte Internet et j'aurais souhaité m'assurer de la bonne > > > > procédure et connaître les paramètres appropriés. > > > > > > > > Tout d'abord, pour sortir des données, je n'ai remarqué que la fonction > > > > print et je fais donc des read sur les fichiers à transférer, qui > > remplit > > > > un buffer, puis des print de ce buffer. > > > > Cette méthode marche apparemment bien mais est-ce la plus efficace ? > > > > > > > > Si la procédure ci-dessus est bonne, > > > > - quel est la bonne taille du buffer ? > > > > - a-t-on intérêt à laisser la variable Perl $| à 0 pour laisser Perl > > > > optimiser l'affaire ? > > > > > > > > À propos de la taille du buffer, c'est probablement une histoire de > > > > compromis. > > > > Merci de vos éclaircissements. > > > > > > > > Dominique > > > > > > > > -- > > > > _______________________________________________ > > > > 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 > > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl -- From biz at joueb.com Wed Jul 13 20:21:02 2016 From: biz at joueb.com (=?UTF-8?Q?St=c3=a9phane_Gigandet?=) Date: Wed, 13 Jul 2016 20:21:02 +0200 Subject: [Perl] =?utf-8?q?Download_de_gros_volume_de_donn=C3=A9es?= In-Reply-To: <20160713174754.GB17600@telecom-paristech.fr> References: <20160713162519.GA15508@telecom-paristech.fr> <20160713174754.GB17600@telecom-paristech.fr> Message-ID: <5786868E.2090007@joueb.com> Bonjour Dominique, "Je cherche à optimiser la sortie de gros fichiers sur STDOUT dans un contexte Internet" Pourrais-tu préciser le contexte plus exactement ? Parce que si tu veux transférer des gros PDFs via un serveur Web par exemple, le plus simple serait de laisser ton serveur Web (Apache ou autre) le faire. Pas besoin de Perl pour ça, et Apache + le client HTTP pourront négocier entre eux bien plus efficacement. (reprise des requêtes de range, compression etc.) Si ce sont des fichiers privés, on peut imaginer des solutions pour qu'Apache serve les fichiers directement quand même, par exemple ton script Perl peut créer des liens symboliques temporaires vers les fichiers, et rediriger chaque client vers une URL unique. Bonne soirée, Stéphane --- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus From asseline at telecom-paristech.fr Wed Jul 13 20:41:06 2016 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Wed, 13 Jul 2016 20:41:06 +0200 Subject: [Perl] =?utf-8?q?Download_de_gros_volume_de_donn=C3=A9es?= In-Reply-To: <5786868E.2090007@joueb.com> References: <20160713162519.GA15508@telecom-paristech.fr> <20160713174754.GB17600@telecom-paristech.fr> <5786868E.2090007@joueb.com> Message-ID: <20160713184106.GA18396@telecom-paristech.fr> Stéphane Gigandet wrote on Wed, Jul 13, 2016 at 08:21:02PM +0200 > Bonjour Dominique, > > "Je cherche à optimiser la sortie de gros fichiers sur STDOUT dans un > contexte Internet" > > Pourrais-tu préciser le contexte plus exactement ? Parce que si tu veux > transférer des gros PDFs via un serveur Web par exemple, le plus simple > serait de laisser ton serveur Web (Apache ou autre) le faire. Pas besoin de > Perl pour ça, et Apache + le client HTTP pourront négocier entre eux bien > plus efficacement. (reprise des requêtes de range, compression etc.) Oui, mais les PDF ne sont pas dans un espace public et puis les noms d'archivages ne sont pas ceux qu'on voit à la récupération, il y a un versionnage. Il peut également y avoir des contrôles d'accès qui ne peuvent être gérer par un .htaccess. et puis il n'y a pas que des PDFs, des archives (.zip) créées à la volée peuvent être traitées. > > Si ce sont des fichiers privés, on peut imaginer des solutions pour > qu'Apache serve les fichiers directement quand même, par exemple ton script > Perl peut créer des liens symboliques temporaires vers les fichiers, et > rediriger chaque client vers une URL unique. Il faut connaître le moment où le lien symbolique doit être supprimé, savoir quand le fichier a été récupéré puisque le client peut prendre le temps qu'il veut pour cliquer sur le lien à télécharger. J'avais réfléchi à ce genre de chose mais c'était tout le temps compliqué. Merci Dominique > > Bonne soirée, > > Stéphane > > --- > L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. > https://www.avast.com/antivirus > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl -- From asseline at telecom-paristech.fr Wed Jul 20 17:02:33 2016 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Wed, 20 Jul 2016 17:02:33 +0200 Subject: [Perl] =?utf-8?q?D=C3=A9finir_une_fonction_qui_porte_le_m=C3=AAme?= =?utf-8?q?_nom_dans_un_module=2C_que_celle_dans_un_autre_module?= Message-ID: <20160720150232.GA21279@telecom-paristech.fr> Bonjour, En souhaitant utiliser le module Encode qui définit la fonction encode, je me heurte au fait que mon propre module définit également une fonction du même nom. Il ne s'agit donc pas de redéfinir la fonction Encode::encode mais de créer une autre occurrence de cette fonction qui n'a pas tout à fait le même fonctionnement. Vous pourriez me proposer de la renommer autrement mais comme ce module est abondamment utilisé, je ne me vois pas trop retoucher à tous les modules et programmes qui y font appel. En pratique ça fonctionne tout de même mais j'ai un warning dans les logs qui laisse penser qu'un bug à retardement pourrait bien survenir à l'occasion d'une mise à jour de Perl. Et puis j'apprécie que les choses soient le plus propre possible. Voici un ECM pour caractériser le problème. Comme on le voit, la fonction encode du module Encode n'est pas importée mais explicitement qualifiée lors de son appel. La définition de la fonction de mon module ne devrait donc pas entrer en conflit avec celle du module Encode. J'ai parcouru la doc perlsub, j'ai bien remarqué "use subs" mais qui ne répond pas au problème. fichier Encoder.pm : package Encoder; use Modern::Perl; use feature qw/unicode_strings/; use base('Exporter'); our @EXPORT_OK = qw/encode/; use Encode; sub encode { my( $encoding, $string ) = @_; return Encode::encode( $encoding, $string ); } 1; puis le programme : #!/usr/bin/perl use Modern::Perl; use utf8; use feature qw/unicode_strings/; use Encoder qw/encode/; main: { my $string = "l'?uf et la poule"; print( encode( 'UTF-8', $string ).$/ ); exit 0; } -- From dkrotkine at gmail.com Thu Jul 21 19:15:29 2016 From: dkrotkine at gmail.com (Damien Krotkine) Date: Thu, 21 Jul 2016 19:15:29 +0200 Subject: [Perl] =?utf-8?q?D=C3=A9finir_une_fonction_qui_porte_le_m=C3=AAme?= =?utf-8?q?_nom_dans_un_module=2C_que_celle_dans_un_autre_module?= In-Reply-To: <20160720150232.GA21279@telecom-paristech.fr> References: <20160720150232.GA21279@telecom-paristech.fr> Message-ID: <57910331.1080301@gmail.com> Dominique Asselineau wrote: > Bonjour, > > En souhaitant utiliser le module Encode qui définit la fonction > encode, je me heurte au fait que mon propre module définit également > une fonction du même nom. Il ne s'agit donc pas de redéfinir la > fonction Encode::encode mais de créer une autre occurrence de cette > fonction qui n'a pas tout à fait le même fonctionnement. Vous > pourriez me proposer de la renommer autrement mais comme ce module est > abondamment utilisé, je ne me vois pas trop retoucher à tous les > modules et programmes qui y font appel. > > En pratique ça fonctionne tout de même mais j'ai un warning dans les > logs qui laisse penser qu'un bug à retardement pourrait bien survenir > à l'occasion d'une mise à jour de Perl. Et puis j'apprécie que les > choses soient le plus propre possible. Tu as un warning parce que quand tu fais "use Encode" dans ton module Encoder, ça importe "encode" dans le namespace de ton module, qui se prend donc un warning quand il redefini sub encode. Pour régler ça, il suffit de faire: use Encode (); Qui charge le module Encode, mais n'importe rien. > > Voici un ECM pour caractériser le problème. Comme on le voit, la > fonction encode du module Encode n'est pas importée mais explicitement > qualifiée lors de son appel. La définition de la fonction de mon > module ne devrait donc pas entrer en conflit avec celle du module > Encode. J'ai parcouru la doc perlsub, j'ai bien remarqué "use subs" > mais qui ne répond pas au problème. > > > > fichier Encoder.pm : > package Encoder; > > use Modern::Perl; > use feature qw/unicode_strings/; > > use base('Exporter'); > > our @EXPORT_OK = qw/encode/; > > use Encode; Du coup ici ^ use Encode (); > > sub encode { > my( $encoding, $string ) = @_; > > return Encode::encode( $encoding, $string ); > } > > 1; > > > > puis le programme : > > #!/usr/bin/perl > > use Modern::Perl; > use utf8; > use feature qw/unicode_strings/; > > use Encoder qw/encode/; > > main: > { > my $string = "l'?uf et la poule"; > > print( encode( 'UTF-8', $string ).$/ ); > > exit 0; > } > > > From asseline at telecom-paristech.fr Fri Jul 22 13:34:50 2016 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Fri, 22 Jul 2016 13:34:50 +0200 Subject: [Perl] =?utf-8?q?D=C3=A9finir_une_fonction_qui_porte_le_m=C3=AAme?= =?utf-8?q?_nom_dans_un_module=2C_que_celle_dans_un_autre_module?= In-Reply-To: <57910331.1080301@gmail.com> References: <20160720150232.GA21279@telecom-paristech.fr> <57910331.1080301@gmail.com> Message-ID: <20160722113450.GB20511@telecom-paristech.fr> Damien Krotkine wrote on Thu, Jul 21, 2016 at 07:15:29PM +0200 > > > Dominique Asselineau wrote: > >Bonjour, > > > >En souhaitant utiliser le module Encode qui définit la fonction > >encode, je me heurte au fait que mon propre module définit également > >une fonction du même nom. Il ne s'agit donc pas de redéfinir la > >fonction Encode::encode mais de créer une autre occurrence de cette > >fonction qui n'a pas tout à fait le même fonctionnement. Vous > >pourriez me proposer de la renommer autrement mais comme ce module est > >abondamment utilisé, je ne me vois pas trop retoucher à tous les > >modules et programmes qui y font appel. > > > >En pratique ça fonctionne tout de même mais j'ai un warning dans les > >logs qui laisse penser qu'un bug à retardement pourrait bien survenir > >à l'occasion d'une mise à jour de Perl. Et puis j'apprécie que les > >choses soient le plus propre possible. > > Tu as un warning parce que quand tu fais "use Encode" dans ton module > Encoder, ça importe "encode" dans le namespace de ton module, qui se prend > donc un warning quand il redefini sub encode. Ok mais je croyais que pour importer une fonction dans le namespace, il fallait le spécifier explicitement en paramètre, ici use Encode('encode'); J'ai l'impression que cet import à la demande ne marche que si l'export correspondant est fait via la variable @EXPORT_OK ? À moins que ce soit la présence ou non de liste d'import qui fasse la différence, d'où la liste vide pour explicitement ne rien importer ? > > Pour régler ça, il suffit de faire: > > use Encode (); > > Qui charge le module Encode, mais n'importe rien. Merci, ça marche. > > > > >Voici un ECM pour caractériser le problème. Comme on le voit, la > >fonction encode du module Encode n'est pas importée mais explicitement > >qualifiée lors de son appel. La définition de la fonction de mon > >module ne devrait donc pas entrer en conflit avec celle du module > >Encode. J'ai parcouru la doc perlsub, j'ai bien remarqué "use subs" > >mais qui ne répond pas au problème. > > > > > > > >fichier Encoder.pm : > >package Encoder; > > > >use Modern::Perl; > >use feature qw/unicode_strings/; > > > >use base('Exporter'); > > > >our @EXPORT_OK = qw/encode/; > > > >use Encode; > > Du coup ici ^ use Encode (); > > > > >sub encode { > > my( $encoding, $string ) = @_; > > > > return Encode::encode( $encoding, $string ); > >} > > > >1; > > > > > > > >puis le programme : > > > >#!/usr/bin/perl > > > >use Modern::Perl; > >use utf8; > >use feature qw/unicode_strings/; > > > >use Encoder qw/encode/; > > > >main: > >{ > > my $string = "l'?uf et la poule"; > > > > print( encode( 'UTF-8', $string ).$/ ); > > > > exit 0; > >} > > > > > > > > _______________________________________________ > Perl mailing list > Perl at mongueurs.net > http://listes.mongueurs.net/mailman/listinfo/perl -- From laurent.rosenfeld at googlemail.com Fri Jul 22 13:49:51 2016 From: laurent.rosenfeld at googlemail.com (Laurent Rosenfeld) Date: Fri, 22 Jul 2016 13:49:51 +0200 Subject: [Perl] =?utf-8?q?D=C3=A9finir_une_fonction_qui_porte_le_m=C3=AAme?= =?utf-8?q?_nom_dans_un_module=2C_que_celle_dans_un_autre_module?= In-Reply-To: <20160722113450.GB20511@telecom-paristech.fr> References: <20160720150232.GA21279@telecom-paristech.fr> <57910331.1080301@gmail.com> <20160722113450.GB20511@telecom-paristech.fr> Message-ID: Si tu passes une liste vide à use, alors aucune fonction n'est importée. De coup tu peux y accéder uniquement avec le nom complet Encode::encode. Bonne après-midi, Laurent. Le 22 juillet 2016 à 13:34, Dominique Asselineau < asseline at telecom-paristech.fr> a écrit : > Damien Krotkine wrote on Thu, Jul 21, 2016 at 07:15:29PM +0200 > > > > > > Dominique Asselineau wrote: > > >Bonjour, > > > > > >En souhaitant utiliser le module Encode qui définit la fonction > > >encode, je me heurte au fait que mon propre module définit également > > >une fonction du même nom. Il ne s'agit donc pas de redéfinir la > > >fonction Encode::encode mais de créer une autre occurrence de cette > > >fonction qui n'a pas tout à fait le même fonctionnement. Vous > > >pourriez me proposer de la renommer autrement mais comme ce module est > > >abondamment utilisé, je ne me vois pas trop retoucher à tous les > > >modules et programmes qui y font appel. > > > > > >En pratique ça fonctionne tout de même mais j'ai un warning dans les > > >logs qui laisse penser qu'un bug à retardement pourrait bien survenir > > >à l'occasion d'une mise à jour de Perl. Et puis j'apprécie que les > > >choses soient le plus propre possible. > > > > Tu as un warning parce que quand tu fais "use Encode" dans ton module > > Encoder, ça importe "encode" dans le namespace de ton module, qui se > prend > > donc un warning quand il redefini sub encode. > > Ok mais je croyais que pour importer une fonction dans le namespace, > il fallait le spécifier explicitement en paramètre, ici > > use Encode('encode'); > > J'ai l'impression que cet import à la demande ne marche que si > l'export correspondant est fait via la variable @EXPORT_OK ? À moins > que ce soit la présence ou non de liste d'import qui fasse la > différence, d'où la liste vide pour explicitement ne rien importer ? > > > > > Pour régler ça, il suffit de faire: > > > > use Encode (); > > > > Qui charge le module Encode, mais n'importe rien. > > Merci, ça marche. > > > > > > > > >Voici un ECM pour caractériser le problème. Comme on le voit, la > > >fonction encode du module Encode n'est pas importée mais explicitement > > >qualifiée lors de son appel. La définition de la fonction de mon > > >module ne devrait donc pas entrer en conflit avec celle du module > > >Encode. J'ai parcouru la doc perlsub, j'ai bien remarqué "use subs" > > >mais qui ne répond pas au problème. > > > > > > > > > > > >fichier Encoder.pm : > > >package Encoder; > > > > > >use Modern::Perl; > > >use feature qw/unicode_strings/; > > > > > >use base('Exporter'); > > > > > >our @EXPORT_OK = qw/encode/; > > > > > >use Encode; > > > > Du coup ici ^ use Encode (); > > > > > > > >sub encode { > > > my( $encoding, $string ) = @_; > > > > > > return Encode::encode( $encoding, $string ); > > >} > > > > > >1; > > > > > > > > > > > >puis le programme : > > > > > >#!/usr/bin/perl > > > > > >use Modern::Perl; > > >use utf8; > > >use feature qw/unicode_strings/; > > > > > >use Encoder qw/encode/; > > > > > >main: > > >{ > > > my $string = "l'?uf et la poule"; > > > > > > print( encode( 'UTF-8', $string ).$/ ); > > > > > > exit 0; > > >} > > > > > > > > > > > > > _______________________________________________ > > 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 > -------------- section suivante -------------- Une pièce jointe HTML a été nettoyée... URL: From asseline at telecom-paristech.fr Fri Jul 22 19:25:39 2016 From: asseline at telecom-paristech.fr (Dominique Asselineau) Date: Fri, 22 Jul 2016 19:25:39 +0200 Subject: [Perl] =?utf-8?q?D=C3=A9finir_une_fonction_qui_porte_le_m=C3=AAme?= =?utf-8?q?_nom_dans_un_module=2C_que_celle_dans_un_autre_module?= In-Reply-To: References: <20160720150232.GA21279@telecom-paristech.fr> <57910331.1080301@gmail.com> <20160722113450.GB20511@telecom-paristech.fr> Message-ID: <20160722172539.GB21862@telecom-paristech.fr> Laurent Rosenfeld wrote on Fri, Jul 22, 2016 at 01:49:51PM +0200 > Si tu passes une liste vide à use, alors aucune fonction n'est importée. De > coup tu peux y accéder uniquement avec le nom complet Encode::encode. C'est clairement ce que je voulais faire pour justement ne pas risquer de conflit. Comme je n'aime pas les choses qui se font implicitement, c'est une source de bugs à retardement, je ne manquerai pas d'utiliser systématiquement une liste vide pour précisément ne rien importer (quand il n'y a rien à importer naturellement). Merci. Dominique > > Bonne après-midi, > Laurent. > > > Le 22 juillet 2016 à 13:34, Dominique Asselineau < > asseline at telecom-paristech.fr> a écrit : > > > Damien Krotkine wrote on Thu, Jul 21, 2016 at 07:15:29PM +0200 > > > > > > > > > Dominique Asselineau wrote: > > > >Bonjour, > > > > > > > >En souhaitant utiliser le module Encode qui définit la fonction > > > >encode, je me heurte au fait que mon propre module définit également > > > >une fonction du même nom. Il ne s'agit donc pas de redéfinir la > > > >fonction Encode::encode mais de créer une autre occurrence de cette > > > >fonction qui n'a pas tout à fait le même fonctionnement. Vous > > > >pourriez me proposer de la renommer autrement mais comme ce module est > > > >abondamment utilisé, je ne me vois pas trop retoucher à tous les > > > >modules et programmes qui y font appel. > > > > > > > >En pratique ça fonctionne tout de même mais j'ai un warning dans les > > > >logs qui laisse penser qu'un bug à retardement pourrait bien survenir > > > >à l'occasion d'une mise à jour de Perl. Et puis j'apprécie que les > > > >choses soient le plus propre possible. > > > > > > Tu as un warning parce que quand tu fais "use Encode" dans ton module > > > Encoder, ça importe "encode" dans le namespace de ton module, qui se > > prend > > > donc un warning quand il redefini sub encode. > > > > Ok mais je croyais que pour importer une fonction dans le namespace, > > il fallait le spécifier explicitement en paramètre, ici > > > > use Encode('encode'); > > > > J'ai l'impression que cet import à la demande ne marche que si > > l'export correspondant est fait via la variable @EXPORT_OK ? À moins > > que ce soit la présence ou non de liste d'import qui fasse la > > différence, d'où la liste vide pour explicitement ne rien importer ? > > > > > > > > Pour régler ça, il suffit de faire: > > > > > > use Encode (); > > > > > > Qui charge le module Encode, mais n'importe rien. > > > > Merci, ça marche. > > > > > > > > > > > > >Voici un ECM pour caractériser le problème. Comme on le voit, la > > > >fonction encode du module Encode n'est pas importée mais explicitement > > > >qualifiée lors de son appel. La définition de la fonction de mon > > > >module ne devrait donc pas entrer en conflit avec celle du module > > > >Encode. J'ai parcouru la doc perlsub, j'ai bien remarqué "use subs" > > > >mais qui ne répond pas au problème. > > > > > > > > > > > > > > > >fichier Encoder.pm : > > > >package Encoder; > > > > > > > >use Modern::Perl; > > > >use feature qw/unicode_strings/; > > > > > > > >use base('Exporter'); > > > > > > > >our @EXPORT_OK = qw/encode/; > > > > > > > >use Encode; > > > > > > Du coup ici ^ use Encode (); > > > > > > > > > > >sub encode { > > > > my( $encoding, $string ) = @_; > > > > > > > > return Encode::encode( $encoding, $string ); > > > >} > > > > > > > >1; > > > > > > > > > > > > > > > >puis le programme : > > > > > > > >#!/usr/bin/perl > > > > > > > >use Modern::Perl; > > > >use utf8; > > > >use feature qw/unicode_strings/; > > > > > > > >use Encoder qw/encode/; > > > > > > > >main: > > > >{ > > > > my $string = "l'?uf et la poule"; > > > > > > > > print( encode( 'UTF-8', $string ).$/ ); > > > > > > > > exit 0; > > > >} > > > > > > > > > > > > > > > > > > _______________________________________________ > > > 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 -- From book at cpan.org Mon Jul 25 12:28:51 2016 From: book at cpan.org (Philippe Bruhat (BooK)) Date: Mon, 25 Jul 2016 12:28:51 +0200 Subject: [Perl] =?iso-8859-1?q?D=E9finir_une_fonction_qui_porte_le_m=EAme_?= =?iso-8859-1?q?nom_dans_un_module=2C_que_celle_dans_un_autre_module?= In-Reply-To: References: <20160720150232.GA21279@telecom-paristech.fr> <57910331.1080301@gmail.com> <20160722113450.GB20511@telecom-paristech.fr> Message-ID: <20160725102851.GC7968@zok> On Fri, Jul 22, 2016 at 01:49:51PM +0200, Laurent Rosenfeld wrote: > Si tu passes une liste vide à use, alors aucune fonction n'est importée. De > coup tu peux y accéder uniquement avec le nom complet Encode::encode. > Plus exactement, la fonction import() du module en question n'est pas appellée. `perldoc -f use` a plus de détails sur le fonctionnement de use, mais pour simplifier : use Module LIST; est exactement équivalent à : BEGIN { require Module; Module->import( LIST ); } Et : use Module (); est exactement équivalent à : BEGIN { require Module } En général, la fonction import est fournie par Exporter, si le module en question est défini comme une sous-classe d'Exporter. Mais rien n'empêche d'écrire sa propre fonction import, qui utilise la liste fournie en paramètre d'une façon complètement différente... -- Philippe Bruhat (BooK) Everyone acts their age... mental, if not physical. (Moral from Groo The Wanderer #92 (Epic))