web-dev-qa-db-fra.com

Un moyen facile d'imprimer un tableau Perl? (avec un peu de formatage)

Existe-t-il un moyen easy d’imprimer un tableau Perl avec des virgules entre chaque élément?

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

92
funk-shun

Il suffit d'utiliser join() :

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

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 })"
29
Eugene Yarmash

Si vous définissez un type de clarté compréhensible pour quelqu'un qui commence tout juste avec Perl, cette construction traditionnelle indique ce qu'elle signifie, avec un degré élevé 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é avec laquelle $, le rend. La variable spéciale $" sert à l'interpolation et la variable spéciale $, à des listes. Associez l'une ou l'autre de ces options avec 'local', qui limite le champ d'application de manière dynamique, pour éviter les effets d'entraînement tout au long du 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 $, et $" sont documentées dans perlvar . Le mot clé 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 sont probablement mieux décrits dans perlsub .

Prendre plaisir!

18
DavidO

Aussi, vous voudrez peut-être essayer Data :: Dumper . Exemple:

use Data::Dumper;

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

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

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

Exemple d'utilisation:

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

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

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

Vous pouvez simplement print le.

@a = qw(abc def hij);

print "@a";

Vous aurez:

abc def hij
2
Yi Zhao
# better than Dumper --you're ready for the WWW....

use JSON::XS;
print encode_json \@some_array
2
gleeco

Utiliser Data::Dumper:

use strict;
use Data::Dumper;

my $GRANTstr = 'SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE, TRIGGER';
$GRANTstr    =~ s/, /,/g;
my @GRANTs   = split /,/ , $GRANTstr;

print Dumper(@GRANTs) . "===\n\n";

print Dumper(\@GRANTs) . "===\n\n";

print Data::Dumper->Dump([\@GRANTs], [qw(GRANTs)]);

Génère trois styles de sortie différents:

$VAR1 = 'SELECT';
$VAR2 = 'INSERT';
$VAR3 = 'UPDATE';
$VAR4 = 'DELETE';
$VAR5 = 'LOCK TABLES';
$VAR6 = 'EXECUTE';
$VAR7 = 'TRIGGER';
===

$VAR1 = [
          'SELECT',
          'INSERT',
          'UPDATE',
          'DELETE',
          'LOCK TABLES',
          'EXECUTE',
          'TRIGGER'
        ];
===

$GRANTs = [
            'SELECT',
            'INSERT',
            'UPDATE',
            'DELETE',
            'LOCK TABLES',
            'EXECUTE',
            'TRIGGER'
          ];
0
TVNshack

Ce n'est peut-être pas ce que vous recherchez, mais voici quelque chose que j'ai fait pour un travail

$" = ", ";
print "@ArrayName\n";
0
009