On Wed, 22 Dec 2010, Torsten Förtsch wrote:
> On Tuesday, December 21, 2010 23:47:42 Mark Hedges wrote:
> > Seems to be some squirliness in this doc. Is this more clear? --mark--
> >
> To me the original version looks clearer. It says quite clearly "if I can
> handle the exception do so else propagate".
>
> However, the sigil before "ref" is certainly a typo. Also, I prefer "and"
> instead of "&&" in such cases. But that's just me.
The original version (ref typo corrected) is this:
eval { $obj->mp_method() };
if ($@ && ref $@ eq 'APR::Error' && $@ == $some_code) {
# handle the exception
}
else {
die $@; # rethrow it
}
In the doc case, it would always die, even when there is no
exception. If the first condition was not true, then 'else'
would die - always.
You could do this:
eval { $obj->mp_method() };
if ($@ && ref $@ eq 'APR::Error' && $@ == $some_code) {
# handle the exception
}
elsif ($@) {
die $@; # rethrow it
}
But it seems logically cleaner to do something like what I suggested.
And, isn't it possible 'ref' is an APR::Request::Error or another
subclass of APR::Error?
eval { $obj->mp_method() };
if ($@) {
my $ref = ref $@;
if ($ref) {
if ($...@->isa('APR::Error') && $@ == $some_code) {
# handle the exception
}
else {
die $@; # rethrow APR::Error
}
}
else {
die $@; # unknown non-blessed error
}
}
--mark--