in reply to Two arrays into hash

Methinx you could use rudimentary algebraic methods to arrive at your goal, consider:
@array1=qw(A B C); @array2=qw(1 2 3);
is equivalent to/can be re-written as:
@array1=('A', 'B', 'C'); @array2=('1', '2', '3');
Also, the requirement can be re-written as:
%hash = ( array1=>[('A','B','C')], array2=>[('1','2','3')] };
So, substituting for ('A','B','C') & ('1','2','3'), into the re-written required result, gives:
%hash = ( array1=>[@array1], array2=>[@array2] };
But, [@array] can be/usually is written as \@array, hence,
%hash = ( array1=>\@array1, array2=>\@array2 };
As required - also discoverable by reference to perlreftut - as moritz has previously suggested.

A user level that continues to overstate my experience :-))

Replies are listed 'Best First'.
Re^2: Two arrays into hash
by davorg (Chancellor) on Jul 16, 2009 at 10:40 UTC
    [@array] can be/usually is written as \@array

    Careful. The two are not the same. \@array returns a reference to the existing array. [@array] creates a new (anonymous) copy of the original array and returns a reference to the copy. It's a subtle difference, but an important one.

    #!/usr/bin/perl use strict; use warnings; my @arr = (1 .. 5); my %hash = ( aref => \@arr, copy => [ @arr ], ); print "@{$hash{copy}}\n"; print "@{$hash{aref}}\n"; @arr = ('a' .. 'e'); print "@{$hash{copy}}\n"; # original values print "@{$hash{aref}}\n"; # changed values
    --

    See the Copyright notice on my home node.

    Perl training courses

      Good point, well made - I rather overlooked that didn't I ?

      Thanx davorg.

      A user level that continues to overstate my experience :-))