Haven't those issues with eval been addressed in more recent versions of
Perl?

For example, in older Perls this used to reset $@, but now $@ is retained:

use strict;
use warnings;

sub Foo::DESTROY {
    print "in Foo Destroy\n";
    eval { 1 };
    print "Foo has \$@ as '$@'\n"
    return;
}

eval {
    my $foo = bless {}, 'Foo';
    die "BOOM\n";
};
print "eval with $@\n";


Returns:

in Foo Destroy
Foo has $@ as ''
eval with BOOM




On Wed, Jul 5, 2017 at 8:52 AM, Dave Rolsky <auta...@urth.org> wrote:

> On Wed, Jul 5, 2017 at 10:23 AM, Eric Brine <ikeg...@adaelis.com> wrote:
>
>> On Wed, Jul 5, 2017 at 10:59 AM, Thomas (HFM) Wyant <
>> harryfm...@comcast.net> wrote:
>>
>>> One of the edge cases with eval {} is ...
>>>
>>
>> All the edge cases are covered by the previously linked:
>> https://metacpan.org/pod/Try::Tiny#BACKGROUND
>>
>
> Yes, this is exactly why I would recommend always using Try::Tiny over
> plain eval.
>
> Cheers,
>
> Dave Rolsky
> http://blog.urth.org
> https://github.com/autarch
>
>


-- 
Bill Moseley
mose...@hank.org

Reply via email to