<div dir="auto"><div>Salut,</div><div dir="auto"><br></div><div dir="auto">Dans l'appel récursif, tu déréférences la hash créé a la volée, càd que %hoh n'est pas défini et au final tu passes une hash et non une référence de hash ce qui va chambouler tes arguments.</div><div dir="auto">Tu devrais utiliser "use strict; use warnings;" pour y voir plus clair.<br><br><div class="gmail_quote" dir="auto"><div dir="ltr">Le jeu. 1 nov. 2018 03:17, Patrick Dupre <<a href="mailto:pdupre@gmx.com">pdupre@gmx.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">OK,<br>
<br>
Je vais regarder.<br>
Mais, il y a quelque chose que je ne comprends pas dans ce que j'ai ecris.<br>
Pourqoui $nb n'ai pas passe dans l'appel ?<br>
<br>
#!/usr/bin/perl<br>
<br>
sub multi {<br>
my ($hoh, $nb) = @_ ;<br>
print "nb: $$nb\n" ;<br>
if (ref ($hoh) eq "HASH") {<br>
$$nb++ ;<br>
foreach my $i (keys %{$hoh}) {<br>
print "i: $i, $$nb\n" ;<br>
multi (%{$hoh {$i}}, $nb) ;<br>
}<br>
print "HAH\n" ;<br>
}<br>
else {<br>
return ;<br>
}<br>
}<br>
<br>
my %hash0 ;<br>
<br>
my %hash1 ;<br>
$hash1 {A} = 1 ;<br>
$hash1 {B} = 2 ;<br>
<br>
my %hash2 ;<br>
$hash2 {A} {a} = 1 ;<br>
$hash2 {A} {b} = 2 ;<br>
$hash2 {B} {a} = 3 ;<br>
$hash2 {B} {b} = 4 ;<br>
<br>
my $nb = 0 ;<br>
<br>
multi (\%hash0, \$nb) ;<br>
print "0: $nb\n" ;<br>
<br>
$nb = 0 ;<br>
multi (\%hash1, \$nb) ;<br>
print "1: $nb\n" ;<br>
<br>
#my $nb = multi (\%hash2, 0) ;<br>
#print "$nb\n" ;<br>
<br>
<br>
===========================================================================<br>
Patrick DUPRÉ | | email: <a href="mailto:pdupre@gmx.com" target="_blank" rel="noreferrer">pdupre@gmx.com</a><br>
Laboratoire de Physico-Chimie de l'Atmosphère | |<br>
Université du Littoral-Côte d'Opale | |<br>
Tel. (33)-(0)3 28 23 76 12 | | Fax: 03 28 65 82 44<br>
189A, avenue Maurice Schumann | | 59140 Dunkerque, France<br>
===========================================================================<br>
<br>
<br>
> Sent: Thursday, November 01, 2018 at 3:10 AM<br>
> From: "Pau Amma" <<a href="mailto:pauamma@gundo.com" target="_blank" rel="noreferrer">pauamma@gundo.com</a>><br>
> To: perl <<a href="mailto:perl@mongueurs.net" target="_blank" rel="noreferrer">perl@mongueurs.net</a>><br>
> Subject: Re: [Perl] multi hash<br>
><br>
> > my %hash1 ;<br>
> > $hash {A} = 1 ;<br>
> > $hash {B} = 2 ;<br>
> ><br>
> > my %hash2 ;<br>
> ><br>
> > $hash {A} {b} = 2 ;<br>
> > $hash {B} {a} = 3 ;<br>
> > $hash {B} {b} = 4 ;<br>
> ><br>
> > my $nb = multi (\%hash1, 0) ;<br>
> > print "$nb\n" ;<br>
> ><br>
> > my $nb = multi (\%hash2, 0) ;<br>
> > print "$nb\n" ;<br>
> ><br>
> > Il faudrait renvoyer 1 pour le 1ier cas et 2 pour le second<br>
> <br>
> OK, ça ressemble à la profondeur (aussi appelée hauteur). Y a-t-il une<br>
> raison de ne pas utiliser (par exemple) Tree::Simple et sa méthode<br>
> getHeight? (cf <a href="https://metacpan.org/pod/Tree::Simple#Accessor-Methods" rel="noreferrer noreferrer" target="_blank">https://metacpan.org/pod/Tree::Simple#Accessor-Methods</a>)<br>
> <br>
> > > J'ai construis des multi hassh (HoHoHoH...)<br>
> > > dont je voudrais connaitre le nombre de hash.<br>
> ><br>
> > La question me parait un peu vague: s'agit il du nombre de feuilles de<br>
> > l'arbre (car c'en est un, en fin de compte)? du nombre total de noeuds?<br>
> > de la profondeur de l'arbre?<br>
> <br>
> _______________________________________________<br>
> Perl mailing list<br>
> <a href="mailto:Perl@mongueurs.net" target="_blank" rel="noreferrer">Perl@mongueurs.net</a><br>
> <a href="http://listes.mongueurs.net/mailman/listinfo/perl" rel="noreferrer noreferrer" target="_blank">http://listes.mongueurs.net/mailman/listinfo/perl</a><br>
> Attention, les archives sont publiques<br>
><br>
_______________________________________________<br>
Perl mailing list<br>
<a href="mailto:Perl@mongueurs.net" target="_blank" rel="noreferrer">Perl@mongueurs.net</a><br>
<a href="http://listes.mongueurs.net/mailman/listinfo/perl" rel="noreferrer noreferrer" target="_blank">http://listes.mongueurs.net/mailman/listinfo/perl</a><br>
Attention, les archives sont publiques<br>
</blockquote></div></div></div>