99 votes

Comment imprimer facilement un tableau Perl ? (avec un peu de formatage)

Y a-t-il un facile comment imprimer un tableau Perl avec des virgules entre chaque élément ?

Écrire une boucle for pour le faire est assez facile mais pas tout à fait élégant.... si cela a un sens.

152voto

Alex Points 21247

Il suffit d'utiliser join() :

# assuming @array is your array:
print join(", ", @array);

9 votes

Ou, si tu veux être vraiment sale : {local $,=', ';print @array} .

10 votes

Il y a plus d'une façon de le faire mais c'est la façon qui ne fait pas que la personne qui maintient le code après vous vous déteste. Oui, perldoc perlvar existe, mais je préfère jeter un coup d'oeil sur "join ', ' @array" plutôt que de consulter perlvar toutes les deux lignes pour comprendre ce que font toutes les variables ésotériques.

0 votes

@Oesor : C'est pour ça que j'ai dit que c'était sale. Mais bon, en regardant les autres réponses, je ne suis pas vraiment le pire des contrevenants. :)

35voto

eugene y Points 37378

Vous pouvez utiliser Data::Dump :

use Data::Dump qw(dump);
my @a = (1, [2, 3], {4 => 5});
dump(@a);

Produit :

"(1, [2, 3], { 4 => 5 })"

2 votes

Sur Ubuntu/Mint, installez le paquet libdata-dump-perl.

2 votes

La meilleure réponse ici ! Fonctionne également avec les tableaux multidimensionnels. Le plus flexible.

18voto

DavidO Points 8694

Si vous codez pour obtenir le type de clarté qui serait compris par quelqu'un qui débute en Perl, la construction traditionnelle dit ce qu'elle veut dire, avec un haut degré de clarté et de lisibilité :

$string = join ', ', @array;
print "$string\n";

Cette construction est documentée dans perldoc -fjoin .

Cependant, j'ai toujours aimé la simplicité $, le fait. La variable spéciale $" sert à l'interpolation, et la variable spéciale $, est pour les listes. Combinez l'un ou l'autre avec la fonction dynamique de restriction de la portée ' local ' pour éviter d'avoir des effets d'entraînement dans tout le script :

use 5.012_002;
use strict;
use warnings;

my @array = qw/ 1 2 3 4 5 /;

{
    local $" = ', ';
    print "@array\n"; # Interpolation.
}

OU avec $, :

use feature q(say);
use strict;
use warnings;

my @array = qw/ 1 2 3 4 5 /;
{
    local $, = ', ';
    say @array; # List
}

Les variables spéciales $, y $" sont documentés dans perlvar . Le site local et la façon dont il peut être utilisé pour limiter les effets de la modification de la valeur d'une variable de ponctuation globale est probablement mieux décrite dans le document suivant [perlsub](http://perldoc.perl.org/perlsub.html#Temporary-Values-via-local()) .

Profitez-en !

10voto

Andreas Points 890

Vous pouvez également essayer Data::Dumper . Exemple :

use Data::Dumper;

# simple procedural interface
print Dumper($foo, $bar);

4 votes

Data::Dumper est un module standard et est installé avec Perl. Pour obtenir une liste de tous les modules et pragmatiques standards, voir pelrdoc perlmodlib .

7voto

eugene y Points 37378

Pour l'inspection/débogage, vérifiez le Data::Printer module. Il est destiné à faire une chose et une seule :

afficher à l'écran les variables et les objets Perl, correctement formatés (pour être inspecté par un humain)

Exemple d'utilisation :

use Data::Printer;  
p @array;  # no need to pass references

Le code ci-dessus pourrait donner quelque chose comme ceci (avec des couleurs !):

   [
       [0] "a",
       [1] "b",
       [2] undef,
       [3] "c",
   ]

0 votes

Sous Ubuntu, on peut installer le libdata-printer-perl paquet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X