develooper Front page | perl.perl5.porters | Postings from February 2003


Thread Previous | Thread Next
Nicholas Clark
February 23, 2003 07:35
Message ID:
On Sun, Feb 23, 2003 at 06:37:28AM -0800, Gurusamy Sarathy wrote:
> On Sun, 23 Feb 2003 14:45:06 +0200, Jarkko Hietaniemi wrote:
> >Here's a patch for enabling in runtime the Old Way Of Signals.
> >After much waffling I settled on the $SIG::UNSAFE name for the
> >control variable, which (I think) falls at the right balance of
> >backward portability, least danger of stomping on a user variable,
> >and aesthetics.
> Not having looked at the patch, $SIG::UNSAFE doesn't seem all
> that consistent to me.  Is there a precedent for this style
> of setting a flag?
> IOW, why not C< ${^UNSAFE_SIGNALS}++ >?

$ perl5.00404 -e '${^UNSAFE_SIGNALS}++'
syntax error at -e line 1, near "{^"
Execution of -e aborted due to compilation errors.
$ perl5.00503 -e '${^UNSAFE_SIGNALS}++'
syntax error at -e line 1, near "{^"
Execution of -e aborted due to compilation errors.

I think it was felt unwise to introduce something that would be a syntax
error on earlier perl versions, given that it is a feature likely to be
wanted for scripts that have to work across several perl versions. In fact,
it's a feature designed to give newer perl the same semantics as those
older perl versions, which I presume is intended to allow older scripts to
work as expected on recent perl versions, and hence to allow sysadmins to
upgrade without things breaking.

> Or even better yet C< $SIG{__ALL__} = 'IMMEDIATE' >?  This could
> be extended in future to allow more specific behaviors:
> C< $SIG{__ALL__} = 'IGNORE' > would of course disable signal
> handling altogether, which is something one may want to do
> when executing unsafe code or when creating threads or when
> running embedded in another application.

I like this idea as described. But it has implications:

Conceptually what happens when I go $SIG{__ALL__} = 'DEFAULT'; ?
And presumably local $SIG{__ALL__} = 'IGNORE'; restores all old signal
handlers at scope exit?

In what state does

  local $SIG{__ALL__} = 'IGNORE';
  $SIG{ALARM} = \&pie;

leave the alarm handler?

Nicholas Clark

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About