Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Print elements of hash references

by stevieb (Canon)
on Mar 31, 2012 at 18:40 UTC ( [id://962791]=note: print w/replies, xml ) Need Help??


in reply to Print elements of hash references

This is a hash of hash references that contain array references. (I think ;)

To print them out, you have to dereference the entire structure as an array. See the full sample program below for further details on this dereferencing and accessing individual elements.

say @{ $An{$id}->{b} };

I couldn't find the original thread, so I have no idea what is in the lettered arrays, so I just threw something together as an example:

#!/usr/bin/perl use warnings; use strict; use 5.10.0; my @bb = ( 41..60 ); my @cc = ( 21..40 ); my @IDs = ( 1..20 ); my %An; my $idx = 0; foreach my $n (@IDs) { push @{$An{$n}->{b}} , $bb[$idx]; push @{$An{$n}->{c}} , $cc[$idx]; $idx++; } # $An{$id}->{b} is an array reference. # To access its elements, we must dereference it # by encompassing the data structure within the # array dereferencing operator: @{} # to iterate over the entire array reference # note the @{} block surrounding the data structure say map { $_, ' ' } @{ $An{1}->{b} }; # to print out a single element of the aref say @{ $An{1}->{b} }[0]; # to print out the zeroeth element contained # in the 'b' value of each %An ID key: for my $id ( @IDs ){ say @{ $An{ $id }->{ b } }[0]; }

As for your other question, you should always declare your variables in the smallest scope possible... ie. as close to the block you are going to use them in, and where possible, within the block you'll use them in. Having a whole boatload of variables declared needlessly at the top of the program is both unsightly and makes for hard to follow code.

Replies are listed 'Best First'.
Re^2: Print elements of hash references
by Anonymous Monk on Mar 31, 2012 at 20:26 UTC

    Thanks for that, that did the trick. The reason I am using this method is because I am facing a problem which with my beginner knowledge in perl would take me ages to solve. The solution I found did all I wanted and the only thing I had to do to finish the code was to print the results. Anyway thanks guys for your input it's time to spend some time with perl tutorials.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://962791]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (4)
As of 2024-04-19 02:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found