http://qs321.pair.com?node_id=11144316


in reply to FPE not deferred in 5.36

I ran into a FPE once.... and while I've not dug into the details, I can give a somewhat dirty way to reproduce it. It is dirty because the bug causing the FPE has been fixed since then. Here's the code:

$SIG{FPE} = sub { die "Ooops\n" }; use List::Util 'product'; print product(-1,1);

If you run this in vanilla Perl 5.34 or older without a signal handler, it dies with Floating point exception. If you include the handler like I did, you'll get:

Maximal count of pending signals (120) exceeded at fpe.pl line 3.

If you run this in vanilla Perl 5.36, you get the expected result of -1, because the bug (RT139601) has been fixed in that release (in List::Util 1.60, to be precise). But you can catch the FPE by installing an "older" List::Util on top of Perl 5.36:

cpanm https://cpan.metacpan.org/authors/id/P/PE/PEVANS/Scalar-List-Uti +ls-1.59.tar.gz perl fpe.pl

This dies with the message Ooops, so in Perl 5.36 the signal handler works as you'd expect.

Don't forget to upgrade your List::Util after that test :)