http://www.perlmonks.org?node_id=1041105


in reply to Merging arrays

The OP seems to want an array of hashes as output. Both smls's solution here and jeffa's here produce 'ordinary' hashes. Anonymous Monk's solution here produces an AoH, but, as stated, consumes the input arrays. Here's a solution producing an AoH without consuming the input arrays (presumed  'acct4' tyop noted by jeffa corrected):

>perl -wMstrict -MData::Dump -le "my @array = qw( 111 222 333 444 555 888); my @array2 = qw(acct1 acct2 acct3 acct4 acct5 acct8); ;; sub blesh { my ($ar_1, $ar_2) = @_; ;; die qq{referenced arrays not same size} unless @$ar_1 == @$ar_2; ;; return map +{ $ar_1->[$_] => $ar_2->[$_] }, 0 .. $#$ar_1; } ;; my @AoH = blesh(\@array, \@array2); dd \@AoH; " [ { 111 => "acct1" }, { 222 => "acct2" }, { 333 => "acct3" }, { 444 => "acct4" }, { 555 => "acct5" }, { 888 => "acct8" }, ]

Update: The odd-looking  +{ ... } in the map expression serves to disambiguate the  { ... } as an anonymous hash reference constructor rather than a subroutine block. The statement
    return map { { $ar_1->[$_] => $ar_2->[$_] } } 0 .. $#$ar_1;
serves just as well (but note there is now no  , (comma) between the outermost terminating  } and the following 0).