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

sujeet97 has asked for the wisdom of the Perl Monks concerning the following question:

I am facing some trouble accessing values from a hash of arrays. I am attaching a sample code (this is not part of the main code but it pretty much shows the problem)

#!/usr/bin/perl %sampleHash = (); @array1 = ('a','b','c'); @array2=("x","y","z","s"); $sampleHash{"hash1"} = @array1; $sampleHash{"hash2"} = @array2; print $sampleHash{"hash1"}[0];

In the above code, the print statement is blank. I want it to show the value - a. Please help. Its urgent.

Replies are listed 'Best First'.
Re: Trouble accessing Hash of Arrays
by Athanasius (Archbishop) on Apr 02, 2013 at 02:42 UTC

    Hello sujeet97, and welcome to the Monastery!

    As Anonymous Monk says, you need to store references to the two arrays. This:

    #! perl use strict; use warnings; my %sampleHash = (); my @array1 = ('a', 'b', 'c'); my @array2 = ('x', 'y', 'z', 's'); $sampleHash{hash1} = \@array1; $sampleHash{hash2} = \@array2; print $sampleHash{hash1}[0];

    prints a as desired. See perlreftut and perlref.

    Hope that helps,

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

      yes. Got it. Thanks a lot :-)

Re: Trouble accessing Hash of Arrays (troubleshooting basics)
by Anonymous Monk on Apr 02, 2013 at 02:36 UTC

    Basic debugging checklist says  use strict; use warnings; especially if you want to cut your development time in half!

    It will point you at problems with your code, like this

    #!/usr/bin/perl -- use diagnostics; use strict; use warnings; use Data::Dump; my %sampleHash = (); my @array1 = ('a','b','c'); my @array2 = ("x","y","z","s"); $sampleHash{"hash1"} = @array1; $sampleHash{"hash2"} = @array2; dd \%sampleHash; print $sampleHash{"hash1"}[0]; __END__ $ perl fudge { hash1 => 3, hash2 => 4 } Can't use string ("3") as an ARRAY ref while "strict refs" in use at f +udge line 14 (#1) (F) Only hard references are allowed by "strict refs". Symbolic references are disallowed. See perlref. Uncaught exception from user code: Can't use string ("3") as an ARRAY ref while "strict refs" in +use at fudge line 14.

    @array in scalar context returns its size , perlintro, Tutorials: Context tutorial

    To store an array in a scalar, to store an array in a hash, you have to use the reference operator, reference-of operator, see perlreftut#Making References , references quick reference

Re: Trouble accessing Hash of Arrays
by AnomalousMonk (Archbishop) on Apr 02, 2013 at 22:51 UTC
Re: Trouble accessing Hash of Arrays
by vinoth.ree (Monsignor) on Apr 02, 2013 at 04:17 UTC