>>>>> "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