O modalitate ușoară de a imprima matrice Perl? (cu o mică formatare) (Programare, Perl)

funk-shun a intrebat.

Există un ușor modalitate de a imprima un array Perl cu virgule între fiecare element?

Scrierea unei bucle for pentru a face acest lucru este destul de ușoară, dar nu destul de elegantă….dacă are sens.

11 răspunsuri
Alex

Pur și simplu folosiți join():

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

Comentarii

  • Sau, dacă vrei să fii foarte murdar: {local $,=', ';print @array}. –  > Por musiKk.
  • Există mai multe moduri de a face acest lucru… dar acesta este modul în care nu-l face pe cel care întreține codul după tine să te urască. Da, există perldoc perlvar, dar prefer să arunc o privire peste „join ‘, ‘ @array” decât să accesez perlvar la fiecare două linii pentru a afla ce fac toate variabilele ezoterice. –  > Por Oesor.
  • @Oesor: De aceea am numit-o murdară. Dar ei bine, uitându-mă la celelalte răspunsuri, nu sunt chiar cel mai rău infractor. 🙂 –  > Por musiKk.
  • @musiKK Îmi place! E ceva ce aș folosi și eu dacă aș vrea să-mi nedumiresc colegii de muncă 🙂 –  > Por Alex.
  • Acest lucru a funcționat foarte bine pentru a imprima conținutul directorului. print "current directory contains " . join(', ', <*>) . "
    ";
    –  > Por Randall.
Eugene Yarmash

Puteți utiliza Data::Dump:

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

Produce:

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

Comentarii

  • Pe Ubuntu/Mint, instalați pachetul libdata-dump-perl. –  > Por MUY Belgia.
  • Cel mai bun răspuns aici! Funcționează și cu array-uri multidimensionale. Cel mai flexibil. –  > Por Léo Léopold Hertz 준영.
DavidO

Dacă codificați pentru un tip de claritate care ar fi înțeles de cineva care abia începe cu Perl, construcția tradițională this spune ceea ce înseamnă, cu un grad ridicat de claritate și lizibilitate:

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

Această construcție este documentată în perldoc -fjoin.

Cu toate acestea, întotdeauna mi-a plăcut cât de simplu $, o face. Variabila specială $" este pentru interpolare, iar variabila specială $, este pentru liste. Combinați oricare dintre ele cu o variabilă dinamică de restricție a domeniului de aplicare ‘local‘ pentru a evita apariția unor efecte de undă în tot scriptul:

use 5.012_002;
use strict;
use warnings;

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

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

OR cu $,:

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

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

Variabilele speciale $, și $" sunt documentate în perlvar. Adresa local și modul în care acesta poate fi utilizat pentru a limita efectele modificării valorii unei variabile de punctuație globală este probabil cel mai bine descris în perlsub.

Distracție plăcută!

Andreas

De asemenea, poate doriți să încercați Data::Dumper. Exemplu:

use Data::Dumper;

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

Comentarii

  • Data::Dumper este un modul standard și este instalat împreună cu Perl. Pentru a obține o listă a tuturor pragmaticilor și modulelor standard, consultați pelrdoc perlmodlib. –  > Por shawnhcorey.
Eugene Yarmash

Pentru inspecție/depanare, verificați pagina Data::Printer modul. Acesta este menit să facă un singur lucru și numai un singur lucru:

să afișeze variabilele și obiectele Perl pe ecran, formatate corespunzător (pentru a fi inspectate de un om).

Exemplu de utilizare:

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

Codul de mai sus ar putea ieși ceva de genul acesta (cu culori!):

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

Comentarii

  • Sub Ubuntu se poate instala programul libdata-printer-perl pachet. –  > Por planetp.
Yi Zhao

Puteți pur și simplu print it.

@a = qw(abc def hij);

print "@a";

Veți obține:

abc def hij

Comentarii

  • Aveți virgule în print pentru că sunt în fiecare element al matricei. Chiar ar trebui să declarați use warnings; și să vedeți ce spune. –  > Por Toto.
gleeco
# better than Dumper --you're ready for the WWW....

use JSON::XS;
print encode_json @some_array

TVNshack

Utilizarea 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) . "===

";

print Dumper(@GRANTs) . "===

";

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

Generează trei stiluri de ieșire diferite:

$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'
          ];

009

S-ar putea să nu fie ceea ce căutați, dar iată ceva ce am făcut pentru o temă:

$" = ", ";
print "@ArrayName
";

PodTech.io

Se poate folosi și harta, dar uneori este greu de citit când ai o mulțime de lucruri în desfășurare.

map{ print "element $_
" }   @array; 

K.Minoda

Nu am încercat să ruleze mai jos, totuși. Cred că este o modalitate complicată.

map{print $_;} @array;

Tags: