Pourtant, dans le script j'ai une dizaine de param=E8tres d=E9finis avec
use constant
et il y en a seulement un qui me cause des ennuis. La constante se
nomme POOL_PRM_POSITION
et sa valeur est "po".
J'ai un foreach dans lequel j'ai des "if" et "elsif" pour chacun de
mes param=E8tres.
J'ai v=E9rifi=E9 le contenu du hash avec Data::Dumper, tout est beau.
Est-ce que la valeur "po" est particuli=E8re pour perl ???
Est-ce que le nom POOL_PRM_POSITION est utilis=E9 par perl ???
Est-ce le fait que j'utilise une r=E9f=E9rence ???
Est-ce les extra-terrestres vont d=E9barquer chez moi ???
Dois-je ajouter syst=E9matiquement <. ""> =E0 la clef lorsque celle-ci est
une constante ?
Ou peut-=EAtre
my $var =3D PRM_UN;
$param->{ $var };
Merci d'=E9clairer ma lanterne
Luc
P.S.
J'ai trouv=E9 cette solution =E0 cet endroit :
http://mailman.anu.edu.au/pipermail/perl.sig/2005-June/000009.html
À (at) 21 Mar 2008 08:48:29 GMT, Nicolas George <nicolas$ écrivait (wrote):
Luc wrote in message :
if( $params->{ PRM_UN }
Un « bareword » entre les accolades d'un tableau associatif est considéré comme une chaîne de caractères. Par exemple :
$color->{red} = 0x800000;
est équivalent à :
$color->{"red"} = 0x800000;
même si red est un nom de fonction déjà défini.
Tout à fait exact.
Si on veut utiliser une constante comme clé, il faut l'appeler (actuellement, une constante en Perl n'est qu'une fonction presque comme une autre) :
use constant TOTO => 'abc';
my %h = (abc => 1);
if (not defined $h{TOTO}) { warn "Pas de clé TOTO dans 'h'n"; }
if (defined $h{TOTO()}) { warn "Clé ", TOTO, " définie dans 'h'n"; }
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Luc
Merci pour vos explications.
Ce qui m'agace par contre, c'est que j'ai utilsé ce principe dans tous mes scripts et c'est la première fois que je rencontre ce problème.
Lorsque la constante est définie dans un autre module, il faut mettre des parenthèses car on appelle une fonction. Cependant, un moment donné, je me suis rendu contre que l'on avait pas besoin de paranthèses si la constante est définie dans le module que l'on utilise.
J'ai donc omis les parenthèses me disant que je verrais rapidement si la constante a été définie dans le module courrant ou non. Cependant, avec l'étrange comportement que j'ai vu, je vais toujours mettre les parenthèses. Je préfère ajouter les paranethèses que d'ajouter une bizzareris comme . ""
Merci beaucoup et bon week end!
Luc
Merci pour vos explications.
Ce qui m'agace par contre, c'est que j'ai utilsé ce principe dans tous
mes scripts et c'est la première fois que je rencontre ce problème.
Lorsque la constante est définie dans un autre module, il faut mettre
des parenthèses car on appelle une fonction. Cependant, un moment
donné, je me suis rendu contre que l'on avait pas besoin de
paranthèses si la constante est définie dans le module que l'on
utilise.
J'ai donc omis les parenthèses me disant que je verrais rapidement si
la constante a été définie dans le module courrant ou non.
Cependant, avec l'étrange comportement que j'ai vu, je vais toujours
mettre les parenthèses.
Je préfère ajouter les paranethèses que d'ajouter une bizzareris
comme . ""
Ce qui m'agace par contre, c'est que j'ai utilsé ce principe dans tous mes scripts et c'est la première fois que je rencontre ce problème.
Lorsque la constante est définie dans un autre module, il faut mettre des parenthèses car on appelle une fonction. Cependant, un moment donné, je me suis rendu contre que l'on avait pas besoin de paranthèses si la constante est définie dans le module que l'on utilise.
J'ai donc omis les parenthèses me disant que je verrais rapidement si la constante a été définie dans le module courrant ou non. Cependant, avec l'étrange comportement que j'ai vu, je vais toujours mettre les parenthèses. Je préfère ajouter les paranethèses que d'ajouter une bizzareris comme . ""
Merci beaucoup et bon week end!
Luc
Paul Gaborit
À (at) Fri, 21 Mar 2008 06:48:47 -0700 (PDT), Luc écrivait (wrote):
J'ai donc omis les parenthèses me disant que je verrais rapidement si la constante a été définie dans le module courrant ou non. Cependant, avec l'étrange comportement que j'ai vu, je vais toujours mettre les parenthèses.
Dans le module où la (fonction) constante est définie, il y a au moins deux endroits où Perl risque de ne pas l'interpréter comme il faut si on omet les parenthèses et c'est à chaque fois si on l'utilise comme clé d'une table de hachage :
1- Dans :
$h{TOTO}
où il faut utiliser :
$h{TOTO()}
2- Dans
%h = (TOTO => "valeur")
où il faut utiliser :
%h = (TOTO() => "valeur");
Il y a quelques autres exceptions mais beaucoup moins surprenantes (comme par exemple Foo::TOTO::Bar).
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 21 Mar 2008 06:48:47 -0700 (PDT),
Luc <luc.martineau.luc@gmail.com> écrivait (wrote):
J'ai donc omis les parenthèses me disant que je verrais rapidement si
la constante a été définie dans le module courrant ou non.
Cependant, avec l'étrange comportement que j'ai vu, je vais toujours
mettre les parenthèses.
Dans le module où la (fonction) constante est définie, il y a au moins
deux endroits où Perl risque de ne pas l'interpréter comme il faut si
on omet les parenthèses et c'est à chaque fois si on l'utilise comme
clé d'une table de hachage :
1- Dans :
$h{TOTO}
où il faut utiliser :
$h{TOTO()}
2- Dans
%h = (TOTO => "valeur")
où il faut utiliser :
%h = (TOTO() => "valeur");
Il y a quelques autres exceptions mais beaucoup moins surprenantes
(comme par exemple Foo::TOTO::Bar).
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Fri, 21 Mar 2008 06:48:47 -0700 (PDT), Luc écrivait (wrote):
J'ai donc omis les parenthèses me disant que je verrais rapidement si la constante a été définie dans le module courrant ou non. Cependant, avec l'étrange comportement que j'ai vu, je vais toujours mettre les parenthèses.
Dans le module où la (fonction) constante est définie, il y a au moins deux endroits où Perl risque de ne pas l'interpréter comme il faut si on omet les parenthèses et c'est à chaque fois si on l'utilise comme clé d'une table de hachage :
1- Dans :
$h{TOTO}
où il faut utiliser :
$h{TOTO()}
2- Dans
%h = (TOTO => "valeur")
où il faut utiliser :
%h = (TOTO() => "valeur");
Il y a quelques autres exceptions mais beaucoup moins surprenantes (comme par exemple Foo::TOTO::Bar).
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>