Hi Deb - > -----Original Message----- > From: Deb [mailto:[EMAIL PROTECTED] > Sent: Saturday, March 01, 2003 7:17 PM > To: R. Joseph Newton; Perl List > Subject: Re: shifting through arrays of line data > > > This (code below) makes sense to me, but I was talking this over with a > co-worker on Friday, and then I tried putting together some 2-dimensional > hashes - which hurts my head at the moment. So I went to > perl.plover.com/FAQs to read (again) his article on references, > and I still > have a mental block. Conceptually I understand multi-dimensioned > hashes, but > in practice I have a LOT of trouble with the syntax. > > I need to work hard to solidify how to put it together in a real coded > situation. > > OTH, This code posted below makes more sense to my brain. I was on this > track earlier, but digressed into the above approach - which is > probably more > elegant, but difficult for me to see how to do in practice. > > deb > > > > R. Joseph Newton <[EMAIL PROTECTED]> had this to say, > > > Deb wrote: > > > > > Hi Guys, > > > > > > I have an array in which each element is a line commandline > data. It looks > > > something like this - > > > > > > @Array contains lines: > > > > > > post1: -r [EMAIL PROTECTED] -x cat-100 -h post1 > > > post2: -x tel -h post2 > > > post3: -h post3 -x hifi > > > > The getRelationships sub here has a few less typos, and the > test stub runs well. > > > > #!/usr/bin/perl -w > > > > use strict; > > use warnings; > > > > sub getRelationship($$); > > > > testGetRelationships(); > > > > sub testGetRelationships { > > my $string = "post1: -r [EMAIL PROTECTED] -x cat-100 -h post1"; > > my %relationships; > > > > getRelationship($string, \%relationships); > > > > foreach my $key (keys %relationships) { > > print "$key:=$relationships{$key}\n"; > > } > > } > > > > sub getRelationship ($$) { > > my ($commandline, $relationships) = @_; > > # print "$commandline\n"; #debug > > my @commands = split /\s+-/, $commandline; > > my $key = shift(@commands); > > foreach (@commands) { > > if (s/^x\s+//) {$$relationships{$key} = $_;} > > } > > } > > > >
I went through (over?) the same hurdle several years ago. I'm happy for you that the light is beginning to burn. However, I would advise you to get comfortable with the '->' syntax also; _most_ 'professional' scripts use this representation (just cruse some source code on CPAN). '->' is easy (again, once the light bulb shines, the church bell chimes, the fat lady sings, ...). Here's my trick: Given: $something->{$key}; I see the '->' telling me that the preceding ($something) is a reference. Next, the {} tells me that something is a reference to a hash and $key is the hash key. The same syntax goes for array references: $something->[$index]; Now, to use '->' in multi dimensions, just string them out: $some_hash_ref->{$some_hash_key}->{$another_hash_key}->[$array_index]; Read right to left as: The value of element number $array_index in an array referenced by the key $another_hash_key in a hash referenced by the key $some_hash_key in a hash referenced by $some_hash_ref!!! Easy, yeah? Oh well, keep on trucking' Aloha => Beau; -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]