Tutorial :How to print all values of an array in Perl



Question:

I am trying to do print all of the values of an array from a CSV file. I am sort of manually doing this in the example below. Can someone show me the code for doing this for all of the fields of the array no matter how many fields there are? I'm basically just trying to print each field on a new line.

#!/usr/bin/perl  use strict;  use warnings;  use Text::CSV_XS;    my $file = 'test.csv';    my $csv = Text::CSV_XS->new ({      quote_char          => '"',      escape_char         => '@',      binary              => 1,      keep_meta_info      => 0,      allow_loose_quotes  => 1,      allow_whitespace    => 1,  });      open (CSV, "<", $file) or die $!;    while (<CSV>) {      if ($csv->parse($_)) {          my @columns = $csv->fields();          print "$columns[0]\r\n";          print "$columns[1]\r\n";          print "$columns[2]\r\n";          print "$columns[3]\r\n";          print "$columns[4]\r\n";          print "$columns[5]\r\n";          print "$columns[6]\r\n";          print "$columns[7]\r\n";      }      else {          my $err = $csv->error_input;          print "Failed to parse line: $err";      }  }  close CSV;  


Solution:1

foreach(@columns)  {      print "$_\r\n";  }  

Instead of all the columns[number].


Solution:2

If you just want to print the elements separated by spaces:

print @columns;  

If you want to be a bit more fancy, you can use join:

print join("\n", @columns);  

If you need to do something more, iterate over it:

foreach (@columns) {      # do stuff with $_  }  


Solution:3

For debugging purposes, Data::Dump is my weapon of choice. It basically pretty-prints data structures.

use strict;  use warnings;  use Data::Dump 'dump';    # Do some stuff....    dump @array;     # Unlike Data::Dumper, there's no need to backslash ('\@array')  dump %hash;      # Same goes for hashes  dump $arrayref;    dump $hashref;   # References handled just as well  

There are many other ways to print arrays, of course:

say foreach @columns;           # If you have Perl 5.10+  print $_,"\n" foreach @columns; # If you don't    print "@columns";               # Prints all elements, space-separated by default  

The 'best' answer depends on the situation. Why do you need it? What are you working with? And what do you want it for? Then season the code accordingly.


Solution:4

If you're doing this for diagnostic purposes (as opposed to presentation) you might consider Data::Dumper. In any case it's a good tool to know about if you want a quick printout of more-or-less arbitrary data.


Solution:5

{ $"="\n"; print $fh "@files"; }  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »