use warnings; use strict; use Data::Dumper; my $title =; my %hash; while(){ chomp; my $val = substr $_,0,1; push @{$hash{$val}},$_; } print Dumper \%hash; __DATA__ a b c 0 0 d 0 1 d 0 1 d 0 2 d 0 2 d 1 0 d 1 0 d 1 1 d 1 1 d 1 2 d 1 2 d