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 :

Hachage de hachages : odd number of elements


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Par défaut Hachage de hachages : odd number of elements
    Salut à tous,
    Dans le cadre d'une appli que je suis en train de développer, je susi tombé sur un drôle de problème, dont j'ai tenté de reproduire ici l'essence.

    Voici un exemple minimal :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    sub new ()
    {
        my %hdhReturn;
        $hdhReturn{"lvl_1"}{'lvl_1->lvl_2'} = "Feuille";
        return %hdhReturn;
    }
     
    sub utiliseHdH(%)
    {
        my %hdh = shift;
    }
     
    ######################
    # MAIN               #
    ######################
     
    my %hdh = new();
    afficheHdH(%hdh);
    Mon problème est que j'ai un hachage de hachages et que je ne sais pas trop comment les utiliser, car apparemment le nombre d'éléments de ce hachage de hachages est impair, et au passage d'arguments ça coince. La structure de ce HdH est d'ailleurs changée par passage en argument.

    À l'exécution ça me donne :
    Citation Envoyé par Compilo Perl
    Odd number of elements in hash assignment at 03-hachages.pl line 16.
    ... la ligne 16 étant la récupération du hachage dans la méthode utiliseHdH(%).

    Si vous aviez une piste quelconque pour le passage de HdH en argument...
    Merci d'avance !

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Je pense que tu dois passer une référence à ton sous-programme.

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use Data::Dumper;
     
    sub new
    {
        my %hdhReturn;
        $hdhReturn{"lvl_1"}{'lvl_1->lvl_2'} = "Feuille";
        $hdhReturn{"lvl_1"}{'lvl_1->lvl_3'} = "Feuille";
        return %hdhReturn;
    }
     
    sub utiliseHdH
    {
        my $ref_hdh = $_[0];
        print Dumper %{$ref_hdh};
    }
     
    ######################
    # MAIN               #
    ######################
     
     
    my %hdh = new();
    utiliseHdH(\%hdh);

  3. #3
    Membre éclairé
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Par défaut
    Ah voilà, je pense qu'effectivement des références seraient bien ; par contre, voici ce que ça me donne si je passe en argument \%hdh au lieu de %hdh :
    Reference found where even-sized list expected at 03-hachages.pl line 17.
    Normal tu penses ?

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Je ne sais pas, je n'ai pas ce problème chez moi. N'as-tu rien changé au code?
    Tu ne dois pas mettre le (%) devant sub utiliseHdH

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Voilà quelque chose de propre
    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
    33
    34
    35
    #!/usr/bin/perl
    use strict;
    use Carp;
    use warnings;
     
     
    ######################
    # MAIN               #
    ######################
     
     
    my %hdh = new();
    utiliseHdH(\%hdh);
    <STDIN>;
     
    ######################
    # PROCEDURES         #
    ######################
     
    # Initialise mon hash
    sub new {
      my %hdhReturn = (
        "lvl_1" => {
          'lvl_1->lvl_2' => "Feuille",
        },
      );
     
      return %hdhReturn;
    }
     
    sub utiliseHdH {
        my ($RefHdhReturn) = @_;
     
        print "TEST : $RefHdhReturn->{lvl_1}{'lvl_1->lvl_2'}\n";
    }

  6. #6
    Membre éclairé
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Par défaut
    Exact Jasmine ! C'était bêtement ça. Merci beaucoup, cela fonctionne dans mon exemple ; reste plus qu'à l'intégrer dans mon projet

    Merci aussi djibril, en plus je ne connaissais pas ce Carp

    Sujet résolu, bonne journée !

  7. #7
    Membre éclairé
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Par défaut
    Je reviens à la charge !

    Cette histoire fonctionne donc parfaitement, pour les références tout fonctionne bien.

    Maintenant, mon programme mouline, et il appelle donc une bonne quantité de fois les méthodes qui créent le fameux hachage, que je prends en référence. À la fin du traitement de chaque hachage, je le laisse de côté ; il doit donc normalement être détruit par le garbage collector, non ? Et dans l'itération suivante, je crée une nouvelle référence de hachage...

    Seulement voilà : aux itérations suivantes, la référence du nouveau hachage est choisie comme par hasard... égale à celle que j'ai créée auparavant !

    Connaissez-vous un bon moyen pour forcer la création dans une nouvelle zone mémoire, ou de forcer la destruction d'un hachage de hachages ? undef $maRefHachage ne donne rien de plus de ce côté...

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2009, 20h11
  2. probleme de suppression des element de la table de hachage
    Par étoile de mer dans le forum Débuter
    Réponses: 16
    Dernier message: 06/10/2008, 13h44
  3. Réponses: 6
    Dernier message: 02/01/2008, 16h18
  4. hachage de hachage et possibilité
    Par mollux dans le forum Langage
    Réponses: 1
    Dernier message: 22/02/2006, 16h51
  5. Fonction de hachage
    Par killer crok dans le forum C
    Réponses: 12
    Dernier message: 02/10/2002, 09h48

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