$ perl -Mstrict -Mwarnings -MData::Dumper -E ' > open my $tableFH, q{<}, \ < #CHROM POS ID REF ALT QUAL > chr1 1092344 . G T 79.54 > chr1 1092367 . C T 148.50 > chr1 1092400 . G C 90.54 > chr1 1092424 . A G 93.14 > chr1 1092461 . G A 105.30 > chr1 1092470 . T G 103.06 > chr1 1092482 . T C 104.33 > chr1 1093235 . G A 16.08 > chr1 1093245 . C T 244.75 > chr2 1347864 . T C 107.34 > chr2 1456284 . A C 86.32 > chr3 2031473 . G T 25.34 > chr3 2256801 . C T 154.65 > EOD > > my( undef, undef, @cols ) = map { split } scalar <$tableFH>; > my %chroms; > > while ( <$tableFH> ) > { > my( $chr, $pos, @vals ) = split; > @{ $chroms{ $chr }->{ $pos } }{ @cols } = @vals; > } > > print Data::Dumper->Dumpxs( [ \ %chroms ], [ qw{ *chroms } ] );'