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;
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.
foreach(@columns)
{
print "$_\r\n";
}
Instead of all the columns[number].
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With