On 3/7/06, Jay Savage <[EMAIL PROTECTED]> wrote: snip > Since eval traps die, 'eval{ eval {} or die [EMAIL PROTECTED];};' is a > convenient > method for propagating $@ out of deeply nested evals. It's just a way > to save writing lots of if blocks that do nothing but pass $@ along. snip
You had better be careful with the 'or' there. The return value of an eval is that of the last statement executed. This means that eval { $a = 0 } or die $@ ; will fail even though the block did not have an error. The safe way to handle blocks is to check the value of $@ and die if it is set: eval { $a = 0 }; die $@ if defined $@; Although I believe you can always get away with shortening it to eval { $a = 0 }; die $@ if $@; since die() always (I think) adds on "at X line Y.". -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>