http://www.perlmonks.org?node_id=529008


in reply to help in $SIG

From the Camel Book -

The routine indicated by $SIG{__DIE__} is called when a fatal exception is about to be thrown. The error message is passed as the first argument. When a __DIE__ hook routine returns, the exception processing continues as it would have in the absence of the hook, unless the hookroutine itself exits via a goto, a loop exit, or a die. The __DIE__ handler is explicitly disabled during the call, so that you yourself can then call the real die from a __DIE__ handler. (If it weren't disabled, the handler would call itself recursively forever.) The case is similar for __WARN__.

When you call  die "something" the sub ref'ed in  $SIG{__DIE__} is called (you have an anonymous sub in your code). So the top-down approach is broken because your die called the subroutine with your die text as the first arg. If you modify your code to something like this, you will see what is going on -

#!/usr/bin/perl use strict; use warnings; local $SIG{'__DIE__'} = sub { (my $x = $_[0]) =~ s/foo/bar/g; print $x +; die $x; }; eval { die "foo lives here" }; print "got here\n";

Output

bar lives here at testme line 7. got here
As you can see foo changed to bar. Also the program prints got here becaue die was called from an eval block.

As an exercise try deleting eval (just the word from the above code) see what happens -

cheers

SK

Replies are listed 'Best First'.
Re^2: help in $SIG
by uva (Sexton) on Feb 09, 2006 at 06:47 UTC
    thanks SK,,can you give link for learning things like $SIG,$ENV.,etc., $SIG is inbuit one right?
      Check out  perldoc perlvar on your local machine. You can also use the online version of perldoc (nice formatting). Here is the link to perlvar online

      Check out Tutorials and Q&A links. They have very good info. cheers

      SK