Simpler:

if (!eval {
    # try
    ...
    return 1; # ok
}) {
    # catch
    ...
}

On Jul 11, 2017 12:06 PM, "Paul Hoffman" <nkui...@nkuitse.com> wrote:

On Mon, Jul 10, 2017 at 09:44:15PM +0100, Zefram wrote:
> Thomas (HFM) Wyant wrote:
> >One of the edge cases with eval {} is the possibility that $@ gets
> >clobbered before you get your hands on it.
>
> The possibility of it being clobbered by a destructor was fixed in 5.14.
> (Destructors that do this are considered buggy, for pre-5.14 perls,
> and are individually easy to fix, so the problem is still manageable on
> those perl versions.)

And in perl < 5.14 you can work around it easily enough:

    my $ok;
    eval {
        ...
        $ok = 1;
    };
    if ($ok) {
        ...
    }

Paul.

--
Paul Hoffman <nkui...@nkuitse.com>

Reply via email to