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); #### $ARRAY1 = [ { data => 'adata', domain => 'adomain.com', otherdata => 'astuff' }, { data => 'bdata', domain => 'bdomain.com', otherdata => 'bstuff' } ];