I ran into a potential problem when writing some code this weekend.
I'm running a network socket to pick up data and then run it against a
database connection before I return the response. Essentially it falls
into a few steps:
read from network
read from database
write to database
do something else on network
write to network
Being the cautious code writer I thought it would make sense to use
something like:
eval{
alarm(10);
"read from network"
"read from database"
....
}
But each of these database calls has it's own eval{} around the database
query (as an example):
my $rv;
eval {
$rv = $dbh->do($sql) or die $!;
};
if ( $@) {
die "[EMAIL PROTECTED]"
} else {
return $rv;
}
Which essentially means if I flattened out all the subroutines I would
end up with something like
eval {
...
eval {....}
if ($@) { }
eval { ... }
if ($@) {...}
}
if ($@) {
.....}
The problem I run into is throwing the exceptions up to the top eval{}
structure when I need to communicate that something didn't work right
so I can provide feedback to the network client connection.
I suppose I could try and rewrite the code to un-nest the eval{}
statements but I think that is avoiding learning something I should know
about how to manage eval{} for block exception handling.
Is there some way to rethrow or propogate errors or some tips on how to
manage this better?
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>