in reply to RE: RE: Many-To-Many Relationship
in thread Many-To-Many Relationship

That's not exactly what it does. It's functionally the programmatic reverse of the array: push @{ $First{  $A[$_] } }, $_ for (0..$#A); Let's take it from the inside out:
$A[$_] -- the element of @A at the current index $First{ $A[$_] } -- the previous line is a key in %First @{ } -- and the associated value is an anonymous array
So what the code does is, loop over the number of elements of @A. (If it has ten, the loop goes from 0 to 9). For each of those indices, the value at that index becomes a key in %First, and the value is the element's index, stored in an anonymous array. We have something like this:
Elements of @A: 0 zero 1 one 2 two Elements of %First: zero [ 0 ] one [ 1 ] two [ 2 ]
While we can look something up in @A by its index, we can look up the index in %First if we know the something.

Oh, and in Perl hashes have something called auto-vivification. If you access a hash key that doesn't exist (and try to put data there), the key will be created. (Useful, once you get used to it.)

Replies are listed 'Best First'.
RE: RE: RE: RE: Many-To-Many Relationship
by Anonymous Monk on Jun 12, 2000 at 20:09 UTC
    Thanks Chromatic. I think that I misinterpreted the Camel Book statement that "Hash values do not spring into existence upon reference." They may not spring into existence upon REFERENCE, but they do spring into existence if something tries to insert a value there. Now it makes sense.