Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Pulling Array Out of Hash Reference

by enoch (Chaplain)
on Apr 12, 2004 at 22:38 UTC ( #344558=perlquestion: print w/ replies, xml ) Need Help??
enoch has asked for the wisdom of the Perl Monks concerning the following question:

If I have a reference to a hash, is there anyway to index into the referenced hash via an array and pull out those values that correspond as keys in the array. I know... I know... that was a complex sentence. In code:
my %hash = ( a => 'foo', b => 'bar', c => 'baz', d => 'quux', ); print @hash{'a','d'},"\n"; # correctly prints out "fooquux" my $hashRef = \%hash; # generates error # "Not an ARRAY reference at line 16." print @$hashRef->{'a','d'};
I have tried various iterations trying to get it to reference correctly. And, I have read through perldata and perlref trying to find an answer to this. Does anyone have any insight?

Replies are listed 'Best First'.
Re: Pulling Array Out of Hash Reference
by enoch (Chaplain) on Apr 12, 2004 at 22:44 UTC
Re: Pulling Array Out of Hash Reference
by kvale (Monsignor) on Apr 12, 2004 at 22:43 UTC
    You are very close:
    print @{ $hashRef->{'a','d'} };
    To satisfy operator precedence, the braces are needed in the array dereference.


      I believe you meant:

      print @{ $hashRef }{'a','d'};

      Your code attempts to deref $hashRef->{join $;,'a','d'} which is undefined.

      The first rule of Perl club is - use Perl
      ith rule of Perl club is - follow rule i - 1 for i > 1

        Which can also be written as

        print @$hashRef{'a','d'};

        as outlined in references quick reference (which is how I finally figured out that all of this syntax is pretty easy to keep straight).

        But I think I'd stick with

        print @{$hashRef}{'a','d'};

        as being clearer.

        - tye        

        Blush, a bad test on my part. You are entirely correct.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://344558]
Approved by Enlil
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (9)
As of 2016-07-25 09:16 GMT
Find Nodes?
    Voting Booth?
    What is your favorite alternate name for a (specific) keyboard key?

    Results (223 votes). Check out past polls.