it-swarm.dev

Einfache Möglichkeit, ein Perl-Array zu drucken? (mit etwas Formatierung)

Gibt es eine einfache Möglichkeit, ein Perl-Array mit Kommas zwischen jedem Element auszudrucken?

Das Schreiben einer for-Schleife ist ziemlich einfach, aber nicht sehr elegant. Wenn dies sinnvoll ist.

92
funk-shun

Verwenden Sie einfach join() :

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

Sie können Data::Dump verwenden:

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

Produziert:

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

Wenn Sie für die Art von Klarheit programmieren, die jemand verstehen würde, der gerade mit Perl beginnt, sagt das traditionelle Konstrukt, was es bedeutet, mit einem hohen Maß an Klarheit und Lesbarkeit:

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

Dieses Konstrukt ist in perldoc -fjoin dokumentiert.

Es hat mir jedoch immer gefallen, wie einfach $, es macht. Die spezielle Variable $" dient zur Interpolation und die spezielle Variable $, für Listen. Kombinieren Sie eine davon mit der dynamischen Bereichsbegrenzung 'local', um zu vermeiden, dass das Skript Skripteffekte aufweist:

use 5.012_002;
use strict;
use warnings;

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

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

ODER mit $:

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

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

Die speziellen Variablen $, und $" sind in perlvar dokumentiert. Das local-Schlüsselwort und wie es verwendet werden kann, um die Auswirkungen der Änderung einer globalen Interpunktionsvariable zu beschränken, wird wahrscheinlich am besten in perlsub beschrieben.

Genießen!

18
DavidO

Möglicherweise möchten Sie auch Data :: Dumper ausprobieren. Beispiel:

use Data::Dumper;

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

Überprüfen Sie zur Überprüfung/Fehlersuche das Modul Data::Printer . Es ist nur eine Sache und nur eine Sache zu tun:

anzeige von Perl-Variablen und -Objekten auf dem Bildschirm, ordnungsgemäß formatiert (um von einem Menschen geprüft zu werden)

Verwendungsbeispiel:

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

Der obige Code könnte etwas (mit Farben!) Ausgeben:

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

Sie können es einfach print.

@a = qw(abc def hij);

print "@a";

Du wirst bekommen:

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

Data::Dumper verwenden:

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)]);

Erzeugt drei verschiedene Ausgabestile:

$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

Das ist vielleicht nicht das, wonach Sie suchen, aber hier habe ich etwas für eine Aufgabe gemacht:

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