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 Itry 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, andeach 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