use strict; use warnings; use Data::Dump::Streamer; my @a_ = ({ domain => 'adomain.com', data => 'adata', }, { domain => 'bdomain.com', data => 'bdata', }); my @b_ = ({ domain => 'adomain.com', otherdata => 'astuff', }, { domain => 'bdomain.com', otherdata => 'bstuff', }); my @c = map {{%{$a_[$_]}, %{$b_[$_]}}} 0..$#a_; Dump (\@c);