Si tu veux du recursif, il faut des references de hash, *et* des references de liste [];
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans la reference: my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
et du coup, pour rajouter un d la ou tu voudrais, ca devient
push @{$tbl->{k1}{list}}, 'd';
In article <4fb696c3$0$1691$426a74cc@news.free.fr>,
Éric Lévénez <usenet@levenez.com> wrote:
Hi,
I wish I add an array in a hash table.
A hash is used to get a name using a key,
and another to access an array.
It purpuse of the example is :
. to add 'd' after 'c',
. to display all elements in arrays,
. empty the arrays.
The code bellow doesn't work at all :
#! /usr/bin/perl -w
my %tbl = (
k1 => { name => 'n1', list => ('a', 'b', 'c') },
k2 => { name => 'n2', list => () },
k3 => { name => 'n3', list => ('e') }
);
ben evidemment que ca marche pas. Tu ne peux mettre que des *scalaires*
dans des listes, ca va donc s'aplatir.
En plus simple:
use Data::Dumper;
my %tbl = ( k => (1, 2, 3) );
Si tu veux du recursif, il faut des references de hash, *et* des references
de liste [];
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans
la reference:
my $tbl = {
k1 => { name => 'n1', list => [qw(a b c)] },
k2 => { name => 'n2', list => [] },
k3 => { name => 'n3', list => [qw(e)] }
};
et du coup, pour rajouter un d la ou tu voudrais, ca devient
Si tu veux du recursif, il faut des references de hash, *et* des references de liste [];
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans la reference: my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
et du coup, pour rajouter un d la ou tu voudrais, ca devient
push @{$tbl->{k1}{list}}, 'd';
Éric Lévénez
Le 18/05/12 20:47, Marc Espie a écrit :
In article<4fb696c3$0$1691$, Éric Lévénez wrote:
Hi,
I wish I add an array in a hash table. A hash is used to get a name using a key, and another to access an array.
It purpuse of the example is : . to add 'd' after 'c', . to display all elements in arrays, . empty the arrays.
The code bellow doesn't work at all :
#! /usr/bin/perl -w my %tbl = ( k1 => { name => 'n1', list => ('a', 'b', 'c') }, k2 => { name => 'n2', list => () }, k3 => { name => 'n3', list => ('e') } );
ben evidemment que ca marche pas. Tu ne peux mettre que des *scalaires* dans des listes, ca va donc s'aplatir.
En plus simple: use Data::Dumper; my %tbl = ( k => (1, 2, 3) );
Si tu veux du recursif, il faut des references de hash, *et* des references de liste [];
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans la reference: my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
et du coup, pour rajouter un d la ou tu voudrais, ca devient
push @{$tbl->{k1}{list}}, 'd';
Je m'a gourré de ng, je pensais être sur l'anglais, mais c'est mieux ainsi :-)
Merci de ta réponse, ça m'avance, mais ça ne marche pas encore comme je le voudrais. Pas d'erreur de syntaxe, mais ça ne marche pas :
#! /usr/bin/perl -w use Data::Dumper;
my %tbl = ( k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } );
Le push ne semble rien faire, le premier Dumper affiche "a b c" mais pas "d".
La deuxième boucle foreach, affiche uniquement le "d". D'où vient-il si le Dumper ne l'a pas affiché ?
L'effacement de chaque liste dans la boucle ne semble pas marcher car le deuxième Dumper affiche aucun changement. Et si on refait la grande boucle foreach en fin de script, l'affichage n'est pas vide et se fait mal.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 18/05/12 20:47, Marc Espie a écrit :
In article<4fb696c3$0$1691$426a74cc@news.free.fr>,
Éric Lévénez<usenet@levenez.com> wrote:
Hi,
I wish I add an array in a hash table.
A hash is used to get a name using a key,
and another to access an array.
It purpuse of the example is :
. to add 'd' after 'c',
. to display all elements in arrays,
. empty the arrays.
The code bellow doesn't work at all :
#! /usr/bin/perl -w
my %tbl = (
k1 => { name => 'n1', list => ('a', 'b', 'c') },
k2 => { name => 'n2', list => () },
k3 => { name => 'n3', list => ('e') }
);
ben evidemment que ca marche pas. Tu ne peux mettre que des *scalaires*
dans des listes, ca va donc s'aplatir.
En plus simple:
use Data::Dumper;
my %tbl = ( k => (1, 2, 3) );
Si tu veux du recursif, il faut des references de hash, *et* des references
de liste [];
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans
la reference:
my $tbl = {
k1 => { name => 'n1', list => [qw(a b c)] },
k2 => { name => 'n2', list => [] },
k3 => { name => 'n3', list => [qw(e)] }
};
et du coup, pour rajouter un d la ou tu voudrais, ca devient
push @{$tbl->{k1}{list}}, 'd';
Je m'a gourré de ng, je pensais être sur l'anglais, mais c'est mieux
ainsi :-)
Merci de ta réponse, ça m'avance, mais ça ne marche pas encore comme je
le voudrais. Pas d'erreur de syntaxe, mais ça ne marche pas :
#! /usr/bin/perl -w
use Data::Dumper;
my %tbl = (
k1 => { name => 'n1', list => [qw(a b c)] },
k2 => { name => 'n2', list => [] },
k3 => { name => 'n3', list => [qw(e)] }
);
Le push ne semble rien faire, le premier Dumper affiche "a b c" mais pas
"d".
La deuxième boucle foreach, affiche uniquement le "d". D'où vient-il si
le Dumper ne l'a pas affiché ?
L'effacement de chaque liste dans la boucle ne semble pas marcher car le
deuxième Dumper affiche aucun changement. Et si on refait la grande
boucle foreach en fin de script, l'affichage n'est pas vide et se fait mal.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Si tu veux du recursif, il faut des references de hash, *et* des references de liste [];
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans la reference: my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
et du coup, pour rajouter un d la ou tu voudrais, ca devient
push @{$tbl->{k1}{list}}, 'd';
Je m'a gourré de ng, je pensais être sur l'anglais, mais c'est mieux ainsi :-)
Merci de ta réponse, ça m'avance, mais ça ne marche pas encore comme je le voudrais. Pas d'erreur de syntaxe, mais ça ne marche pas :
#! /usr/bin/perl -w use Data::Dumper;
my %tbl = ( k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } );
Le push ne semble rien faire, le premier Dumper affiche "a b c" mais pas "d".
La deuxième boucle foreach, affiche uniquement le "d". D'où vient-il si le Dumper ne l'a pas affiché ?
L'effacement de chaque liste dans la boucle ne semble pas marcher car le deuxième Dumper affiche aucun changement. Et si on refait la grande boucle foreach en fin de script, l'affichage n'est pas vide et se fait mal.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
espie
In article <4fb6b540$0$6840$, Éric Lévénez wrote:
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans la reference: my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
et du coup, pour rajouter un d la ou tu voudrais, ca devient
push @{$tbl->{k1}{list}}, 'd';
Je m'a gourré de ng, je pensais être sur l'anglais, mais c'est mieux ainsi :-)
Merci de ta réponse, ça m'avance, mais ça ne marche pas encore comme je le voudrais. Pas d'erreur de syntaxe, mais ça ne marche pas :
#! /usr/bin/perl -w use Data::Dumper;
my %tbl = ( k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } );
my $key = 'k1';
push @{$tbl->{$key}{list}}, 'd';
Le push ne semble rien faire, le premier Dumper affiche "a b c" mais pas "d".
Ben deja, tu recopies de travers, ca va pas aider. J'ai bien dit "je mets des references partout"
En particulier, fais attention a $tbl = { ... }; qui "va" avec push @{$tbl->{$key}{list}}, 'd';
Si tu tiens absolument a ton %tbl = (); alors ca donne: push @{$tbl{$key}->{list}}, 'd';
Tu fais comme tu veux, mais pour un debutant, c'est plus simple de raisonner exclusivement avec "un" type de donnees, et donc de passer entierement sur des references.
In article <4fb6b540$0$6840$426a34cc@news.free.fr>,
Éric Lévénez <usenet@levenez.com> wrote:
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans
la reference:
my $tbl = {
k1 => { name => 'n1', list => [qw(a b c)] },
k2 => { name => 'n2', list => [] },
k3 => { name => 'n3', list => [qw(e)] }
};
et du coup, pour rajouter un d la ou tu voudrais, ca devient
push @{$tbl->{k1}{list}}, 'd';
Je m'a gourré de ng, je pensais être sur l'anglais, mais c'est mieux
ainsi :-)
Merci de ta réponse, ça m'avance, mais ça ne marche pas encore comme je
le voudrais. Pas d'erreur de syntaxe, mais ça ne marche pas :
#! /usr/bin/perl -w
use Data::Dumper;
my %tbl = (
k1 => { name => 'n1', list => [qw(a b c)] },
k2 => { name => 'n2', list => [] },
k3 => { name => 'n3', list => [qw(e)] }
);
my $key = 'k1';
push @{$tbl->{$key}{list}}, 'd';
Le push ne semble rien faire, le premier Dumper affiche "a b c" mais pas
"d".
Ben deja, tu recopies de travers, ca va pas aider.
J'ai bien dit "je mets des references partout"
En particulier, fais attention a
$tbl = { ... };
qui "va" avec
push @{$tbl->{$key}{list}}, 'd';
Si tu tiens absolument a ton
%tbl = ();
alors ca donne:
push @{$tbl{$key}->{list}}, 'd';
Tu fais comme tu veux, mais pour un debutant, c'est plus simple de raisonner
exclusivement avec "un" type de donnees, et donc de passer entierement sur
des references.
En general, pour pas s'embrouiller les pinceaux, on fait uniquement dans la reference: my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
et du coup, pour rajouter un d la ou tu voudrais, ca devient
push @{$tbl->{k1}{list}}, 'd';
Je m'a gourré de ng, je pensais être sur l'anglais, mais c'est mieux ainsi :-)
Merci de ta réponse, ça m'avance, mais ça ne marche pas encore comme je le voudrais. Pas d'erreur de syntaxe, mais ça ne marche pas :
#! /usr/bin/perl -w use Data::Dumper;
my %tbl = ( k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } );
my $key = 'k1';
push @{$tbl->{$key}{list}}, 'd';
Le push ne semble rien faire, le premier Dumper affiche "a b c" mais pas "d".
Ben deja, tu recopies de travers, ca va pas aider. J'ai bien dit "je mets des references partout"
En particulier, fais attention a $tbl = { ... }; qui "va" avec push @{$tbl->{$key}{list}}, 'd';
Si tu tiens absolument a ton %tbl = (); alors ca donne: push @{$tbl{$key}->{list}}, 'd';
Tu fais comme tu veux, mais pour un debutant, c'est plus simple de raisonner exclusivement avec "un" type de donnees, et donc de passer entierement sur des references.
Éric Lévénez
Le 18/05/12 22:57, Marc Espie a écrit :
Ben deja, tu recopies de travers, ca va pas aider.
Sûr :-)
J'ai bien dit "je mets des references partout"
Sûrement.
En particulier, fais attention a $tbl = { ... }; qui "va" avec push @{$tbl->{$key}{list}}, 'd';
Si tu tiens absolument a ton %tbl = (); alors ca donne: push @{$tbl{$key}->{list}}, 'd';
Tu fais comme tu veux, mais pour un debutant, c'est plus simple de raisonner exclusivement avec "un" type de donnees, et donc de passer entierement sur des references.
Voilà le programme corrigé qui marche :
#! /usr/bin/perl -w use Data::Dumper;
my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne pas mettre les clés en dur.
Tu m'as énormément aidé sur ce problème, alors encore un petit éclairage, stp ?
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 18/05/12 22:57, Marc Espie a écrit :
Ben deja, tu recopies de travers, ca va pas aider.
Sûr :-)
J'ai bien dit "je mets des references partout"
Sûrement.
En particulier, fais attention a
$tbl = { ... };
qui "va" avec
push @{$tbl->{$key}{list}}, 'd';
Si tu tiens absolument a ton
%tbl = ();
alors ca donne:
push @{$tbl{$key}->{list}}, 'd';
Tu fais comme tu veux, mais pour un debutant, c'est plus simple de raisonner
exclusivement avec "un" type de donnees, et donc de passer entierement sur
des references.
Voilà le programme corrigé qui marche :
#! /usr/bin/perl -w
use Data::Dumper;
my $tbl = {
k1 => { name => 'n1', list => [qw(a b c)] },
k2 => { name => 'n2', list => [] },
k3 => { name => 'n3', list => [qw(e)] }
};
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je
n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne
pas mettre les clés en dur.
Tu m'as énormément aidé sur ce problème, alors encore un petit
éclairage, stp ?
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Ben deja, tu recopies de travers, ca va pas aider.
Sûr :-)
J'ai bien dit "je mets des references partout"
Sûrement.
En particulier, fais attention a $tbl = { ... }; qui "va" avec push @{$tbl->{$key}{list}}, 'd';
Si tu tiens absolument a ton %tbl = (); alors ca donne: push @{$tbl{$key}->{list}}, 'd';
Tu fais comme tu veux, mais pour un debutant, c'est plus simple de raisonner exclusivement avec "un" type de donnees, et donc de passer entierement sur des references.
Voilà le programme corrigé qui marche :
#! /usr/bin/perl -w use Data::Dumper;
my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne pas mettre les clés en dur.
Tu m'as énormément aidé sur ce problème, alors encore un petit éclairage, stp ?
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Paul Gaborit
À (at) Fri, 18 May 2012 23:38:00 +0200, Éric Lévénez écrivait (wrote):
[...]
foreach $key (qw(k1 k2 k3)) { my $name = $tbl->{$key}{name};
[...]
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne pas mettre les clés en dur.
foreach my $key (keys %{$tbl}){ my $name = $tbl->{$key}{name}; ...
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
À (at) Fri, 18 May 2012 23:38:00 +0200,
Éric Lévénez <usenet@levenez.com> écrivait (wrote):
[...]
foreach $key (qw(k1 k2 k3)) {
my $name = $tbl->{$key}{name};
[...]
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je
n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne
pas mettre les clés en dur.
foreach my $key (keys %{$tbl}){
my $name = $tbl->{$key}{name};
...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
À (at) Fri, 18 May 2012 23:38:00 +0200, Éric Lévénez écrivait (wrote):
[...]
foreach $key (qw(k1 k2 k3)) { my $name = $tbl->{$key}{name};
[...]
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne pas mettre les clés en dur.
foreach my $key (keys %{$tbl}){ my $name = $tbl->{$key}{name}; ...
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
Benoit Izac
Bonjour,
le 18/05/2012 à 23:38, Éric Lévénez a écrit dans le message <4fb6c138$0$6561$ :
#! /usr/bin/perl -w use Data::Dumper;
my $tbl = { k1 => { name => 'n1', list => [qw(a b c)] }, k2 => { name => 'n2', list => [] }, k3 => { name => 'n3', list => [qw(e)] } };
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne pas mettre les clés en dur.
foreach $key (sort keys $tbl) {
-- Benoit Izac
Bonjour,
le 18/05/2012 à 23:38, Éric Lévénez a écrit dans le message
<4fb6c138$0$6561$426a74cc@news.free.fr> :
#! /usr/bin/perl -w
use Data::Dumper;
my $tbl = {
k1 => { name => 'n1', list => [qw(a b c)] },
k2 => { name => 'n2', list => [] },
k3 => { name => 'n3', list => [qw(e)] }
};
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je
n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour
ne pas mettre les clés en dur.
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne pas mettre les clés en dur.
foreach $key (sort keys $tbl) {
-- Benoit Izac
Éric Lévénez
Le 19/05/12 01:00, Paul Gaborit a écrit :
À (at) Fri, 18 May 2012 23:38:00 +0200, Éric Lévénez écrivait (wrote):
[...]
foreach $key (qw(k1 k2 k3)) { my $name = $tbl->{$key}{name};
[...]
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne pas mettre les clés en dur.
foreach my $key (keys %{$tbl}){ my $name = $tbl->{$key}{name}; ...
Ah, oui, tout simplement. Quand on a la solution sous les yeux, c'est tout de suite plus facile :-)
Merci encore.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 19/05/12 01:00, Paul Gaborit a écrit :
À (at) Fri, 18 May 2012 23:38:00 +0200,
Éric Lévénez<usenet@levenez.com> écrivait (wrote):
[...]
foreach $key (qw(k1 k2 k3)) {
my $name = $tbl->{$key}{name};
[...]
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je
n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne
pas mettre les clés en dur.
foreach my $key (keys %{$tbl}){
my $name = $tbl->{$key}{name};
...
Ah, oui, tout simplement. Quand on a la solution sous les yeux, c'est
tout de suite plus facile :-)
Merci encore.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
À (at) Fri, 18 May 2012 23:38:00 +0200, Éric Lévénez écrivait (wrote):
[...]
foreach $key (qw(k1 k2 k3)) { my $name = $tbl->{$key}{name};
[...]
La seule chose qui me gêne est le "qw(k1 k2 k3)" du foreach que je n'arrive pas à remplacer par quelque chose utilisant "keys ..." pour ne pas mettre les clés en dur.
foreach my $key (keys %{$tbl}){ my $name = $tbl->{$key}{name}; ...
Ah, oui, tout simplement. Quand on a la solution sous les yeux, c'est tout de suite plus facile :-)
Merci encore.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.