Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Attn: Backwards-incompatible change to CATCH_EXCEPTIONS

0 views
Skip to first unread message

Rocco Caputo

unread,
Sep 5, 2013, 8:46:57 PM9/5/13
to poe@perl.org List
I've changed the way CATCH_EXCEPTIONS works with $SIG{__DIE__}.
I broke (and then fixed) one regression test in the process.
If this is a feature you use, please try out the change before
it's released.

Thanks!

https://github.com/rcaputo/poe/commit/52487325a316b2bcc945f0a1f344556b58760ef3

commit 52487325a316b2bcc945f0a1f344556b58760ef3
Author: Rocco Caputo <rca...@cpan.org>
Date: Thu Sep 5 18:52:13 2013 -0400

!!! CATCH_EXCEPTIONS revamp.

May be slightly backwards incompatible. I expect more good to come
from it than harm.

POE should hide error messages less often. Its usage of eval() and
propagation of exceptions have been simplified somewhat.

!!! This change reverses POE's stance on user-defined $SIG{__DIE__}
handlers. Now they are honored inside event handlers. Code that does
this is expected to know what it's doing. Perl's global special
variables, including %SIG, have spooky action at a distance.

Modifying $SIG{__DIE__} locally shouldn't cause any problems. The
original value will be restored at the end of the local scope.

I changed this because reasons:

1. Silent side effects suck. Previously, POE would silently overrule
global changes to $SIG{__DIE__}. This change makes things a little
more comprehensible.

2. $SIG{__DIE__} handlers are very useful for logging and debugging.
Setting them should be permissible.

3. If CATCH_EXCEPTIONS is on, and $SIG{__DIE__} is redefined in an
event handler, the programmer is told about the potential side
effects. This is an experimental warning and is subject to change
more than most things.

4. Error messages were being hidden at work, and it was confounding
development.

--
Rocco Caputo <rca...@pobox.com>

0 new messages