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.