#!/usr/bin/perl -w use strict; use Data::Dumper qw(Dumper); my %hash = ( a => 1, b => 1, c => 1, d => 2, e => 2, f => 2, ); my %by_value = reverse %hash; print Dumper(\%by_value); #### $VAR1 = { '1' => 'a', '2' => 'e' }; #### my %hash = ( a => 1, b => 1, c => 1, d => 2, e => 2, f => 2, ); my %by_value; while(my($key, $value) = each %hash) { push @{ $by_value{$value} }, $key; } print Dumper(\%by_value); #### $VAR1 = { '1' => [ 'a', 'b', 'c' ], '2' => [ 'e', 'f', 'd' ] };