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.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller