use List::Util qw( sum uniq ); # pass list of hashrefs. # returns a hash (list). sub add_hashes(@) { map { my $k = $_; $k => sum( map $_->{$k}, @_ ) } uniq( map keys(%$_), @_ ) }