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.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|