$ perl -le' use warnings; use strict; my %stuff = ( "a", 1, "b", 2, "c", 3, "d", 3 ); my %by_size; for my $key ( keys %stuff ) { push @{ $by_size{ $stuff{ $key } } }, $key; } for my $size ( keys %by_size ) { print "Size = $size, Names = @{ $by_size{ $size } }"; } ' Size = 1, Names = a Size = 3, Names = c d Size = 2, Names = b