And just to explain what is happening with AM's solution: $name{(split/\|/)[0]} += 1; (split/\|/) returns a list which is then subscripted to get the zeroth element which is then used as the key for the %name hash. The value associated with that key (which may be magically created if it didn't exist before) is increased by one using the += assignment operator.#!/usr/bin/perl -w use strict; my %hash; # Do it for (<DATA>) { my ($name, $score, $date) = split /\|/; $hash{$name}++; } #Show it for (keys %hash) { print "$_ = $hash{$_}\n"; } __DATA__ name_x|score|date name_y|score|date name_z|score|date name_x|score|date name_z|score|date name_z|score|date
Just a word of encouragement about hashes. They are a wonderful tool for many purposes. And it is commonly said that you are not really programming in Perl until you can think in terms of hashes. Your point about their lacking a fixed order is well taken, but once you begin using hashes, you may be pleasantly surprised to discover how often that doesn't matter.
In reply to Re: Counting incidents of names in a file
by dvergin
in thread Counting incidents of names in a file
by Bishma
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |