From: Larry Wall <[EMAIL PROTECTED]> Date: Thu, 24 Jan 2008 09:52:16 -0800
In addition to what Patrick said, which is all right on the mark, I'd like to point out a few additional subtleties. Perl borrows an important idea from Lisp and separates the notion of stack unwinding from that of exception handling; when you throw an exception (including a control exception) you look for a handler without unwinding the stack. Only after you have determined which handler handles the exception do you decide what to do with the stack. (Among other things, this lets you treat warnings as merely a resumable form of exception, which lets you use exception handlers to trap warnings propagating outward instead of inventing a separate mechanism for that. Non-destructive control flow also tends to be friendlier to concurrency.) One of those other things (which I hope you don't mind me adding) is that search-before-unwind also supports default exception handlers with an elegantly simple idiom: In the default handler, resignal the error; if it returns, it's all yours. The "Default Handling" section of [1] has a fuller explanation in the context of Lisp dialects and their influences. -- Bob Rogers http://rgrjr.dyndns.org/ [1] http://www.nhplace.com/kent/Papers/Condition-Handling-2001.html