* Bill Gradwohl <[EMAIL PROTECTED]> [2006-01-11T09:08:15]
> while ( ($k,$v) = each %father ) {
> push( @{ $children{$v} }, $k );
> }
>
> It's the push line I'm having difficulty with. Here's what I understand:
>
> The outermost {} can be removed to simplify it to :
> push( @$children{$v}, $k);
You understand incorrectly.
If it was @{ $foo } you could simplify to @$foo, but you cannot
simplify what you see to what you said.
@{ $children{$v} } means:
get the scalar stored in $children{$v} (which is an entry in
%children) and dereference it as an array
In other words:
my $entry = $children{$v};
@$entry;
@$children{$v}, which you suggested, would mean:
get the hash slice of all entries in the hash to which $children
refers, containing the following keys: $v
In other words, with an only slight change in meaning:
my $hashref = $children;
my %hash = %$hashref;
@hash{($v)};
--
rjbs
pgpLcFGLnrHgf.pgp
Description: PGP signature
