Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1141 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Problème de hachage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de hachage

n°1799742
seb-info
Posté le 13-10-2008 à 22:19:40  profilanswer
 

Bonjour, j'ai un problème avec ce script tout bidon pour m'entraîner aux hachages. Je n'obtiens pas de résultat j'ai l'erreur suivante :
 

Code :
  1. Global symbol "%hashe" requires explicit package name at C:\Perl\Exercice.PL line 65.
  2. Global symbol "%hashe" requires explicit package name at C:\Perl\Exercice.PL line 66.
  3. Execution of C:\Perl\Exercice.PL aborted due to compilation errors.


 
Voilà le script :
 

Code :
  1. sub hash {
  2. my $i;
  3. for ($i=1; $i<4; $i++) {
  4. print 'entrer les valeurs nom, prénom, age de votre enregistrement', "\n";
  5. my $nom =<>;
  6. my $prenom=<>;
  7. my $age=<>;
  8. chomp($nom);
  9. chomp($prenom);
  10. chomp($age);
  11. my %hashe = ("$nom" => ["$prenom", "$age"]);
  12. }
  13. print "entrer le nom de la personne a afficher\n";
  14. my $search=<>; chomp($search);
  15. #print "$hashe{alain}";
  16. #print "$hashe{$search}";
  17. my $key;
  18. my $val;
  19. foreach $key (sort keys %hashe) { # <== ligne 65
  20. $val = $hashe{$key};                   # <== ligne 66
  21. print "Key $key has value $val\n";
  22. }
  23. }


 
Si quelqu'un peut me mettre sur la voie et me dire ou est le problème.

mood
Publicité
Posté le 13-10-2008 à 22:19:40  profilanswer
 

n°1799764
Taz
bisounours-codeur
Posté le 13-10-2008 à 23:44:05  profilanswer
 

hashe est déclaré dans la boucle

n°1800133
seb-info
Posté le 14-10-2008 à 18:20:21  profilanswer
 

Merci Taz ça a résolu le problème seulement l'affichage m'indique une référence vers la valeur apparemment. J'obtiens sur le print : ARRAY (0x2247FFF) alors que je voudrais retourner les valeurs de la clé ...
 
Voila le code :  
 

Code :
  1. sub hash {
  2. my $i;
  3. my %hashe;
  4. for ($i=1; $i<4; $i++) {
  5. print 'entrer les valeurs nom, prénom, age de votre enregistrement', "\n";
  6. my $nom =<>;
  7. my $prenom=<>;
  8. my $age=<>;
  9. chomp($nom);
  10. chomp($prenom);
  11. chomp($age);
  12. %hashe = ("$nom" => ["$prenom", "$age"]);
  13. }
  14. print "entrer le nom de la personne a afficher\n";
  15. my $search=<>; chomp($search);
  16. print "Les informations sur $search sont : $hashe{$search}";
  17. }


Message édité par seb-info le 14-10-2008 à 18:21:36
n°1800155
gilou
Modérateur
Modzilla
Posté le 14-10-2008 à 19:23:41  profilanswer
 

C'est logique, car tu fais:

Citation :

("$nom" => ["$prenom", "$age"])


Donc $hashe{$nom} te renvoie la valeur de ["$prenom", "$age"], une reference a un array anonyme, d'ou ton ARRAY quand tu fais un print.
A+,


Message édité par gilou le 14-10-2008 à 19:24:02

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1800217
seb-info
Posté le 14-10-2008 à 23:04:59  profilanswer
 

Je saisie pas ... pourquoi tu parles de array anonyme ? Les variables ("$nom" => ["$prenom", "$age"]) sont bien interprétées ?

n°1800239
Taz
bisounours-codeur
Posté le 15-10-2008 à 00:04:52  profilanswer
 

et ? [] c'est quand même une référence à un array anonyme

n°1800361
matafan
Posté le 15-10-2008 à 11:36:43  profilanswer
 

Si tu veux le tableau plutôt que ça référence, il faut... Déréférencer : @{$hashe{$search}}. Si tu veux accéder à un élément du tableau tu peux aussi faire $hashe{$search}->[0], qui est équivalent à @{$hashe{$search}}[0].
 
Edit : et aussi tant que j'y suis, dans ta boucle à chaque passage tu écrases %hashe, alors que ce que tu veux, je suppose, c'est ajouter un élément au hash. Il faudrait plutôt faire $hashe{$nom} = ["$prenom", "$age"].


Message édité par matafan le 15-10-2008 à 11:39:12
n°1800408
gilou
Modérateur
Modzilla
Posté le 15-10-2008 à 12:15:48  profilanswer
 

C'est pas juste, tu lui indique d'un coup les problemes majeurs de son code (ca sautait aux yeux a la premiere lecture, hein), alors qu'on pouvait laisser mijoter ce script toute la semaine :/
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1800434
matafan
Posté le 15-10-2008 à 12:58:56  profilanswer
 

Ben ouais je suis comme ça moi, je casse les jouets des autres :P

n°1800735
seb-info
Posté le 15-10-2008 à 21:33:22  profilanswer
 

lool gilou je pense que ça aurai pu même mijoter plus que ça si je comptais seulement sur moi. Mais bon ya les forums et les relations. Je pense que l'aide et les exemples sont les meilleurs moyens d'apprendre.
 
Alors merci matafan et pas très cool gilou sur ce coup là ... à quoi aurai servi de laisser "mijoter" le script une semaine ?
 
Sinon une autre question vu que y'avait pas mal d'erreur  :heink: est ce que c'est "propre" d'écrire un hachage comme je l'ai fait ?

Message cité 1 fois
Message édité par seb-info le 15-10-2008 à 21:40:03
mood
Publicité
Posté le 15-10-2008 à 21:33:22  profilanswer
 

n°1800745
matafan
Posté le 15-10-2008 à 21:53:39  profilanswer
 

Oui c'est propre, c'est même tout à fait classique.

n°1800762
seb-info
Posté le 15-10-2008 à 22:24:40  profilanswer
 

Ok ! Merci !

n°1800799
gilou
Modérateur
Modzilla
Posté le 15-10-2008 à 23:15:03  profilanswer
 

seb-info a écrit :

Alors merci matafan et pas très cool gilou sur ce coup là ... à quoi aurai servi de laisser "mijoter" le script une semaine ?

A te faire progresser pas a pas dans la compréhension de ce qui n'allait pas dans ton script, alors qu'une solution prête a l'emploi risque fort de ne pas améliorer tes connaissances en perl.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1801117
seb-info
Posté le 16-10-2008 à 19:23:58  profilanswer
 

Je pense pas que ça soit plus profitable au contraire. Se butter sur quelque chose sans parvenir à ses fins je trouve ça plutôt décourageant et puis il y a certaine personnes ( comme moi :D ) qui ont besoin qu'on leur montre une fois pour ensuite assimiler. Je pense pas être le seul.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Problème de hachage

 

Sujets relatifs
probleme de regex[UNIX] Problème avec sed
problème de déploiementvbscript - probleme de copie de fichier
Probleme en programmatio,problème sur un template
Passage de PHP4 a PHP5 problème de conditionProblème d'affichage d'un menu en CSS (résolu)
probleme macro excelprobleme table de hachage dans requete find
Plus de sujets relatifs à : Problème de hachage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR