in reply to Hash dereferencing

ideally you have to dereference like this
print "Array:", $array[0]->{"one"}, "\n"; print "Hash:", $hash{"ref"}->{"one"}, "\n"; print "Ref:", $ref->{"one"}, "\n";
but in perl -> is optional when dereferencing hash reference(considering your case) so it works.
one more example for you
my $a = { a => { b => { c => ['d'] } }}; print ">",$a->{'a'}->{'b'}->{'c'}->[0],"<\n"; print ">",$a->{'a'}{'b'}{'c'}[0],"<\n";
both the lines print 'd'
from perlreftut manual
Arrow Rule In between two subscripts, the arrow is optional. Instead of $a[1]->[2], we can write $a[1][2]; it means the same + thing. Instead of "$a[0]->[1] = 23", we can write "$a[0][1] = 23"; it means the same thing. Now it really looks like two-dimensional arrays!

Vivek
-- In accordance with the prarabdha of each, the One whose function it is to ordain makes each to act. What will not happen will never happen, whatever effort one may put forth. And what will happen will not fail to happen, however much one may seek to prevent it. This is certain. The part of wisdom therefore is to stay quiet.