Uri Guttman writes:

  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.

I see what you and Aristotle are saying. In my own code I arrange things so that you're never actually feeding random strings into the dispatch table, I make sure the values are restricted to a finite domain beforehand, so I can't say I've been bitten by that.

And point taken re: calling it multiple times.

David

Reply via email to