examples/references/data.csv
fname,lname,phone
Boo,Bar,123
Foo,Baz,456
Moo,Zorg,789
We would like to read in that file and be able to access the fname of row 5
as  $data[3]{fname}

# the fname on line 5 is in index 3 because: 
# line 1 is the header
# line 2 is element 0 in the array
# ...
# line 5 is element 3 in the array
examples/references/read_csv_file.pl
#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;

my $filename = shift 
    or die "Usage: $0 FILENAME ( examples/references/data.csv )\n";

my @data;
open my $fh, '<', $filename or die;

my $header = <$fh>;
chomp $header;
my @header = split /,/, $header;

while (my $line = <$fh>) {
    chomp $line;
    my %row;

    my @values = split /,/, $line;
    foreach my $i (0..@header-1) {
        my $field = $header[$i];
        $row{$field} = $values[$i];
    }
 
    # using hash slices:
    # @row{@header} = split /,/, $line;

    push @data, \%row;
}

print Dumper \@data;

examples/references/read_csv_file.out
$VAR1 = [
          {
            'lname' => 'Bar',
            'fname' => 'Boo',
            'phone' => '123'
          },
          {
            'lname' => 'Baz',
            'fname' => 'Foo',
            'phone' => '456'
          },
          {
            'lname' => 'Zorg',
            'fname' => 'Moo',
            'phone' => '789'
          }
        ];