Beefy Boxes and Bandwidth Generously Provided by pair Networks Joe
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: improve ugly flow control

by dragonchild (Archbishop)
on Sep 19, 2004 at 10:12 UTC ( [id://392185]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to improve ugly flow control

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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://392185]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.