Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re^5: hash & arrays

by colwellj (Monk)
on Nov 04, 2009 at 23:04 UTC ( [id://805092]=note: print w/replies, xml ) Need Help??


in reply to Re^4: hash & arrays
in thread hash & arrays

Spooky, try this.
my %hash = []; #explicitly create a hash of arrays structure for clari +ty #push your items into the array - this will create the hash $userid if + it dosent already exist push @{$hash{$userid}}, ($title, $adjst, $adjst2, @{$linex}) #@{$linex) says i am a list #then to get a particular emement print OUTPUT $hash{$userid}[0]; #prints $title for that user
John

Replies are listed 'Best First'.
Re^6: hash & arrays
by fullermd (Priest) on Nov 05, 2009 at 13:28 UTC

    Your example code isn't doing what you're saying it is...

    my %hash = []; #explicitly create a hash of arrays structure for clari +ty

    This doesn't mean anything, and is in fact an error; you can't assign a single scalar (an array reference in this case) to a hash.

    #push your items into the array - this will create the hash $userid if + it dosent already exist push @{$hash{$userid}}, ($title, $adjst, $adjst2, @{$linex}) #@{$linex) says i am a list

    $userid isn't a hash. %hash is. $hash{$userid} is a hash element. In saying @{$hash{$userid}} you're asking perl to treat that hash element as an array reference, and dereference it; in this case, the element doesn't exist, and so is created as what it ostensibly is (an array ref), and then used via push to push those elements onto it. The parenthesis are unnecessary and don't mean anything here.

    Also, $linex in his code sounds like a string, not an array ref.

      OK, I coded the following which seems to work - although I'm quite sure why it works: my %hash ; $title = 'engineer' ; $num = 23.4 ; $userid = 'ewh1234' ; @linx2 = (1, 2, 3) ; $hash{$userid} = [$title, $num, $linx2[0], $linx21, $linx2]; print "@{$hash{$userid}}\n" ; print "$hash{$userid}4\n" ; which produces: engineer 23.4 1 2 3 3 I have to learn more about hashes versus arrays - thanks for your help...
Re^6: hash & arrays
by Spooky (Beadle) on Nov 05, 2009 at 12:47 UTC
    thanks John - but what if I want to pull an element from $linex which I've broken up using the split option - that's what I'm really after....Spooky ps - Spooky is the name of my mini-cooper s (yeah - it's black!) named after one of my favorite songs performed by Classics 4 and recently recorded by Imogen Heap..just an fyi... John, When I run the following: %hash = [] ; $title = 'engineer' ; $usr = 'ewh1234' ; @mylist = (1, 2, 3) ; push @{$hash{$usr}}, ($title, @{$mylist}) ; print "$hash{$usr} [0]" ; I get the following: ARRAY(0x2001dbe0) [0] I was expecting 'engineer' - of course what I really want is to access an element with @mylist....

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (7)
As of 2024-04-23 20:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found