Les tableaux

Résolu/Fermé
Synerz Messages postés 1221 Date d'inscription mercredi 5 juin 2013 Statut Membre Dernière intervention 27 décembre 2017 - 2 sept. 2016 à 10:57
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 20 sept. 2016 à 10:29
Bonjour,

Je travaille sur du Perl en ce moment puisque j'en ai besoin pour mes futurs cours mais j'ai une question.

Est ce que "Foreach" fonctionne pour afficher un tableau à plusieurs entrés ? Exemple

use strict;
use warnings;

my @noms = (
           [ "fred", "barney" ],
           [ "george", "jane", "elroy" ],
           [ "homer", "marge", "bart" ],
    );
foreach my $n (@noms) {
  print $n;
}
<>

Quand j’exécute ce programme j'ai cette erreur : "ARRAY(0xe5b358)ARRAY(0xe5b508)ARRAY(0xd047f8)"

Il y a surement une autre façon de faire non ?

Merci d'avance


1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 20/09/2016 à 10:33
Salut,

Désolé de la réponse tardive.

Tu as un tableau qui contient 3 tableaux. Les 3 éléments qui sont affichés par ta boucle sont des références à ces tableaux.

Pour afficher les tableaux pointés par ces références, il suffit d'utiliser l'opérateur @ pour les déréférencer et de faire un foreach sur chaque tableau.

Comme cela :

#!/usr/bin/perl

use strict;
use warnings;

my @noms = (
           [ "fred", "barney" ],
           [ "george", "jane", "elroy" ],
           [ "homer", "marge", "bart" ],
    );
foreach my $n (@noms) {
  foreach my $o (@$n) {
      print $o . "\n";
  }
}

Alternativement, tu peux installer List::Flatten avec CPAN, et tu pourras "aplatir" une liste qu'elle contienne ou pas des tableaux dans tout ou partie de ses éléments (ou List::Flatten::Recursive si tu peux avoir des tableaux de tableaux de tableaux...).


Dal
1