Utiliser des constantes comme clés de hachages
Le
Manuel Pégourié-Gonnard
Bonjour,
Y a-t-il moyen d'utiliser une constante (définie avec use constant)
comme clé d'un hachage ? J'ai l'impression que Perl va toujours
transformer un "bareword" en chaîne dans ce contexte et que c'est donc
impossible. J'ai manqué quelque chose ?
Le script suivant montre que la clé est 'const' et non pas la valeur de
la constante associée.
use constant { 'const' => 'key' };
my $var = const;
my %hash = (const => 'value', 'key2' => 'value2');
$hash{const} = 'value3';
print "$_" for keys %hash;
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Y a-t-il moyen d'utiliser une constante (définie avec use constant)
comme clé d'un hachage ? J'ai l'impression que Perl va toujours
transformer un "bareword" en chaîne dans ce contexte et que c'est donc
impossible. J'ai manqué quelque chose ?
Le script suivant montre que la clé est 'const' et non pas la valeur de
la constante associée.
use constant { 'const' => 'key' };
my $var = const;
my %hash = (const => 'value', 'key2' => 'value2');
$hash{const} = 'value3';
print "$_" for keys %hash;
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/

Poser une question


Ah oui, j'avais oublié de relire la doc de constant avant de poser ma
question. C'est indiqué dans la section "caveat". Désolé pour le bruit.
my %hash = (+const => 'value'); # interprète const comme une constante
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/
Manuel Pégourié-Gonnard
Heu... La technique du plus (+const) ne fonctionne malheureusement que
dans le cas évoqué par la doc. À savoir, si on utilise une constante
comme une clé d'accès dans une table de hachage... Dans le contexte de
l'exemple que tu donnes ci-dessus, ça ne fonctionne pas : '+const' est
utilisé exactement comme 'const'.
Il vaut donc mieux utiliser les parenthèses qui elles fonctionnent à
tous les coups :
my %hash = (const() => 'value'); # interprète const comme une constante
En fait, en Perl, actuellement, une constante n'est qu'une fonction
sans paramètre.
--
Paul Gaborit - Perl en français -
Paul Gaborit
Au fait, j'oubliais : il faut respecter les conventions
d'écriture. Une constante, par convention, porte toujours, sauf très
rares exceptions, un nom entièrement en MAJUSCULES ! Donc :
use constant CONST => 'essai';
$h{CONST()} = 3;
%h = (CONST() => 3);
--
Paul Gaborit - Perl en français -
Ok, merci.
Ah, je comprends mieux alors.
Ok.
--
Manuel Pégourié-Gonnard Institut de mathématiques de Jussieu
http://weblog.elzevir.fr/ http://people.math.jussieu.fr/~mpg/