use strict; use warnings; use Data::Dumper; my %hash= (10=>1, 20=>2, 30=>1, 40=>2); my %rhash; map {$rhash{$hash{$_}} += $_} keys %hash; print Dumper (\%hash); print Dumper (\%rhash);