If something feels redundant, that's probably a good reason to look at putting it in a subroutine. I would do something like this:
sub handle_options
{
my ($hash, $options, $subref) = @_;
foreach my $try (@$options)
{
next unless exists $hash->{$try};
$subref->( $try );
return;
}
die;
}
eval {
handle_options( \%hash, \@options, \&do_something );
}; if {$@) {
log_failure();
}
(Yes, I am really returning undef and die'ing with no string. The key is die/not-die, determining whether or not to trigger the if ($@) { ... } block.)
The really neat thing about this method is that you can handle multiple sets of options in the same eval, so long as they all use the same algorithm.
eval {
handle_options( \%hash1, \@options1, \&do_something1 );
handle_options( \%hash2, \@options2, \&do_something2 );
handle_options( \%hash3, \@options3, \&do_something3 );
}; if ($@) {
log_failure();
}
Note: This will do_something1() for the first set before handling the second set, and so forth. The description you give implies that this should be the case, but it's explicit here.
------
We are the carpenters and bricklayers of the Information Age.
Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose
I shouldn't have to say this, but any code, unless otherwise stated, is untested
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
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, 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, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
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.
|
|