[Perl] Question sur les Hash/keys

Résolu/Fermé
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 - Modifié par KuKrApOk59 le 14/04/2010 à 15:28
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 - 16 mars 2009 à 23:33
Bonjour,

Je précise tout d'abord, que je suis plutôt débutant niveau Perl, soyez indulgents ;)
Je suis en train de scripter un petit bout de Perl avec des Hash de ce type :

$HASH{'Clef1'}{'ClefA'} = "valeur1"; 
$HASH{'Clef1'}{'ClefB'} = "valeur2"; 
$HASH{'Clef1'}{'ClefC'} = "valeur3"; 

$HASH{'Clef2'}{'ClefA'} = "valeur4"; 
$HASH{'Clef2'}{'ClefB'} = "valeur5"; 
$HASH{'Clef2'}{'ClefC'} = "valeur6";

J'aimerai acceder à mes valeurs
J'arrive à recuperer Clef1 et Clef2 en faisant

foreach (keys(%HASH)) { 
  print $_."<br>"; 
}

Mon but serait de recuperer ClefA ClefB ClefC
Je ne trouve pas comment faire un keys de keys pour avoir cette (en l'occurence ces) valeurs

J'espère que vous pourrez éclairer ma lanterne !

Si vous avez votre réponse, pensez à spécifier : [Résolu]

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
16 mars 2009 à 23:21
Salut,
Je n'ai pas tout compris ce que tu voulais, mais voici un code qui devrait t'aider. Avec ça, tu peux afficher tous les éléments.
for my $k1 (keys %HASH) {
    for my $k2 (keys %{ $HASH{$k1} }) {
        print "$k1 $k2 $HASH{$k1}{$k2}\n";
    }   
}

Cdlt
0
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 84
16 mars 2009 à 23:33
Merci

J'ai fini par me rendre compte qua la syntaxe pour trouver les clefs d'une clefs est un peu particuliere

Pour faire avancer le truc et partager, voici mon code, avec le resultat de sortie
KuK@Nibbler:~$ cat ccm.pl 
#!/usr/bin/perl

$HASH  = ();

$HASH{'Clef1'}{'ClefA'} = "valeur1";
$HASH{'Clef1'}{'ClefB'} = "valeur2";
$HASH{'Clef1'}{'ClefC'} = "valeur3";

$HASH{'Clef2'}{'ClefA'} = "valeur4";
$HASH{'Clef2'}{'ClefB'} = "valeur5";
$HASH{'Clef2'}{'ClefC'} = "valeur6";

foreach (sort keys(%HASH)) {
  print $_." => ";
    foreach (sort keys %{$HASH{$_}}) {
      print $_." ";
    }
  print "\n";   
}

Résultat en sortie :
KuK@Nibbler:~$ ./ccm.pl 
Clef1 => ClefA ClefB ClefC 
Clef2 => ClefA ClefB ClefC 

Y'a probablement mieux, mais en tout cas j'obtiens ce que je voulais ^^
0