Bonjour,
Question bête :
à partir d'une liste my @liste = qw / a b c d/;comment créer le hash suivant $hash->{a}{b}{c}{d} = undef;?
Bonjour,
Question bête :
à partir d'une liste my @liste = qw / a b c d/;comment créer le hash suivant $hash->{a}{b}{c}{d} = undef;?
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
La liste peut être de taille quelconque.
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Ce n'est pas "strictement" ce que tu veux (le undef est remplacé par un hash vide) :
(normal que j'arrive plus à utiliser les boutons d'édition de message, par exemple pour la balise CODE ?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $ perl -E 'my @liste = qw /a b c d/;my %hash;my $hash = \%hash;foreach my $level (@liste) { $hash->{$level} = {}; $hash = $hash->{$level} };use Data::Dumper; say Data::Dumper->Dump([\%hash],[qw(*hash)])' %hash = ( 'a' => { 'b' => { 'c' => { 'd' => {} } } } );
Hum, réponse pas très propre (et pas testée)...
Bon, finalement, un petit test sous le debugger:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 my @liste = qw / a b c d/; @liste = map { "{$_}"} @liste; my $string = join '', '$hash->', @liste, " = undef"; eval $string;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 x $hash 0 HASH(0x8032f028) 'a' => HASH(0x80431588) 'b' => HASH(0x804315b8) 'c' => HASH(0x804315e8) 'd' => undef
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Taisha:~/tttmp $ perl -MData::Dumper -e 'sub to_hash { my $c; $c = { $_ => $c } for reverse @_; $c }; print Dumper(to_hash(qw(a b c d)))' $VAR1 = { 'a' => { 'b' => { 'c' => { 'd' => undef } } } }; Taisha:~/tttmp $
Merci à vous trois.
@philou, ce code peut toujours servir pour réutiliser ton code au niveau des sommaire en partant d'un hash!
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
variante sans reverse
variante récursive (ma préférée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Taisha:~/tttmp $ perl -MData::Dumper -e 'sub to_hash { my $c = undef; $c = { pop @_ => $c } while @_; $c } print Dumper(to_hash(qw(a b c d)))' $VAR1 = { 'a' => { 'b' => { 'c' => { 'd' => undef } } } }; Taisha:~/tttmp $)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Taisha:~/tttmp $ perl -MData::Dumper -E 'sub to_hash { @_ ? { shift(@_) => to_hash(@_) } : undef } say Dumper(to_hash(qw(a b c d)))' $VAR1 = { 'a' => { 'b' => { 'c' => { 'd' => undef } } } }; Taisha:~/tttmp $
j'ai changé d'avis, je préfère celle là (récursive aussi) :
Mais attention, elle ne supporte pas 0 comme clé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Taisha:~/tttmp $ perl -MData::Dumper -E 'sub to_hash { $_[0] && { shift(@_) => to_hash(@_) } } say Dumper(to_hash(qw(a b c d)))' $VAR1 = { 'a' => { 'b' => { 'c' => { 'd' => undef } } } }; Taisha:~/tttmp $
en fait la version suivante serait plus robuste mais malheureusement la feuille produite contient 0 et non undef...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Taisha:~/tttmp $ perl -MData::Dumper -E 'sub to_hash { $_[0] && { shift(@_) => to_hash(@_) } } say Dumper(to_hash(qw(a 0 c d)))' $VAR1 = { 'a' => '0' }; Taisha:~/tttmp $
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Taisha:~/tttmp $ perl -MData::Dumper -E 'sub to_hash { @_ && { shift(@_) => to_hash(@_) } } say Dumper(to_hash(qw(a 0 c d)))' C-c C-z $VAR1 = { 'a' => { '0' => { 'c' => { 'd' => 0 } } } }; Taisha:~/tttmp $
Partager