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.,
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.%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'};
My question is this. At the spot to insert the code to execute the function, I would like to do this: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"; } }
but perl won't let me. I have found that if I do this:&$functions{$func};
it works. Why doesn't the first work?my $code; $code = $functions{$func}; &$code;
Back to
Seekers of Perl Wisdom