Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Hash throws out duplicate values

by ikegami (Patriarch)
on Oct 12, 2009 at 08:49 UTC ( [id://800632]=note: print w/replies, xml ) Need Help??


in reply to Hash throws out duplicate values

If you don't want to lose records, stop overwriting them.
$s = 123; $s = 456; print "$s\n"; # 456 $a[1] = 123; $a[1] = 456; print "$a[1]\n"; # 456 $h{foo} = 123; $h{foo} = 456; print "$h{foo}\n"; # 456
Maybe what you want is an hash of arrays?
push @{ $h{$k} }, 123; push @{ $h{$k} }, 456; print "$_\n" for @{ $h{$k} }; # 123, 456

Replies are listed 'Best First'.
Re^2: Hash throws out duplicate values
by spickles (Scribe) on Oct 12, 2009 at 08:56 UTC

    I was going to use a hash of arrays, but that will get messy real quick. So how would I use a while loop to connect to my database and populate each record of the hash? Here's my current code:

    while (my $records = $query_handle->fetchrow_hashref) { my $new_name = $records->{'ap_name'}; my $location = $records->{'building'}; my $first_name = $records->{'primary_name'}; my $first_ip = $records->{'primary_ip'}; my $second_name = $records->{'secondary_name'}; my $second_ip = $records->{'secondary_ip'}; my $third_name = $records->{'tertiary_name'}; my $third_ip = $records->{'tertiary_ip'}; my $group = $records->{'bldg_short'}; my $five_channel = $records->{'five_channel'}; my $configured = $records->{'configured'}; my $mac_name = $records->{'mac_name'}; #Add each element as a hash to an Array of Hashes (AoH) my $new_hash = { new_name => $new_name, location => $location, first_name => $first_name, first_ip => $first_ip, second_name => $second_name, second_ip => $second_ip, third_name => $third_name, third_ip => $third_ip, group => $group, five_channel => $five_channel, configured => $configured, mac_name => $mac_name }; push (@aps, $new_hash); }

    Can I step through the array 'records' and enter unique records using a loop with $i? I don't know where to place the $i to make it work.

      What's the key? Do you even need a hash? You haven't said what you're trying to do.

      I am curious, when I look at your input, I see 11 comma separated fields. When I look at your hash record field names, I see 12. Where did 'ap_name' go to or rather where could it come from? There seems to be a field missing. Perhaps I am blind and/or am miscounting. Either thing could be! I am also curious as to why you wouldn't use the same $var name as the hash key, ie, instead of my $new_name = $records->{'ap_name'}; Why not my $ap_name = $records->{'ap_name'} ?

        What I'm trying to do is pull records from a database that has information about how an access point should be configured. I wanted to read that data into an array of hashes so that I could then step through each of the elements and repeat the commands I would type at the command prompt to configure them and automate the process. The reason for the use of $new_name and $old_name is so that during the automation process I can keep track of which variable I am using. When the database info is imported, the ap name is the new one it needs to be changed to. I run a different sub to query the ap for its old name, which happens to be the default name it boots up with. Then, to change its name, I issue the command 'config ap name <new> <old>' So, as I said, I thought an array of hashes would be the ticket, and that I would then just step through the array and duplicate all of my cli commands.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (5)
As of 2025-07-10 13:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.