use strict; use warnings; use Data::Dumper; my %hoa; while () { my ($name, $num) = split; push @{$hoa{$name}}, $num; } print Dumper(\%hoa); __DATA__ DAVID 31 DAVID 29 DAVID 41 #### $VAR1 = { 'DAVID' => [ '31', '29', '41' ] };