Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre du Club
    Homme Profil pro
    testeur logiciel
    Inscrit en
    juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : Santé

    Informations forums :
    Inscription : juin 2007
    Messages : 104
    Points : 60
    Points
    60

    Par défaut Problème de compréhension avec un HASH

    Bonjour,

    Je suis nouveau sur Perl et j'ai du mal à comprendre ce code.

    Ci-dessous l'appel de la fonction que je souhaite utiliser:

    Code :
    Bugzilla::Hook::process('bug_end_of_create_validators', { params => $params });
    Ci-dessous la fonction en question:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    sub bug_end_of_create_validators {
        my ($self, $args) = @_;
     
        # This code doesn't actually *do* anything, it's just here to show you
        # how to use this hook.
        my $bug_params = $args->{'params'};
     
        # Uncomment this line below to see a line in your webserver's error log
        # containing all validated bug field values every time you file a bug.
        # warn Dumper($bug_params);
     
        # This would remove all ccs from the bug, preventing ANY ccs from being
        # added on bug creation.
        # $bug_params->{cc} = [];
    }
    Si dans cette fonction je fais:
    J'obtiens:
    HASH(0x293F0d8)
    J'en conclu donc que c'est un HASH mais je ne sais pas ce qu'il contient.

    En m'aidant de la FAQ je fais:
    Code :
    1
    2
    3
    4
    	foreach my $clef ( keys %bug_params )
    	{
    		print "$clef : $bug_params{$clef}\n";
    	}
    Mais j’obtiens toujours:
    HASH(0x293F0d8)
    Je ne sais pas comment faire pour connaitre le contenu de cette variable.

    Avez-vous une idée?

    Merci.

  2. #2
    Membre Expert

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 : 1 145
    Points : 2 293
    Points
    2 293

    Par défaut

    C'est une référence à un hash.

    Tu peux utiliser le module Data:umper pour voir le contenu:

    Code :
    1
    2
    3
    4
    5
    use Data::Dumper;
     
    # ...
     
    print Dumper $bug_params;


    Ou, sous le debugger, "x $bug_params".

    Ou, sinon, il faut déreférencer la référence avec le sigil %devant le signil $.

    EDIT: j'ai oublié de préciser le plus important: compte tenu du contexte (utilisation de module), il y a certainement une méthode pour accéder à tes données, et c'est certainement la meilleure solution.
    Mes articles sur ce site: La programmation fonctionnelle en Perl - Partie 1: les opérateurs de liste et La programmation fonctionnelle en Perl - Partie 2: les fonctions d'ordre supérieur
    ______

    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  3. #3
    Membre Expert

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 : 1 145
    Points : 2 293
    Points
    2 293

    Par défaut

    Citation Envoyé par Bundy*Al Voir le message

    J'en conclu donc que c'est un HASH mais je ne sais pas ce qu'il contient.

    En m'aidant de la FAQ je fais:
    Code :
    1
    2
    3
    4
    	foreach my $clef ( keys %bug_params )
    	{
    		print "$clef : $bug_params{$clef}\n";
    	}
    Comme c'est une référence sur un hash, tu dois simplement changer ton code comme suit (par exemple):

    Code :
    1
    2
    3
    4
    	foreach my $clef ( keys %$bug_params )
    	{
    		print "$clef : $$bug_params{$clef}\n";
    	}
    Mais encore une fois, il y a certainement une méthode d'accès à tes données.
    Mes articles sur ce site: La programmation fonctionnelle en Perl - Partie 1: les opérateurs de liste et La programmation fonctionnelle en Perl - Partie 2: les fonctions d'ordre supérieur
    ______

    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  4. #4
    Membre du Club
    Homme Profil pro
    testeur logiciel
    Inscrit en
    juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : Santé

    Informations forums :
    Inscription : juin 2007
    Messages : 104
    Points : 60
    Points
    60

    Par défaut

    Merci pour ces explications, je serai comment afficher une référence à un hash maintenant.
    Oui j'ai finalement réussi a accéder aux données par un autre moyen qui finalement est beaucoup plus simple.

+ 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
  •