the_Don has asked for the wisdom of the Perl Monks concerning the following question:

I would like to know the difference between "%$foo{'bar'}" and "$foo->{'bar'}". To be more specific, I would like to know why and in what instance each form can be used correctly. I have a theory why, but I would like confirmation.

My theory is that the first method needs to have $foo contain the scalar that is that name of a hash that needs to be referenced because that scalar name is looked up in the variable table...
i.e,:

%my_hash = {}; $hash_ref = 'my_hash'; %$hash_ref{'foo'} = 'bar'; #sets %my_hash{'foo'} = 'bar'

So I think the above would work. The difference between the two scenarios is the type of reference. The arrow operator needs to have a reference that points to memory and a value in the variable table.

Is my logic correct? If not, please correct me, but if I am right, at least one person confirm it so I can move on to some more Perl enlightenment.

Thank you.
the_Don

Replies are listed 'Best First'.
Re: Using $foo->{'bar'} and not %$foo{'bar'}
by MrNobo1024 (Hermit) on Sep 10, 2002 at 14:19 UTC
    Did you mean $$ref{foo}? %$ref{foo} is a syntax error.

    It's actually the same as $ref->{foo}, they both can work on either a symbolic or hard reference.