Hint on local DIE handlers in Eval

Scott Penrose scottp at dd.com.au
Thu Jan 9 23:35:01 CST 2003

On Friday, Jan 10, 2003, at 15:17 Australia/Melbourne, David Dick wrote:

> i've never actually used a DIE handler before.  Why would you use 
> them?  I understand that intercepting a exception thrown by a die and 
> informing the user about it in a graceful fashion is a useful 
> thing(tm), but i tend to use an eval block (or similar such as 
> Error.pm) around the suspect code and a test afterwards.  Is the DIE 
> handler just another example of TIMTOWTDI, or does it have specific 
> advantages/disadvantages (not merely gotchas) associated with it?
> -dave

Well, I guess I could write my code like this...

	eval {
		Here is ALL my code !!!
	if ($@) {
		Nice error messages here for users to see

and that would probably work too

The reasons for doing it can be a little more subtle.

Most notably we tend to write code that looks a little like this...

	use MyErrorCode;


In the MyErrorCode we can then put a die handler, it would not be 
possible (without code rewrite) to then wrap an eval around the code it 
is used in. I believe in fact that this is how Error works :-) Yep just 
checked it. What I was demonstrating is what Error does. But it is 
still an important lesson even when using Error as you can easily break 
Error with the wrong DIE handler etc :-)

Another reason is simplicity (not only for the use I did above) but 
also cause I can do things like this at the start of someone else' cgi 

	$SIG{__DIE__} = sub {
		print MYLOG "$0 error - $_[0]";
		die $_[0];

This is of course a silly example as I have just logged twice :-) but 
has some point, eg: you may have wanted to use SysLog.

Another reason to learn this stuff is how others work. eg: If you 'use 
CGI' CGI can create a DIE handler for you.

Scott Penrose
VP in charge of Pancakes
scottp at dd.com.au

Dismaimer: If you receive this email in error - please eat it 
immediately to prevent it from falling into the wrong hands.

More information about the Melbourne-pm mailing list