Hash utilisant une constante ... Résolu
  Home FAQ Contact Sign in
fr.comp.lang.perl only
 
Advanced search
POPULAR GROUPS

more...

fr.comp.lang.perl Profile…
 Up
Hash utilisant une constante ... Résolu         


Author: Luc
Date: Mar 20, 2008 21:15

Bonjour,

J'ai eu un problème avec les hash que j'ai résolu en cherchant sur
google.

Je viens ici afin que l'on m'explique ce qui se passe.

J'ai un module qui valide les paramètres reçus (CGI)

use constant PRM_UN => "po";

my $params = $cgi->Vars;

if( $params->{ PRM_UN } eq $params->{ "po" } ) {
print "aucun problème";
} else {
print "Surprenant!!";
}

Ça affichait (ça l'affiche encore d'ailleurs...) "Surprenant!!"

Cependant

if( $params->{ PRM_UN . "" } eq $params->{ "po" } ) {
print "aucun problème";
} else {
print "Surprenant!!";
}
Show full article (1.63Kb)
4 Comments
Re: Hash utilisant une constante ... Résolu         


Date: Mar 21, 2008 01:48

Luc wrote in message
<0199d4c7-287a-4268-a309-8e925d0a188e@n58g2000hsf.googlegroups.com>:
> 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.
no comments
Re: Hash utilisant une constante ... Résolu         


Author: Paul Gaborit
Date: Mar 21, 2008 02:41

À (at) 21 Mar 2008 08:48:29 GMT,
Nicolas George salle-s.org> écrivait (wrote):
> Luc wrote in message
> <0199d4c7-287a-4268-a309-8e925d0a188e@n58g2000hsf.googlegroups.com>:
>> 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.
Show full article (1.02Kb)
no comments
Re: Hash utilisant une constante ... Résolu         


Author: Luc
Date: Mar 21, 2008 06:48

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
no comments
Re: Hash utilisant une constante ... Résolu         


Author: Paul Gaborit
Date: Mar 21, 2008 07:05

À (at) Fri, 21 Mar 2008 06:48:47 -0700 (PDT),
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");
Show full article (0.97Kb)
no comments