The problem is that you misunderstand how Perl parses your
code. When you write &$hash{test} Perl treats that as
{&$hash}{test}, $hash has not been declared, and strict
informs you of that. But by adding the braces where you
intended them to go you force Perl to behave as you thought
it should, and it works.
Incidentally this is a case where you should send merlyn
a note of personal thanks for thinking up the very nice
piece of syntactic sugar: $hash{test}->();