http://qs321.pair.com?node_id=136318


in reply to Defense of nested ifs
in thread Why I Hate Nested If-Else blocks

Using Ovid's example above ...
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);
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.

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