Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Objets et variables

2 réponses
Avatar
Julien PLEE
Bonjour à tous,

Je viens vous voir et vous questionner pour comprendre un peu mieux les
objets dans PERL et leur utilisation, enfin surtout un point sur lequel je
n'ai pas réussi à trouver de documentation !

Cela concerne l'utilisation de variables (que je conçois très certainement
dans un sens plus large que celui qui lui est défini dans PERL) au sein des
objets (s'agit-il d'instances de classes ? peut-être pourrez vous m'enlever
le doute aussi sur ce point :-) ).
Ainsi, pour concerver des valeurs dans un objet, on utilise un tableau de
hashage anonyme avec lequel, on récupère les valeurs comme avec une
référence à un tableau de hashage :

$$obj{var1} ou $obj->{var1}


Le problème que j'ai rencontré un jour fut de vouloir appeler ces valeurs,
de cette même manière, en dehors de l'objet, tandis qu'il est de convention
de récupérer des valeur par l'appel de méthodes, par exemple comme ceci :

my $var1 = $obj->get_value("var1");


Il s'agissait alors de besoins en rapport avec des taches d'automatisation
en souhaitant minimiser la quantité de touches à frapper (par pure paresse,
mais ne me frappez pas tout de suite :-) ) comme dans l'exemple ci-dessous :

our $obj = new Obj;
foreach my $key (keys %{$obj}) {
do_something_with($key, $$obj{$key});
};


Seulement j'avais aussi besoin de garder des variables "privées" à l'objet,
qui ne seraient pas contenues dans la référence au tableau de hashage.
Aussi, j'ai eu l'idée, sur le principe de l'écriture "$main::variable", en
supposant - car je suppose beaucoup - que "main" soit considéré comme un
objet, d'utiliser $self::variable_privee pour stocker des variables
"privées" appelées uniquement au sein des l'objet... et à mon grand
étonnement, celà a marché !

Seulement, je ne comprend pas pourquoi celà marche, ce que celà fait
exactement... d'autant plus qu'en appellant "$obj::variable_privee" dans le
package "main", celà ne me retournait rien. il en était de même en appelant
"Obj::variable_privee". Et si mes souvenirs sont bons, lorsque j'affetais
une valeur depuis le package main à "$obj::variable_privee" depuis le
package "main", je pouvais la relire dans le package "Obj" par l'instruction
"$self::variable_privee".


Cette histoire m'a un peu déboussolé et j'aimerai bien comprendre ce que
provoque exactement l'affectation de "$self::variable", ce pour être certain
de ne pas créer des conflits (par exemple en créant plusieurs objets $obj
qiu possèdent chacuns leur propre variables "privée").
Par ailleurs, avez-vous déjà rencontré ce genre de besoin, et si oui,
comment êtes-vous parvenus à vos fins.


Merci considérablement de vos éléments de réponse qui permetteront à ma tête
de retrouver une température acceptable :-)


Julien

2 réponses

Avatar
Laurent Wacrenier
Julien PLEE écrit:
Seulement j'avais aussi besoin de garder des variables "privées" à l'objet,
qui ne seraient pas contenues dans la référence au tableau de hashage.


Il n'y a pas de variables privées en perl.
Tu devrais definir des TIEHASH (perldoc -f tie; perldoc Tie::Hash)

Avatar
Julien PLEE
Il n'y a pas de variables privées en perl.
Tu devrais definir des TIEHASH (perldoc -f tie; perldoc Tie::Hash)


Merci, je vais étudier celà :-)
Autrement, je viens de faire des tests, et comme celà semblera évident à
certains, $self::variable réfère à la variable "variable" du namespace
(traduction en français inconue de ma part) "self"... ce qui fait qu'en le
modifiant d'un object à l'autre du même package, on obtient en fait toujours
le même contenu.

Merci bien Laurent