my $refvar;
my %var;
foreach $refvar (@TabVars) {
my %h2 = %$refvar;
print "$h2{Valeur} : $h2{Type}\n";
}
@TabVars étant le tableau dont chaque case contient un hash (avec à chaque fois les mêmes clé valeur.
(J'aimerai éviter de faire une table de hash de table de hash, cette structure est claire).
Le problème est qu'il ne m'affiche rien. Cette structure est-elle correcte ?
Si oui, serait-ce le code affectant cette liste qui serait faux ?
%structvar = {"Type" => renvoiType($typinfo),
"Valeur" => $valeur};
push(@TabVars,%structvar);
Merci !
# Trouvé
Posté par Ontologia (site web personnel) . Évalué à 2.
En fait, c'était mon affectation qui n'était pas bonne(mal appliqué la doc).
Il fallait faire :
$tmp =renvoiType($typinfo);
$structvar{Type} = $tmp;
$structvar{Valeur} =$valeur;
Le foreach est donc valide, je pensais au départ que c'était ça.
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Trouvé
Posté par duaner . Évalué à 3.
Ceci est une horreur, ca "marche" mais ce que tu fais exactement est :
- Créer un hash structvar, avec un seul element donc la clé est une référence vers un hash anonyme, stringifiée, et la valeur est indéfinie, donc concrement:
$structvar{'HASH(0x12345678)'} = undef
- Rajouter ce hash à un tableau, ce qui fait que ton @TabVars contient maintenant : ('HASH(0x12345678)', undef).
Une référence est une valeur scalaire, donc il faut l'utiliser dans le bon contexte:
$structvar = { .... };
push(@TabVars, $structvar);
foreach my $ref (@TabVars) {...}
Je ne suis pas sur de la doc sur laquelle tu t'as basé, mais utilise plutot:
perldoc perlref
perldoc perlreftut
perldoc perldsc
perldoc perllol
Tout y est, sans erreur :)
[^] # Re: Trouvé
Posté par Ontologia (site web personnel) . Évalué à 2.
Les man perl* sont quasiment illisible, c'est l'horreur pour trouver une information exploitable, comme pour quasiment tous les man d'ailleurs...
$structvar = { .... };
Comment ça peut être un scalaire puisque c'est une hashtable ? Il devait y avir erreur de typage non ?
« Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker
[^] # Re: Trouvé
Posté par duaner . Évalué à 3.
Un hash s'initialiser au moyen d'une liste, tu verras d'ailleurs dans la doc que => est un synonyme pour "," (a une difference pret). Donc:
%hash = (a => 1, b => 2) -> BIEN
%hash = ('a', 1, 'b', 2) -> BIEN
$hash = {a => 1, b => 2} -> BIEN
%hash = { a => 1, b => 2} -> BAD!EVIL!NOCOOKIE!
Voila
# tableau de hash
Posté par nanard . Évalué à 1.
print $tab[0]{un}."\n";
affiche: "test1"
print $tab[2][2]."\n";
affiche "une troisieme".
Maintenant dans ton cas precis, ca fait trop longtemp que j'ai plus fais joujou avec les references et deferencement en PERL, pour voir ou le bat blésse.
Allez tous vous faire spéculer.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.