my %theTable; while () { chomp; my @line_parts = split /\|/; $var_0 = $line_parts[1]; push(@{$theTable{$var_0}}, [ @line_parts[7, 8, 9] ]); } require Data::Dumper; print(Data::Dumper::Dumper(\%theTable), $/); __DATA__ 0|a|2|3|4|5|6|var_1|var_2|var_3 0|a|2|3|4|5|6|var_1|var_2|var_3 0|a|2|3|4|5|6|var_1|var_2|var_3 0|b|2|3|4|5|6|var_1|var_2|var_3 0|b|2|3|4|5|6|var_1|var_2|var_3 0|b|2|3|4|5|6|var_1|var_2|var_3 0|c|2|3|4|5|6|var_1|var_2|var_3 0|c|2|3|4|5|6|var_1|var_2|var_3 0|c|2|3|4|5|6|var_1|var_2|var_3