use Data::Dumper; my @all; my %occurance; while () { chomp; push @all, [ split(/\|/,$_) ]; $occurance{$all[-1][0]}++; } print Dumper(\@all); print Dumper(\%occurance); __DATA__ name_x|score|date name_y|score|date name_y|score|date name_z|score|date name_z|score|date