I'm off to try this out, but can you please explain why that is? I do understand why you're doing what you're doing, but I'm unclear as to why perl isn't doing this automatically? Take care, Sina -----Original Message----- From: programmingblind-bounce@xxxxxxxxxxxxx [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Octavian Rasnita Sent: Monday, October 13, 2008 4:24 PM To: programmingblind@xxxxxxxxxxxxx Subject: Re: Perl arrays and hashes Hi, You need to use: for my $key (sort(keys(%macs))) { print "$key\n"; for my $val (@{$macs{$key}}) { print "$val\n"; } print "\n"; } Octavian ----- Original Message ----- From: "Sina Bahram" <sbahram@xxxxxxxxx> To: <programmingblind@xxxxxxxxxxxxx> Sent: Monday, October 13, 2008 10:50 PM Subject: Perl arrays and hashes > Hi all, > > I have a very simple program that loops through a file, whose structure is > like this. > > Key name: > Value1 > Value2 > Value3 > ... > > Key name: > Value1 > Value2 > ..... > > Key name: > Value1 > Value2 > Value3 > Value4 > ... > > And so on > > Not hard, right? > > I use the following snippet of code to parse that file. > > *** > > open(MACS, "macs.txt"); > > my @macsFromFile = <MACS>; > chomp @macsFromFile; > > my %macs; > my $i = 0; > for my $mac (@macsFromFile) > { > if($mac =~ /10.110.0.*/) > { > $key = $mac; > $i = 0; > @macs{$key} = (); > } > > $macs{$key}[$i++] = $mac if($mac =~ /05:.*/); > } > > *** > > Anyways, as far as I can tell, that works fine. When I print out the keys > of > that hash, I get all the ip addresses I was looking for, but heaven forbid > I > try to get the values. That's an insane nightmare. > > How can I loop through that hash, with each key, looping through each of > the > arrays stored at each key's index. After all, each key is an IP address, > and > each IP address has a series of mac addresses associated with it in this > file, in the form of them being in an array assigned to that key in the > hash. > > So I wanted to make sure I parsed the file write. Thus, why not just print > it out again and compare against the original. I tried the following. > > *** > > for my $key (sort(keys(%macs))) > { > print "$key\n"; > for my $val (@macs{$key}) > { > print "$val\n"; > } > print "\n"; > } > > *** > > It prints out a single memory address rather than the list of the contents > of that array. > > Why does it do this? > > I am using a for each construct to itterate through an array, and I use > the > @ to indicate that I want array context to be used when I parse > @macs{$key} > ... What the heck else should I do to make perl understand I want to loop > through the array stored at @macs{$key}? > > Maybe I'm not doing this right up top? That's what I think the problem is. > Somehow I've given my hash a reference to an array, rather than the array > itself. > > Help! > > Take care, > Sina > > __________ > View the list's information and change your settings at > //www.freelists.org/list/programmingblind > __________ View the list's information and change your settings at //www.freelists.org/list/programmingblind __________ View the list's information and change your settings at //www.freelists.org/list/programmingblind