Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 17
    Points : 10
    Points
    10

    Par défaut Utilisation de Tie::RefHash et Moose

    Bonjour !

    Je viens à vous, car depuis hier je planche sur un beug dont je ne vois pas l'origine. J'ai utilisé la même syntaxe à deux endroits de mon programme, et elle marche une fois mais pas deux...

    En fait, je veux stocker un objet Moose, ici "File", dans une hash, avec pour valeur une ref vers une liste de chemins.

    Donc, pour prendre en clef un objet, je tie::RefHash ma hash via un constructeur. Ça marche dans un cas, mais pas dans un autre, pourtant similaire.

    Voici l'extrait de ma classe qui concerne ce problème :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    # L'attribut (une hash) que je veux refhasher dans le constructeur - impossible par défaut je crois ?
    has 'pathUnknownHashRef' => (
    	is		=> 'ro',
    	isa		=> 'HashRef[File]',
    	default		=> sub{ {} },
    	reader		=> 'get_pathUnknownHashRef'
    );
     
    # Mon constructeur
    sub BUILD
    {
    	my $self = shift;
    	tie %{$self -> get_pathUnknownHashRef}, 'Tie::RefHash';
    }
     
    sub addLog
    {
    	my $self = shift;
    	my $callingFile = shift;
    	my $failedPath = shift;
     
    	my $logHashRef = $self -> get_pathUnknownHashRef;
    	my $unknownListRef = $logHashRef -> {$callingFile};
     
    	push (@$unknownListRef, $failedPath);
     
    	$logHashRef -> {$callingFile} = $unknownListRef;
    	print Dumper $logHashRef;
            # Ici mes clefs sont de type : File=HASH(0x9dfa8e8)
            # Elles sont donc unblessed, donc inutilisables pour moi
    }
    Bien sûr, je pourrais contourner le problème, mais voyant que ça a marché dans un cas, je ne comprends pas pourquoi là, non !

    Cordialement,

    Mithryl

  2. #2
    Candidat au titre de Membre du Club
    Inscrit en
    mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 17
    Points : 10
    Points
    10

    Par défaut

    Bon, j'ai fini par trouver après une journée de ramage intensif :

    En fait, je récupérais cet attribut et j'en faisais une copie implicite du type :

    Code :
    %log = $objet -> get_pathUnknownHashRef;
    Et donc, vu que la hashTable recevant l'attribut n'avait pas été Tie::RefHashée (du verbe Tie::Refhasher), il me transformait la clef en contexte de chaîne de caractères !

    Bon courage aux suivants, j'espère que ça aidera quelqu'un

    Mit'

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •