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 #### $VAR1 = { '1' => [ '1 0 d ', '1 0 d ', '1 1 d ', '1 1 d ', '1 2 d ', '1 2 d ' ], '0' => [ '0 0 d ', '0 1 d ', '0 1 d ', '0 2 d ', '0 2 d ' ] };