OVH Cloud OVH Cloud

archiver la valeur d'une référence

2 réponses
Avatar
mzi
Bonjour à tous,

Je cherche à stocker dans une variable la valeur de la variable vers
laquelle pointerait un objet perl (donc une référence), de manière à
pouvoir la récupérer ensuite.

Avec un scalaire, ce n'est pas difficile. Par exemple, je peux référencer le
scalaire et retrouver sa valeur à différents moments en déréférençant
simplement la référence. Mais dès lors que les références sont
hiérarchisées (comme dans un objet perl), je ne vois pas comment faire pour
capturer leur état.

Le but est de pouvoir continuer à travailler avec la référence, mais de
pouvoir également revenir à un état antérieur à la demande (une sorte
d'undo, en fait).

Une idée?

--
mzi

2 réponses

Avatar
Paul Gaborit
À (at) Fri, 21 Oct 2005 17:05:40 +0200,
mzi écrivait (wrote):
Je cherche à stocker dans une variable la valeur de la variable vers
laquelle pointerait un objet perl (donc une référence), de manière à
pouvoir la récupérer ensuite.

Avec un scalaire, ce n'est pas difficile. Par exemple, je peux référencer le
scalaire et retrouver sa valeur à différents moments en déréférençant
simplement la référence. Mais dès lors que les références sont
hiérarchisées (comme dans un objet perl), je ne vois pas comment faire pour
capturer leur état.

Le but est de pouvoir continuer à travailler avec la référence, mais de
pouvoir également revenir à un état antérieur à la demande (une sorte
d'undo, en fait).


Vous pouvez utiliser le module Storable et ses fonctions 'freeze' et
'thaw' ou celle qui fait les deux opérations d'un seul coup 'dclone' :

use Storable qw{dclone freeze thaw};

my $obj = ... # création d'un objet (ou d'une structure
# arbitrairement complexe).

my $sauve = freeze $obj;
# ...
my $clone = ${thaw $sauve};

# ou
my $clone = ${dclone($obj)};

Ça marche sur la plupart des objets. Les limitiations sont celles
liées à Storable.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
mzi
Je cherche à stocker dans une variable la valeur de la variable vers
laquelle pointerait un objet perl (donc une référence), de manière à
pouvoir la récupérer ensuite.


Vous pouvez utiliser le module Storable et ses fonctions 'freeze' et
'thaw' ou celle qui fait les deux opérations d'un seul coup 'dclone' :


Merci. Je vais tester ça au plus vite.
--
mzi