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--

Reply via email to