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
script
$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
--
Scott Penrose
VP in charge of Pancakes
http://linux.dd.com.au/
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