IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

Utilisation de Tie::RefHash et Moose


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 17
    Points
    17
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 17
    Points
    17
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    %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.

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/01/2015, 16h22
  2. utilisation du builder dans Moose
    Par vidici dans le forum Modules
    Réponses: 1
    Dernier message: 23/09/2014, 13h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo