in reply to %h->{foo} vs. $h{foo}..
My take on it goes like this
my %foo; is obviously a hash.
my $foo = \%foo; is a scalar that 'points' to the hash %foo.
x->{fred} says, x is a scalar that points to a hash, and I want to use the element of that hash that has the key 'fred'.
The problem with %h->{fred} is that it implies that %h is a reference, but references are stored in scalars.
%h = (fred=>'bloggs', bill=>'stickers'); $href = \%h; print %h; # Gives fredbloggsbillstickers print $href; # Gives HASH(0xibc2d18)
So, the syntax %h->{fred} essentially is saying that %h is "the hash", but also that %h "points to the hash" which boils down to
%h->%h
which doesn't make a lot of sense. The fact that it ever worked was a mistake. If you try this in 5.8 you get
Using a hash as a reference is deprecated at...
And whilst $hash{fred} will be written as %hash{fred} in P6, I don't believe that %hash->{fred} will be legal.
|
|---|