重複データの個数を数える

@fruits('みかん','もも','もも','みかん','みかん');

このような配列があります。
この配列で、「みかんが○個」「ももが○個」を調べたいとします。

foreach $name(@fruits)

foreachで、配列の中身を一つずつ$nameに格納

{
%hash;
$hash{$name} => $hash{$name}++;
}

$nameにはまず@fruitsの1番目の値「みかん」が入ります。
そして、$hash{$name}で、連想配列のキーとして「みかん」を
代入します。
連想配列は、みかん=>10 という風に入れるんでしたね。
なので、
「=>」を書きます。
つづいて、
$hash{$name}++
の部分は、値になるわけですが、数を数えるために、変数を代入し、
$nameの値がある度に1ずつ増加させていきます。
これで出来上がりです。

表示して確認してみましょう。

表示するためには、
while(($key, $value) = each%fruits){
print "$key = $value\n";
}

これで、みかん = 3個
のような表示になります。

MEMO
my @fruits = ('A','B','B','A','A');
my %hash;

foreach $name(@fruits) {
%hash;
$hash{$name} => $hash{$name}++;
}

while(($key, $value) = each %hash){
print "$key = $value\n";
}

実行結果
A=3 B=2