use strict; use warnings; use Data::Dumper; my %data; while () { my ($k, $v) = split; push @{ $data{$k} }, $v; } print Dumper(\%data); __DATA__ k1 5 k2 3 k1 7