CSV feldolgozáshoz használjuk a Text::CSV modult.
# cpanm Text::CSV_XS
# cpanm Text::CSV
Egy CSV teszteléshez:
name,val
A,3
B,2
C,5
Az alábbi kód megbirkózik mezőn belüli szeparátorral és sortöréssel is:
#!/usr/bin/env perl
use v5.018;
use utf8;
use strict;
use warnings;
use feature qw(unicode_strings);
use Text::CSV;
our $fn = $ARGV[0] or die "CSV filename not provided. Abort\n";
{
my $csv = Text::CSV->new({
strict => 1,
binary => 1, # binary characters may be used in quoted fields
auto_diag => 1,
sep_char => ','
});
my $sum = 0;
open(my $fh, '<:encoding(utf8)', $fn) or die "Could not open file $fn: $!\n";
my @header = $csv->header($fh);
# hashref
# while (my $row = $csv->getline_hr($fh)) {
# $sum += $row->{'val'}; # figyelem, a hash index függ a csv tartalmától
# }
# arrayref (faster, more robust)
while (my $row = $csv->getline($fh)) {
$sum += $row->[1];
}
$csv->error_diag() unless $csv->eof;
close $fh;
print "$sum\n";
}