http://www.perlmonks.org?node_id=1055569


in reply to How to compare hash values within the same hash?

phildeman:

I like to invert the hash for things like this. This way, you get a list of the keys for each value:

$ cat t.pl #!/usr/bin/perl my %hash = (key1=>10,key2=>10,key3=>3,key4=>5,key5=>10); my %invhash; while (my ($k,$v) = each %hash) { push @{$invhash{$v}}, $k; } for my $v (sort {$a<=>$b} keys %invhash) { print "$v cnt=", scalar(@{$invhash{$v}}), " keys=",join(", ",@{$invhash{$v}}), "\n"; } $ perl t.pl 3 cnt=1 keys=key3 5 cnt=1 keys=key4 10 cnt=3 keys=key5, key2, key1

But if you don't find the list of keys useful, or if there's too much data, just incrementing a counter as you suggest will do the job.

...roboticus

When your only tool is a hammer, all problems look like your thumb.