my %hash = ( 1=>2, 19=>20, 38=>50, 40=>10, 60=>3, 66=>80, 700=>1 ); my %sums = dosomemagic(\%hash); print Dumper(\%sums); #----------------- sub dosomemagic { my $hash=shift; my %return; my @keys=sort keys(%$hash); while(@keys>=4) { $return{$keys[0]}+=$hash{$keys[$_]} for(0..3); shift(@keys); } return %return; }