I did understand all of that, but I suppose I was asking about why perl was treating it as a reference rather than doing the conversion itself. Regardless though, it all works and thanks. Take care, Sina -----Original Message----- From: programmingblind-bounce@xxxxxxxxxxxxx [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Octavian Rasnita Sent: Tuesday, October 14, 2008 1:35 AM To: programmingblind@xxxxxxxxxxxxx Subject: Re: Perl arrays and hashes Hi, You need to write @{$macs{$key}} and not @macs{$key} because %macs is a hash and not an array to be noted with @ at the beginning. The %macs hash has a key named $key which happends to have an array as a value. So you first need to specify that you want to address the key $key of this hash, using $macs{$key} and derefference it to get its value... the array, using @{$macs{$key}} It is just like when you use my $hash_key = $macs{$key}; my @array = @$macs_key; Of course, you need to add more braces like when you use my @array = @{$hash_key}; because $macs{$key} already contains braces and you need to specify that the entire $macs{$key} is an array reference, not only $hash. Octavian ----- Original Message ----- From: "Sina Bahram" <sbahram@xxxxxxxxx> To: <programmingblind@xxxxxxxxxxxxx> Sent: Monday, October 13, 2008 11:38 PM Subject: RE: Perl arrays and hashes > 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 > __________ 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