use Data::Dumper qw/Dumper/; my %hash = (); while( ){ chomp; my ($k,$v) = split /\s*:\s*/; push @{ $hash{ $k } } , $v } print Dumper( \%hash ); __DATA__ green : apple yellow: banana green : kiwi red : strawberry green : mango yellow: lemon