OVH Cloud OVH Cloud

comment faire une copie par reference d'un hash??

1 réponse
Avatar
bboett
Salut!

problème incongru, comme retour d'une fonction je retourne un hash, une
autre fonction reprend cette référence, et selon le cas doit modifier un
champ, mais cette modif de ce champ précis ne doit pas se répercuter sur
le dataset original. J'essaye donc de faire une copie du hash en gardant
les références sur le dataset original, sauf pour 1 champ.
A savoir que les fonctions supérieures qui manipulent ces reférences sur
hash doivent pouvoir manipuler indisctinctement le dataset originel,
seules certaines d'entre elles sont concernées par ce champ (celles
qui visualisent les dataset, pour indiquer qu'un certain dataset
en fait est un alias sur un autre...). Euh j'espère que c'est a peu près
clair :D

Tant que dans le hash il y a des références, ca ne pose pas de prob, par
contre, si la valeur d'un champ est un scalaire, je n'arrive pas a créer
une référence....

j'ai bien essaye $subCase->{$key} = \{$tmpRet->{$key}};
marche pas...
si je mets le tout dans une variable temporaire une copie est crée....

en fait mon prob vient comment spécifier que je veux réupérer du hash une
référence et non une valeur scalaire??

toute aide bienvenue!
--
bboett at inforezo dot u-strasbg dot fr
http://inforezo.u-strasbg.fr/~bboett
==============================================================
Unsolicited commercial email is NOT welcome at this email address

1 réponse

Avatar
root
On Wed, 14 Jan 2004 14:49:09 +0000, bboett wrote:

Salut!

problème incongru, comme retour d'une fonction je retourne un hash, une
autre fonction reprend cette référence, et selon le cas doit modifier un
champ, mais cette modif de ce champ précis ne doit pas se répercuter sur
le dataset original. J'essaye donc de faire une copie du hash en gardant
les références sur le dataset original, sauf pour 1 champ.
A savoir que les fonctions supérieures qui manipulent ces reférences sur
hash doivent pouvoir manipuler indisctinctement le dataset originel,
seules certaines d'entre elles sont concernées par ce champ (celles
qui visualisent les dataset, pour indiquer qu'un certain dataset
en fait est un alias sur un autre...). Euh j'espère que c'est a peu près
clair :D

Tant que dans le hash il y a des références, ca ne pose pas de prob, par
contre, si la valeur d'un champ est un scalaire, je n'arrive pas a créer
une référence....

j'ai bien essaye $subCase->{$key} = {$tmpRet->{$key}};
marche pas...
si je mets le tout dans une variable temporaire une copie est crée....

en fait mon prob vient comment spécifier que je veux réupérer du hash une
référence et non une valeur scalaire??



Tu as essayé avec $h_ref->{$key} ?

use strict;
use warnings;

my $h_ref = {
"a" => 1,
"b" => 2,
"foo" => 3,
};

# on prend une reference mais pas la valeur
my $ref = $h_ref->{"foo"};

# on change la valeur pointé par la reference
$$ref = "bar";

# et la valeur dans le hash d'origine est bien modifié
print map { "$_ => $h_ref->{$_}n" } sort keys %{$h_ref};

On obtient donc :

a => 1
b => 2
foo => bar

C'est bien ce que tu voulais faire ?