Easy way to print Perl array? (with a little formatting)

Perl

Perl Problem Overview


Is there an easy way to print out a Perl array with commas in between each element?

Writing a for loop to do it is pretty easy but not quite elegant....if that makes sense.

Perl Solutions


Solution 1 - Perl

Just use join():

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

Solution 2 - Perl

You can use Data::Dump:

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

Produces:

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

Solution 3 - Perl

If you're coding for the kind of clarity that would be understood by someone who is just starting out with Perl, the traditional this construct says what it means, with a high degree of clarity and legibility:

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

This construct is documented in perldoc -f join.

However, I've always liked how simple $, makes it. The special variable $" is for interpolation, and the special variable $, is for lists. Combine either one with dynamic scope-constraining 'local' to avoid having ripple effects throughout the script:

use 5.012_002;
use strict;
use warnings;

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

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

OR with $,:

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

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

The special variables $, and $" are documented in perlvar. The local keyword, and how it can be used to constrain the effects of altering a global punctuation variable's value is probably best described in perlsub.

Enjoy!

Solution 4 - Perl

Also, you may want to try Data::Dumper. Example:

use Data::Dumper;

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

Solution 5 - Perl

For inspection/debugging check the Data::Printer module. It is meant to do one thing and one thing only:

> display Perl variables and objects on screen, properly formatted (to > be inspected by a human)

Example usage:

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

The code above might output something like this (with colors!):

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

Solution 6 - Perl

You can simply print it.

@a = qw(abc def hij);

print "@a";

You will got:

abc def hij

Solution 7 - Perl

# better than Dumper --you're ready for the WWW....
    
use JSON::XS;
print encode_json \@some_array

Solution 8 - Perl

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

Generates three different output styles:

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

Solution 9 - Perl

This might not be what you're looking for, but here's something I did for an assignment:

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

Solution 10 - Perl

Map can also be used, but sometimes hard to read when you have lots of things going on.

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

Solution 11 - Perl

I've not tried to run below, though. I think this's a tricky way.

map{print $_;} @array;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionfunk-shunView Question on Stackoverflow
Solution 1 - PerlAlexView Answer on Stackoverflow
Solution 2 - PerlEugene YarmashView Answer on Stackoverflow
Solution 3 - PerlDavidOView Answer on Stackoverflow
Solution 4 - PerlAndreasView Answer on Stackoverflow
Solution 5 - PerlEugene YarmashView Answer on Stackoverflow
Solution 6 - PerlYi ZhaoView Answer on Stackoverflow
Solution 7 - PerlgleecoView Answer on Stackoverflow
Solution 8 - PerlTVNshackView Answer on Stackoverflow
Solution 9 - Perl009View Answer on Stackoverflow
Solution 10 - PerlPodTech.ioView Answer on Stackoverflow
Solution 11 - PerlK.MinodaView Answer on Stackoverflow