use warnings; use strict; use Data::Dumper; my %Diag; while () { my ($name, $val) = split; push @{ $Diag{$name} }, $val; } print Dumper(\%Diag); __DATA__ Name1 1234 Name2 9999 Name1 5514 Name3 5415 Name2 6419