use strict; use Data::Dumper; my %hash; while () { chomp; my ($key, $value) = split /\|/, $_; my @values = split /,/, $value; if (defined $hash{$key}) { push @{$hash{$key}}, \@values; } else { $hash{$key} = [\@values]; } } print Dumper \%hash; __DATA__ 9344220001|sei10720013,21/07/2009-00-00-00,23/07/2009-12-34-44 9344220001|sei10720014,23/07/2009-20-00-23 9344220002|sei10720015,21/07/2009-00-00-00,23/07/2009-12-34-44 9344220003|sei10720016,23/07/2009-20-00-23 9344220003|sei10720017,23/07/2009-20-00-23 9344220003|sei10720018,23/07/2009-20-00-23