Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/01/2013, 15h05   #1
Bundy*Al
Membre du Club
 
Inscription : juin 2007
Messages : 90
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 90
Points : 44
Points : 44
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:
Citation:
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:
Citation:
HASH(0x293F0d8)
Je ne sais pas comment faire pour connaitre le contenu de cette variable.

Avez-vous une idée?

Merci.
Bundy*Al est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 19h01   #2
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 569
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 : 569
Points : 1 119
Points : 1 119
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.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 01h03   #3
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 569
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 : 569
Points : 1 119
Points : 1 119
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.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 09h17   #4
Bundy*Al
Membre du Club
 
Inscription : juin 2007
Messages : 90
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 90
Points : 44
Points : 44
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.
Bundy*Al est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h02.


 
 
 
 
Partenaires

Hébergement Web