CSV-Reader

 view release on metacpan or  search on metacpan

README.md  view on Meta::CPAN

# CSV::Reader - CSV reader class

Easy to use Perl CSV file/handle reader class that's meant for reading typical CSV files having a CSV header row.\
This was designed with the idea of using an iterator interface, but Perl does not support interators (nor interfaces) yet :(\
You can also find this module on cpan: https://metacpan.org/pod/CSV::Reader

Synopsis
--------
```perl
use CSV::Reader ();
use open OUT => ':locale'; # optional; make perl aware of your terminal's encoding

# Create reader from file name:
my $reader = new CSV::Reader('/path/to/file.csv');

# Create reader from a file handle (GLOB):
open(my $h, '<', $filename) || die("Failed to open $filename: $!");
# or preferred method that can handle files having a UTF-8 BOM:
open(my $h, '<:via(File::BOM)', $filename) || die("Failed to open $filename: $!");
my $reader = new CSV::Reader($h);

# Create reader from an IO::Handle based object:
my $io = IO::File->new(); # subclass of IO::Handle
$io->open($filename, '<:via(File::BOM)') || die("Failed to open $filename: $!");
my $reader = new CSV::Reader($io);

# Create reader with advanced options:
my $reader = new CSV::Reader('/path/to/file.csv',
	'delimiter' => ';',
	'enclosure' => '',
	'field_normalizer' => sub {
		my $nameref = shift;
		$$nameref = lc($$nameref);	# lowercase
		$$nameref =~ s/\s/_/g;	# whitespace to underscore
	},
	'field_aliases'	=> {
		'postal_code' => 'postcode', # applied after normalization
	},
	'mutators' => {
		'postcode' => sub {	# if postalcode is Dutch, then make sure it has no spaces and is in uppercase.
			my $val_ref = shift;
			my $row_ref = shift;
			if (defined($$val_ref) && defined($row_ref->{'country'}) && ($row_ref->{'country'} eq 'NL')) {
				$$val_ref =~ s/\s+//;
				$$val_ref = uc($$val_ref);
			}
		},
		'has_fiber_internet' => sub {	# set a default for an empty (undef) value
			my $val_ref = shift;
			$$val_ref //= 0;	# defined-or assignment operator (in case you didn't know)
		},
	},
);

# Show the field names found in the header row:
print "Field names:\n" . join("\n", $reader->fieldNames()) . "\n";

# Iterate over the data rows:
while (my $row = $reader->nextRow()) {
	# It's recommended to validate the $row hashref first with something such as Params::Validate.
	# Now do whatever you want with the (validated) row hashref...
	require Data::Dumper; local $Data::Dumper::Terse = 1;
	print Data::Dumper::Dumper($row);
}
```

Public static methods
---------------------

### new($file, %options)



( run in 0.578 second using v1.01-cache-2.11-cpan-ceb78f64989 )