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

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

Suppose I have a hash whose values are anonymous functions, e.g.,
%functions = ( '?' => 0, 'HELLO' => sub { print "Hello, world.\n" }, 'HELP' => sub { print "Type 'hello' or 'goodbye'\n" }, 'GOODBYE' => sub { print "Goodbye...\n"; exit(0) } ); # have to initialize this outside declaration of %functions $functions{'?'} = $functions{'HELP'};
Then, suppose I want to take input from the user and see if the things the user types are keys in the hash. If so, I execute the associated function.
while(<>) { $func = $_; chomp($func); $func = uc($func); if( defined($functions{$func}) ) { ### insert code here to execute function in hash ### } else { print "\"$func\" not defined\n"; } }
My question is this. At the spot to insert the code to execute the function, I would like to do this:
&$functions{$func};
but perl won't let me. I have found that if I do this:
my $code; $code = $functions{$func}; &$code;
it works. Why doesn't the first work?