my %hash; my $key; while ($_= <$file>) { my @line= split; while (@line) { my $part= shift @line; if ($part=~/^\D/) { #does not begin with a number $key= $part; $hash{$key}=[]; } else { $hash{$key}= split /,/,$part; } } }