my @hashes = ( { key1 => 1, key2 => 4 }, { key3 => 8, key4 => 4, key5 => 6 }, { key6 => 3 }, ); sub sum { my $sum; $sum += $_ for (@_); return $sum; } @hashes = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, sum( values %$_) ] } @hashes; use Data::Dumper; print Dumper(\@hashes);