use warnings; use strict; use Text::CSV; # setup a CSV parser my $csvParser = Text::CSV->new({ binary => 1, sep_char => ',', empty_is_undef => 1 }) or die "Cannot create new CSV parser: $!\n"; open my $csvHandle, "<", $csvFile or die "could not open $csvFile: $!"; # figure out the column headings from the first line my @csvColumns = (); foreach my $colName (@{$csvParser->getline($csvHandle)}) { push @csvColumns, $colName; } # reverse that to allow lookup by name my %csvColumns; for my $colNum (0 .. scalar(@csvColumns)-1) { $csvColumns{$csvColumns[$colNum]} = $colNum; } # access some column in the CSV file by name while (my $line = $csvParser->getline($csvHandle)) { print "Column Foo has value $$line[$csvColumns{Foo}]; }