use warnings; use strict; my %customer_domain_hash; while (my $line = ) { chomp $line; my ($k, $v) = split(/@@@/, $line); push @{ $customer_domain_hash{$k} }, $v; } use Data::Dumper; $Data::Dumper::Sortkeys=1; print Dumper(\%customer_domain_hash); __DATA__ CustomerA@@@DomainA CustomerA@@@DomainB CustomerA@@@DomainC CustomerA@@@DomainD CustomerA@@@DomainE CustomerB@@@DomainA CustomerB@@@DomainB CustomerB@@@DomainC CustomerB@@@DomainD CustomerB@@@DomainE