my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1}); my @hdr; while (my $row = $csv->getline ($fh)) { # example: header lines start with A-Z, data doesn't if (!@hdr or $row->[0] =~ m/^[A-Z]/) { @hdr = @{$row}; next; } # just an example my %hash; @hash{@hdr} = @$row; }