Yes, there are many
other ways of doing this. Now, better is up to you (and the people who will be maintaining your code a year from now).
A few comments (in no particular order)
- Your variable names are horrible. You're not paying per keystroke, nor are you charged per byte in your source file. The compiler doesn't care, but your maintainer will, so spend some time coming up with more descriptive variable names.
- You seem to be calling the same function without passing any parameters in, so it's not clear exactly what kind of decisions you're making. Also, it's not clear what the context is around this snippet.
Before I give alternatives, I'm going to make a few assumptions:
- You are running this snippet in some loop. The various parameters can change, depending on conditions that the loop iteration will discover
- notify() (or whatever function(s) you might need to call) do not accept parameters.
- All these parameters are boolean (true or false).
Some options:
-
while (1)
{
my %options = discover_my_options();
next unless $options{ma} && $options{sy};
if ($options{a1})
{
do_a1();
next;
}
if ($options{tr})
{
do_tr();
next;
}
if ($options{ge})
{
do_ge();
next;
}
}
-
my %dispatch_table = (
a1 => \&do_a1,
tr => \&do_ge,
ge => \&do_tr,
);
while (1)
{
my ($skip_iteration, $value) = discover_my_options();
next if $skip_iteration;
my $function = $dispatch_table{$value} || next;
$function->();
}
The first is a cleanup of your existing the code. The second is a way of parameterizing function calls. This isn't something only Perl can do. MUD code has been doing this since the late 80's, and that was (usually) written in C, using funcp's.
------
We are the carpenters and bricklayers of the Information Age.
Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.