in reply to canonical doc explaing need for "eval { ... } or do {...}" construct
Since 5.28, it doesn't matter.
Before, especially before 5.14, $@ could get clobbered, so if eval { ... ; 1 } was more reliable.
There was a time where it was possible for $@ to get cleared or replaced before eval returned.
package Mod { DESTROY { eval { } } } eval { my $x = bless( {}, "Mod" ); die( "xxx\n" ); }; print $@ || "[undef]\n";
$ 5.12t/bin/perl a.pl [undef]
This has been fixed.
$ 5.14t/bin/perl a.pl xxx
So, using eval { ...; 1 } and checking the result of eval was more reliable. And it was promoted as the more reliable solution for this reason. There was an attempt to fix in 5.14, but edge cases were only fixed in 5.28.
Updated to cover edge cases found later, as per choroba's reply.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: canonical doc explaing need for "eval { ... } or do {...}" construct
by choroba (Cardinal) on May 11, 2022 at 16:22 UTC | |
by ikegami (Patriarch) on May 11, 2022 at 17:50 UTC |