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