Seems pretty clear-cut to me ... Plus, it's extensible. If you have a $quz you want to put in, add your QUZ entries to the dispatch and then change whatBarBaz() to allow for QUZ.sub whatFoo { if ($_[0] > 7) { return 'ONE' } else { return 'TWO' } } sub whatBarBaz { my ($bar, $baz) = @_; return 'BAR' if $bar; return 'BAZ' if $baz; return 'DEFAULT'; } sub no_op { } my %Dispatch = ( ONE => { BAR => \&firstBar, BAZ => \&firstBaz, }, TWO => { BAR => \&secondBar, BAZ => \&secondBaz, }, ); # Put the defaults in as NO-OPs, unless we already have a # default action foreach my $key (keys %Dispatch) { $Dispatch{$key}{DEFAULT} = \&no_op unless exists $Dispatch{$key}{DEFAULT}; } my $func = $Dispatch{whatFoo($foo)}{whatBarBaz($bar, $baz)}; $func->(@someArgs);
------
We are the carpenters and bricklayers of the Information Age.
Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.
In reply to How to build a real multi-level dispatch table
by dragonchild
in thread Why I Hate Nested If-Else blocks
by jeffa
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |