title: How can I elegantly call a Perl subroutine whose name is held in a variable?
body: <p>I keep the name of the subroutine I want to call at runtime in a variable called $action.  Then I use this to call that sub at the right time:</p>
  
  <pre><code>&amp;{\&amp;{$action}}();
  </code></pre>
  
  <p>Works fine.  The only thing I don't like is that it's ugly and every time I do it, I feel beholden to add a comment for the next developer:</p>
  
  <pre><code># call the sub by the name of $action
  </code></pre>
  
  <p>Anyone know a prettier way of doing this?</p>
  
  <hr>
  
  <p>UPDATE: The idea here was to avoid having to maintain a dispatch table every time I added a new callable sub, since I am the sole developer, I'm not worried about other programmers following or not following the 'rules'.  Sacrificing a bit of security for my convenience.  Instead my dispatch module would check $action to make sure that 1) it is the name of a defined subroutine and not malicious code to run with eval, and 2) that it wouldn't run any sub prefaced by an underscore, which would be marked as internal-only subs by this naming convention.</p>
  
  <p>Any thoughts on this approach?  Whitelisting subroutines in the dispatch table is something I will forget all the time, and my clients would rather me err on the side of "it works" than "it's wicked secure".  (very limited time to develop apps)</p>
  
  <hr>
  
  <p>FINAL UPDATE: I think I've decided on a dispatch table after all.  Although I'd be curious if anyone who reads this question has ever tried to do away with one and how they did it, I have to bow to the collective wisdom here.  Thanks to all, many great responses.</p>