use strict; use warnings; use Data::Dumper; my $n = 4; # number of columns, given as user input my %hcolumns; # this is the hash of the columns you are looking for my @header = split /,/,; # pls use Text::CSV for any real work chomp @header; while(){ chomp; my @record = split /,/; # pls use Text::CSV for any real work for (0..$n-1) { push @{ $hcolumns{$header[$_]} }, $record[$_]; } } print Dumper \%hcolumns; # hash of columns __DATA__ Name,FirstName,Instrument Mangelsdorff,Albert,Trombone Parker,Charlie,Trumpet Coltrane,John,Tenor Evans,Bill,Piano