>>>>> "DL" == David Landgren <[EMAIL PROTECTED]> writes:

  DL> Uri Guttman writes:
  >>>>>>> "AP" == A Pagaltzis <[EMAIL PROTECTED]> writes:
  AP> * Jerrad Pierce <[EMAIL PROTECTED]> [2007-11-23 22:50]:
  >> >> exists( $dispatch{$sub} ) ? $dispatch{$sub}->() :
  >> >> warn "Key <$sub> does not exist in the dispatch table";
  AP> ( $dispatch{$sub} || sub { warn "no such action '$sub'" }
  >> )->();
  >> some variations on that:
  >> my $sub = $dispatch{$key} or die "trying to call missing code" ;
  >> $sub->() ;
  >> or:

  >> my $sub = $dispatch{ $key } || $dispatch{ 'default' } ;


  DL> Why stop there? Assuming $key never evaluates to 0:

  DL>    my $sub = $dispatch{ $key || 'default' };

and what if $key is true but not found?? that is a different
problem. your code doesn't handle that, it only handles a false or missing key

  DL> If it does, wait until 5.10 comes out and:

  DL>    my $sub = $dispatch{ $key // 'default' };

same problem.

  DL> Although there really is little point stuffing the coderef into a
  DL> scalar, it's not like there's anything you can do to it. It's clearer to
  DL> not draw attention to it and just run the damned thing:

  DL>    $dispatch{ $key || 'default' }->();

there are places where you want to delay the call. you may need to pass
the code ref around or call it multiple times or with different args. i
have found that getting the sub is better as a separate step from
calling it.

uri

-- 
Uri Guttman  ------  [EMAIL PROTECTED]  -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs  ----------------------------  http://jobs.perl.org

Reply via email to