in reply to Foreach on an array (of hashes)

Others have adequately explained why $hash{$key} won't work (since this accesses %hash, not a reference in $hash). The reason why $array[$index]{$key} works when $array[$index] is a reference is because Perl makes it work for you. Perl tries to make accessing complex data structures easy for you, and since $array[$index] can't be anything but a reference to a hash, there's no harm or ambiguity in treating $array[$index}{$key} like $array[$index]->{$key}. You can reference any level of data this way.

Please read perlref, perlreftut, perldsc and perllol for information about references and complex data structures with them.