J'ai un module "de configuration", qui contient des scalaires globaux
dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle
variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas
moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide
d'un inspection de la table des symboles ?
Je pense que ça doit être possible mais je ne connait pas les capacités
d'introspection de Perl.
À (at) Fri, 12 Sep 2003 17:12:17 +0200, Alex Marandon écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide d'un inspection de la table des symboles ?
Je pense que ça doit être possible mais je ne connait pas les capacités d'introspection de Perl.
C'est sûrement faisable via la table des symboles : c'est une table de hachage dont le nom est :: (deux fois deux points) ;-)
print join("n", keys %::);
Pour un module particulier, disons 'Toto', la clé est 'Toto::' :
print join("n", keys %{$::{"Toto::"}});
Pour un module plus profond, disons 'Toto::Titi', il faut deux niveaux :
print join("n", keys %{$::{"Toto::"}{"Titi::"}});
À partir de là, on retrouve tous les symboles définis globalement (pas les 'my'). Mais comment comptez-vous distinguer ce qui faut exporter de ce qui ne doit pas l'être ? De plus, vous n'avez accès qu'aux GLOB par ce moyen. Il faut encore identifier ceux qui sont des scalaires ou autres choses.
Le plus simple est alors d'utiliser le module Symbol::Table (disponible sur CPAN).
Bon courage.
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/> Remove '.OOO' from e-mail address - Supprimez '.OOO' de l'adresse e-mail
À (at) Fri, 12 Sep 2003 17:12:17 +0200,
Alex Marandon <al@nospam.org> écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux
dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle
variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas
moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide
d'un inspection de la table des symboles ?
Je pense que ça doit être possible mais je ne connait pas les capacités
d'introspection de Perl.
C'est sûrement faisable via la table des symboles : c'est une table de hachage
dont le nom est :: (deux fois deux points) ;-)
print join("n", keys %::);
Pour un module particulier, disons 'Toto', la clé est 'Toto::' :
print join("n", keys %{$::{"Toto::"}});
Pour un module plus profond, disons 'Toto::Titi', il faut deux niveaux :
print join("n", keys %{$::{"Toto::"}{"Titi::"}});
À partir de là, on retrouve tous les symboles définis globalement (pas les
'my'). Mais comment comptez-vous distinguer ce qui faut exporter de ce qui ne
doit pas l'être ? De plus, vous n'avez accès qu'aux GLOB par ce moyen. Il faut
encore identifier ceux qui sont des scalaires ou autres choses.
Le plus simple est alors d'utiliser le module Symbol::Table (disponible sur
CPAN).
Bon courage.
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
Remove '.OOO' from e-mail address - Supprimez '.OOO' de l'adresse e-mail
À (at) Fri, 12 Sep 2003 17:12:17 +0200, Alex Marandon écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide d'un inspection de la table des symboles ?
Je pense que ça doit être possible mais je ne connait pas les capacités d'introspection de Perl.
C'est sûrement faisable via la table des symboles : c'est une table de hachage dont le nom est :: (deux fois deux points) ;-)
print join("n", keys %::);
Pour un module particulier, disons 'Toto', la clé est 'Toto::' :
print join("n", keys %{$::{"Toto::"}});
Pour un module plus profond, disons 'Toto::Titi', il faut deux niveaux :
print join("n", keys %{$::{"Toto::"}{"Titi::"}});
À partir de là, on retrouve tous les symboles définis globalement (pas les 'my'). Mais comment comptez-vous distinguer ce qui faut exporter de ce qui ne doit pas l'être ? De plus, vous n'avez accès qu'aux GLOB par ce moyen. Il faut encore identifier ceux qui sont des scalaires ou autres choses.
Le plus simple est alors d'utiliser le module Symbol::Table (disponible sur CPAN).
Bon courage.
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/> Remove '.OOO' from e-mail address - Supprimez '.OOO' de l'adresse e-mail
Laurent Wacrenier
Alex Marandon écrit:
J'ai un module "de configuration", qui contient des scalaires globaux dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide d'un inspection de la table des symboles ?
Le mieux est de ranger ses variables dans un hash et d'exporter le hash. Toutefois, tu peux te passer d'export et écrire ta propre fonction import (perldoc -f import)
Alex Marandon <al@nospam.org> écrit:
J'ai un module "de configuration", qui contient des scalaires globaux
dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle
variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas
moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide
d'un inspection de la table des symboles ?
Le mieux est de ranger ses variables dans un hash et d'exporter le
hash. Toutefois, tu peux te passer d'export et écrire ta propre
fonction import (perldoc -f import)
J'ai un module "de configuration", qui contient des scalaires globaux dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide d'un inspection de la table des symboles ?
Le mieux est de ranger ses variables dans un hash et d'exporter le hash. Toutefois, tu peux te passer d'export et écrire ta propre fonction import (perldoc -f import)
nicolas
On Fri, 12 Sep 2003 18:08:55 +0200, Paul GABORIT wrote:
À (at) Fri, 12 Sep 2003 17:12:17 +0200, Alex Marandon écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux
Pareil, ce sont des variables toutes connes.
Je pense que ça doit être possible mais je ne connait pas les capacités d'introspection de Perl.
C'est sûrement faisable via la table des symboles : c'est une table de hachage dont le nom est :: (deux fois deux points) ;-)
Aaarg, c'est bien compliqué pour un fichier de config' (et en plus, j'y pige rien). Il faudrait juste faire comme si le code du fichier de conf' était directement inséré là où il est appelé. Et ça serait encore mieux si tout ça reconnaissait le ~ du répertoire perso.
nicolas patrois : pts noir asocial -- PEACE
M : La guerre, ça amène la mort, les épidémie, la vermine... la souffrance, la destruction, la peur... P : ...Et les pacifistes !
On Fri, 12 Sep 2003 18:08:55 +0200, Paul GABORIT wrote:
À (at) Fri, 12 Sep 2003 17:12:17 +0200, Alex Marandon <al@nospam.org>
écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux
Pareil, ce sont des variables toutes connes.
Je pense que ça doit être possible mais je ne connait pas les capacités
d'introspection de Perl.
C'est sûrement faisable via la table des symboles : c'est une table de
hachage dont le nom est :: (deux fois deux points) ;-)
Aaarg, c'est bien compliqué pour un fichier de config' (et en plus, j'y
pige rien).
Il faudrait juste faire comme si le code du fichier de conf' était
directement inséré là où il est appelé.
Et ça serait encore mieux si tout ça reconnaissait le ~ du répertoire
perso.
nicolas patrois : pts noir asocial
--
PEACE
M : La guerre, ça amène la mort, les épidémie, la vermine... la souffrance, la destruction, la peur...
P : ...Et les pacifistes !
On Fri, 12 Sep 2003 18:08:55 +0200, Paul GABORIT wrote:
À (at) Fri, 12 Sep 2003 17:12:17 +0200, Alex Marandon écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux
Pareil, ce sont des variables toutes connes.
Je pense que ça doit être possible mais je ne connait pas les capacités d'introspection de Perl.
C'est sûrement faisable via la table des symboles : c'est une table de hachage dont le nom est :: (deux fois deux points) ;-)
Aaarg, c'est bien compliqué pour un fichier de config' (et en plus, j'y pige rien). Il faudrait juste faire comme si le code du fichier de conf' était directement inséré là où il est appelé. Et ça serait encore mieux si tout ça reconnaissait le ~ du répertoire perso.
nicolas patrois : pts noir asocial -- PEACE
M : La guerre, ça amène la mort, les épidémie, la vermine... la souffrance, la destruction, la peur... P : ...Et les pacifistes !
Alex Marandon
In article , Laurent Wacrenier wrote:
Alex Marandon écrit:
J'ai un module "de configuration", qui contient des scalaires globaux dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide d'un inspection de la table des symboles ?
Le mieux est de ranger ses variables dans un hash et d'exporter le hash.
C'est aussi ce que je me suis dis après avoir semé mes scalaires un peu partout dans une douzaine de fichier sources (et il jura mais un peu tard qu'on ne l'y reprendrais plus).
Toutefois, tu peux te passer d'export et écrire ta propre fonction import (perldoc -f import)
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas comment s'implémente une fonction import. Je n'arrive pas à faire fonctionner l'exemple qui est donné dans la doc de Exporter.
In article <slrnbm3s58.kcn.lwa@victor.teaser.fr>, Laurent Wacrenier wrote:
Alex Marandon <al@nospam.org> écrit:
J'ai un module "de configuration", qui contient des scalaires globaux
dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle
variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas
moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide
d'un inspection de la table des symboles ?
Le mieux est de ranger ses variables dans un hash et d'exporter le
hash.
C'est aussi ce que je me suis dis après avoir semé mes scalaires un peu
partout dans une douzaine de fichier sources (et il jura mais un peu
tard qu'on ne l'y reprendrais plus).
Toutefois, tu peux te passer d'export et écrire ta propre
fonction import (perldoc -f import)
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas
comment s'implémente une fonction import. Je n'arrive pas à faire
fonctionner l'exemple qui est donné dans la doc de Exporter.
J'ai un module "de configuration", qui contient des scalaires globaux dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide d'un inspection de la table des symboles ?
Le mieux est de ranger ses variables dans un hash et d'exporter le hash.
C'est aussi ce que je me suis dis après avoir semé mes scalaires un peu partout dans une douzaine de fichier sources (et il jura mais un peu tard qu'on ne l'y reprendrais plus).
Toutefois, tu peux te passer d'export et écrire ta propre fonction import (perldoc -f import)
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas comment s'implémente une fonction import. Je n'arrive pas à faire fonctionner l'exemple qui est donné dans la doc de Exporter.
Alex Marandon
In article , Paul GABORIT wrote:
À (at) Fri, 12 Sep 2003 17:12:17 +0200, Alex Marandon écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide d'un inspection de la table des symboles ? [...]
C'est sûrement faisable via la table des symboles : c'est une table de hachage dont le nom est :: (deux fois deux points) ;-)
print join("n", keys %::);
[...]
À partir de là, on retrouve tous les symboles définis globalement (pas les 'my'). Mais comment comptez-vous distinguer ce qui faut exporter de ce qui ne doit pas l'être ?
Effectivement, il y a du monde. Et je ne veux clairement pas exporter tout ça.
De plus, vous n'avez accès qu'aux GLOB par ce moyen. Il faut encore identifier ceux qui sont des scalaires ou autres choses.
Les variables que je veux exporter sont toutes des scalaires, mais ça ne m'aide pas trop pour faire le tri dans tous les typeglobs que contient %::
Le plus simple est alors d'utiliser le module Symbol::Table (disponible sur CPAN).
Bon courage.
Merci :)
In article <r7u17ivvjc.fsf@michelange.enstimac.fr>, Paul GABORIT wrote:
À (at) Fri, 12 Sep 2003 17:12:17 +0200,
Alex Marandon <al@nospam.org> écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux
dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle
variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas
moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide
d'un inspection de la table des symboles ?
[...]
C'est sûrement faisable via la table des symboles : c'est une table de hachage
dont le nom est :: (deux fois deux points) ;-)
print join("n", keys %::);
[...]
À partir de là, on retrouve tous les symboles définis globalement (pas les
'my'). Mais comment comptez-vous distinguer ce qui faut exporter de ce qui ne
doit pas l'être ?
Effectivement, il y a du monde. Et je ne veux clairement pas exporter
tout ça.
De plus, vous n'avez accès qu'aux GLOB par ce moyen. Il faut
encore identifier ceux qui sont des scalaires ou autres choses.
Les variables que je veux exporter sont toutes des scalaires, mais ça ne
m'aide pas trop pour faire le tri dans tous les typeglobs que contient %::
Le plus simple est alors d'utiliser le module Symbol::Table (disponible sur
CPAN).
À (at) Fri, 12 Sep 2003 17:12:17 +0200, Alex Marandon écrivait (wrote):
J'ai un module "de configuration", qui contient des scalaires globaux dont j'autorise l'importation via @EXPORT_OK. A chaque nouvelle variable, je dois rajouter un entrée dans @EXPORT_OK, n'y aurait-il pas moyen d'automatiser ça en contruisant dynamiquement @EXPORT_OK à laide d'un inspection de la table des symboles ? [...]
C'est sûrement faisable via la table des symboles : c'est une table de hachage dont le nom est :: (deux fois deux points) ;-)
print join("n", keys %::);
[...]
À partir de là, on retrouve tous les symboles définis globalement (pas les 'my'). Mais comment comptez-vous distinguer ce qui faut exporter de ce qui ne doit pas l'être ?
Effectivement, il y a du monde. Et je ne veux clairement pas exporter tout ça.
De plus, vous n'avez accès qu'aux GLOB par ce moyen. Il faut encore identifier ceux qui sont des scalaires ou autres choses.
Les variables que je veux exporter sont toutes des scalaires, mais ça ne m'aide pas trop pour faire le tri dans tous les typeglobs que contient %::
Le plus simple est alors d'utiliser le module Symbol::Table (disponible sur CPAN).
Bon courage.
Merci :)
Alex Marandon
In article , nicolas wrote: [...]
Il faudrait juste faire comme si le code du fichier de conf' était directement inséré là où il est appelé.
Le proche de ce que vous dites, c'est la fonction do().
Et ça serait encore mieux si tout ça reconnaissait le ~ du répertoire perso.
Vous trouverez le nom du répertoire personnel dans $ENV{'HOME'}.
$ cat y.pl #!/usr/bin/perl -w use strict;
our $a = "Plop!n";;
$ cat t.pl #!/usr/bin/perl -w use strict;
my $path = '~/y.pl'; $path =~ s/~/$ENV{'HOME'}/; do $path; print $a;
In article <pan.2003.09.14.21.44.40.899902.25995@online.fr>, nicolas wrote:
[...]
Il faudrait juste faire comme si le code du fichier de conf' était
directement inséré là où il est appelé.
Le proche de ce que vous dites, c'est la fonction do().
Et ça serait encore mieux si tout ça reconnaissait le ~ du répertoire
perso.
Vous trouverez le nom du répertoire personnel dans $ENV{'HOME'}.
$ cat y.pl
#!/usr/bin/perl -w
use strict;
our $a = "Plop!n";;
$ cat t.pl
#!/usr/bin/perl -w
use strict;
my $path = '~/y.pl';
$path =~ s/~/$ENV{'HOME'}/;
do $path;
print $a;
Il faudrait juste faire comme si le code du fichier de conf' était directement inséré là où il est appelé.
Le proche de ce que vous dites, c'est la fonction do().
Et ça serait encore mieux si tout ça reconnaissait le ~ du répertoire perso.
Vous trouverez le nom du répertoire personnel dans $ENV{'HOME'}.
$ cat y.pl #!/usr/bin/perl -w use strict;
our $a = "Plop!n";;
$ cat t.pl #!/usr/bin/perl -w use strict;
my $path = '~/y.pl'; $path =~ s/~/$ENV{'HOME'}/; do $path; print $a;
Patrick
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas comment s'implémente une fonction import. Je n'arrive pas à faire fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
Patrick.
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas
comment s'implémente une fonction import. Je n'arrive pas à faire
fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas comment s'implémente une fonction import. Je n'arrive pas à faire fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
Patrick.
Alex Marandon
In article , Patrick wrote:
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas comment s'implémente une fonction import. Je n'arrive pas à faire fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
Pas mieux, à part l'explication sur le use(), équivalent à un require() suivi d'un import(), je n'y vois pas d'information à propos de la fonction import() et de la façon dont elle peut être écrite.
In article <pan.2003.09.15.13.39.15.966993.12457@deepcore.org>, Patrick wrote:
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas
comment s'implémente une fonction import. Je n'arrive pas à faire
fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
Pas mieux, à part l'explication sur le use(), équivalent à un require()
suivi d'un import(), je n'y vois pas d'information à propos de la
fonction import() et de la façon dont elle peut être écrite.
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas comment s'implémente une fonction import. Je n'arrive pas à faire fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
Pas mieux, à part l'explication sur le use(), équivalent à un require() suivi d'un import(), je n'y vois pas d'information à propos de la fonction import() et de la façon dont elle peut être écrite.
Samuel Mouniée
Bonjour,
Alex Marandon wrote:
In article , Patrick wrote:
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas comment s'implémente une fonction import. Je n'arrive pas à faire fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
Pas mieux, à part l'explication sur le use(), équivalent à un require() suivi d'un import(), je n'y vois pas d'information à propos de la fonction import() et de la façon dont elle peut être écrite.
si vous voulez faire un "use monmodule qw( toto tata );", cela equivaut bien a un "require monmodule.pm" et de monmodule->import( "toto", "tata" );
donc vous devez faire une fonction import dans le code de votre module. elle aura la forme suivante :
sub import { my ( $modulename_or_undef, @args ) = @_;
#moncode;
}
il n'y a pas de subtilite particulieres.
.s'nuoM
Bonjour,
Alex Marandon wrote:
In article <pan.2003.09.15.13.39.15.966993.12457@deepcore.org>, Patrick wrote:
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas
comment s'implémente une fonction import. Je n'arrive pas à faire
fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
Pas mieux, à part l'explication sur le use(), équivalent à un require()
suivi d'un import(), je n'y vois pas d'information à propos de la
fonction import() et de la façon dont elle peut être écrite.
si vous voulez faire un "use monmodule qw( toto tata );", cela equivaut
bien a un "require monmodule.pm" et de monmodule->import( "toto", "tata" );
donc vous devez faire une fonction import dans le code de votre module.
elle aura la forme suivante :
sub import {
my ( $modulename_or_undef, @args ) = @_;
J'ai beau relire les doc de Exporter, import et use, je ne comprends pas comment s'implémente une fonction import. Je n'arrive pas à faire fonctionner l'exemple qui est donné dans la doc de Exporter.
Peut-être un tour du côté du paragraphe ``Perl Modules'' du man perlmod ?
Pas mieux, à part l'explication sur le use(), équivalent à un require() suivi d'un import(), je n'y vois pas d'information à propos de la fonction import() et de la façon dont elle peut être écrite.
si vous voulez faire un "use monmodule qw( toto tata );", cela equivaut bien a un "require monmodule.pm" et de monmodule->import( "toto", "tata" );
donc vous devez faire une fonction import dans le code de votre module. elle aura la forme suivante :
sub import { my ( $modulename_or_undef, @args ) = @_;
#moncode;
}
il n'y a pas de subtilite particulieres.
.s'nuoM
nicolas
On Mon, 15 Sep 2003 10:41:46 +0200, Alex Marandon wrote:
do "$ENV{HOME}/lefichier";
Ça marche ! Merci.
nicolas patrois : pts noir asocial -- PEACE
M : La guerre, ça amène la mort, les épidémie, la vermine... la souffrance, la destruction, la peur... P : ...Et les pacifistes !
On Mon, 15 Sep 2003 10:41:46 +0200, Alex Marandon wrote:
do "$ENV{HOME}/lefichier";
Ça marche ! Merci.
nicolas patrois : pts noir asocial
--
PEACE
M : La guerre, ça amène la mort, les épidémie, la vermine... la souffrance, la destruction, la peur...
P : ...Et les pacifistes !