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

Langage Perl Discussion :

Moose et Hashref


Sujet :

Langage Perl

  1. #1
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut Moose et Hashref
    Bonjour,

    Je commence à utiliser Moose (enfin), mais je bloque sur l'utilisation des hash et donc des hashref si j'ai bien compris, passage obligé pour Moose.

    Voici un exemple qui bug à la dernière ligne car il boucle sur du vide et me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't use an undefined value as a HASH reference at Pat.pm line 19.
    Voici le main suivi de Pat.pm
    Il commence par un simple hash vide avec une boucle qui n'affiche rien, suivi du rempissage et d'une boucle qui fonctionne. Pour le test, je fais la meme chose avec un objet, que je commence par remplir pour vérifier qu'il affiche bien ce que je veux, mais si je boucle alors que le hash est vide il me donne le message indiqué ci-dessus.

    J'imagine que c'est un problème de hashref que j'utilise mal, mais voilà... les déréférencements, j'ai pas trop l'habitude.

    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
    #!/usr/bin/perl
    use Moose;
    use Pat;
    use v5.10;
     
    my %test;
     
    foreach my $obj (values(%test)) {
        say "vide ",$obj;
    }
    $test{1}=2;
    foreach my $obj (values(%test)) {
        say "fonctionne ",$obj;
    }
     
    my $pat=Pat->new();
    $pat->add(3,4);
    $pat->sout();
     
    $pat=Pat->new();
    $pat->sout();
    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
    use v5.10;
    package Pat;
    use Moose;
    use Smart::Comments;
    has 'el', is => 'rw', isa => 'HashRef[]';    # list of elements
    sub BUILD {
        my $self=shift;
    ### Build : $self
    }
    sub add {
        my $self=shift;
        my $key=shift;
        my $value=shift;
        $self->{el}{$key}=$value;
    ### Add : $self
    }
    sub sout {
        my $self=shift;
       foreach my $value (values (%{$self->el})) {
           say $value;
       }
    }
    return 1;

  2. #2
    Membre habitué

    Homme Profil pro
    Statisticien
    Inscrit en
    Novembre 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2010
    Messages : 122
    Points : 134
    Points
    134
    Par défaut
    PS : et pour m'en sortir pour l'instant, je fais
    avant le foreach

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Je ne connais pas bien Moose, et ne suis pas bien sûr de bien comprendre ce que tu cherches à faire, mais es-tu bien certain d'avoir besoin de définir 'el' comme un hash ref? De ce que j'en comprends, Moose crée tes objets comme des hash refs, mais cela est transparent pour l'utilisateur qui n'utilise habituellement dans le module que les attributs de l'objet et à l'extérieur du module que les méthodes de la classe.

    Jette peut-être un coup d’œil au tutoriel de Djibril consacré à la POO:

    http://djibril.developpez.com/tutoriels/perl/poo/#LC-1

    qui contient un gros chapitre sur Moose.

Discussions similaires

  1. Module Moose - accesseur et mutateur
    Par tintin3158 dans le forum Langage
    Réponses: 13
    Dernier message: 31/12/2014, 07h33
  2. hash moose et reference
    Par vidici dans le forum Langage
    Réponses: 10
    Dernier message: 02/10/2014, 16h28
  3. recuperer la valeur d'une liste dans un objet moose
    Par vidici dans le forum Langage
    Réponses: 8
    Dernier message: 29/09/2014, 16h00
  4. utilisation du builder dans Moose
    Par vidici dans le forum Modules
    Réponses: 1
    Dernier message: 23/09/2014, 13h57
  5. Utilisation de Tie::RefHash et Moose
    Par Mithryl dans le forum Modules
    Réponses: 1
    Dernier message: 13/06/2012, 09h03

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