How can I elegantly call a Perl subroutine whose name is held in a variable?

Rather than storing subroutine names in a variable and calling them, a better way to do this is to use a hash of subroutine references (otherwise known as a dispatch table.)

my %actions = ( foo => \&foo,
                bar => \&bar,
                baz => sub { print 'baz!' } 
                ... 
              );

Then you can call the right one easily:

$actions{$action}->();

You can also add some checking to make sure $action is a valid key in the hash, and so forth.

In general, you should avoid symbolic references (what you’re doing now) as they cause all kinds of problems. In addition, using real subroutine references will work with strict turned on.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)