[Perl] multi hash

Nicolas GEORGES xlat at cpan.org
Jeu 1 Nov 06:49:22 CET 2018


Salut,

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.
Tu devrais utiliser "use strict; use warnings;" pour y voir plus clair.

Le jeu. 1 nov. 2018 03:17, Patrick Dupre <pdupre at gmx.com> a écrit :

> OK,
>
> Je vais regarder.
> Mais, il y a quelque chose que je ne comprends pas dans ce que j'ai ecris.
> Pourqoui $nb n'ai pas passe dans l'appel ?
>
> #!/usr/bin/perl
>
> sub multi {
>   my ($hoh, $nb) = @_ ;
> print "nb: $$nb\n" ;
>   if (ref ($hoh) eq "HASH") {
> $$nb++ ;
>     foreach my $i (keys %{$hoh}) {
> print "i: $i, $$nb\n" ;
>       multi (%{$hoh {$i}}, $nb) ;
>       }
> print "HAH\n" ;
>     }
>   else {
>     return ;
>     }
>   }
>
> my %hash0 ;
>
> my %hash1 ;
> $hash1 {A} = 1 ;
> $hash1 {B} = 2 ;
>
> my %hash2 ;
> $hash2 {A} {a} = 1 ;
> $hash2 {A} {b} = 2 ;
> $hash2 {B} {a} = 3 ;
> $hash2 {B} {b} = 4 ;
>
> my $nb = 0 ;
>
> multi (\%hash0, \$nb) ;
> print "0: $nb\n" ;
>
> $nb = 0 ;
> multi (\%hash1, \$nb) ;
> print "1: $nb\n" ;
>
> #my $nb = multi (\%hash2, 0) ;
> #print "$nb\n" ;
>
>
> ===========================================================================
>  Patrick DUPRÉ                                 | | email: pdupre at gmx.com
>  Laboratoire de Physico-Chimie de l'Atmosphère | |
>  Université du Littoral-Côte d'Opale           | |
>  Tel.  (33)-(0)3 28 23 76 12                   | | Fax: 03 28 65 82 44
>  189A, avenue Maurice Schumann                 | | 59140 Dunkerque, France
> ===========================================================================
>
>
> > Sent: Thursday, November 01, 2018 at 3:10 AM
> > From: "Pau Amma" <pauamma at gundo.com>
> > To: perl <perl at mongueurs.net>
> > Subject: Re: [Perl] multi hash
> >
> > > my %hash1 ;
> > > $hash {A} = 1 ;
> > > $hash {B} = 2 ;
> > >
> > > my %hash2 ;
> > >
> > > $hash {A} {b} = 2 ;
> > > $hash {B} {a} = 3 ;
> > > $hash {B} {b} = 4 ;
> > >
> > > my $nb = multi (\%hash1, 0) ;
> > > print "$nb\n" ;
> > >
> > > my $nb = multi (\%hash2, 0) ;
> > > print "$nb\n" ;
> > >
> > > Il faudrait renvoyer 1 pour le 1ier cas et 2 pour le second
> >
> > OK, ça ressemble à la  profondeur (aussi appelée hauteur). Y a-t-il une
> > raison de ne pas utiliser (par exemple) Tree::Simple et sa méthode
> > getHeight? (cf https://metacpan.org/pod/Tree::Simple#Accessor-Methods)
> >
> > > > J'ai construis des multi hassh (HoHoHoH...)
> > > > dont je voudrais connaitre le nombre de hash.
> > >
> > > La question me parait un peu vague: s'agit il du nombre de feuilles de
> > > l'arbre (car c'en est un, en fin de compte)? du nombre total de noeuds?
> > > de la profondeur de l'arbre?
> >
> > _______________________________________________
> > Perl mailing list
> > Perl at mongueurs.net
> > http://listes.mongueurs.net/mailman/listinfo/perl
> > Attention, les archives sont publiques
> >
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
> Attention, les archives sont publiques
>
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/archives/perl/attachments/20181101/208872ef/attachment.html>


Plus d'informations sur la liste de diffusion Perl