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.
In reply to Re: canonical doc explaing need for "eval { ... } or do {...}" construct
by ikegami
in thread canonical doc explaing need for "eval { ... } or do {...}" construct
by LanX
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |