http://www.perlmonks.org?node_id=34226


in reply to using a hash of functions

The canonical form of a subroutine invocation is:
$result = & { something_that_returns_coderef } ( @args );
The braces around the coderef expression can be dropped only when the coderef is in a simple scalar variable. Yours was not. So you'd have to use:
& { $functions{$func} }();
However, as of fairly recent Perls, you can also use an arrow form:
$functions{$func}->();
This was added by Chip in 5.4 under some urging by me based on a bet I made that I couldn't get a new feature into 5.4 during the gamma golden release phase. I won. {grin}

-- Randal L. Schwartz, Perl hacker


update: for more details, check out my Linux magazine column on subroutine references, and an older column from UnixReview.