I'm iworking on a patch for Perl 5 that implements the Perl 6 closure traits (ENTER/LEAVE/...) as special blocks. There are several details that aren't clear to me from either S04 or the spec tests; I apologize if these have been discussed before, as I haven't been following p6l. I'm also not subscribed, so if people could keep me in the CC that would be appreciated.
- Presumably when an exception is thrown through a block, the LEAVE and POST queues are called (in that order). What if a PRE block fails: is the POST queue on the same block called? (Do you have to satisfy your post-conditions even if your pre-conditions failed?) - If a POST block is called as a result of a thrown exception, and it fails, which exception 'wins'? - Presumably if an ENTER block dies, the rest of that ENTER queue is abandoned. Does that also apply to the LEAVE queue? What should { LEAVE { say "leave1" } LEAVE { say "leave2"; die "foo"; } } print? Similarly POST: once one post-condition has failed, are subsequent post-conditions checked? - Can a try block catch an exception thrown from its own ENTER or LEAVE queue? For example in this case: try { try { ENTER { die "foo" } CATCH { default { say "caught inside" } } } CATCH { default { say "caught outside" } } } which CATCH block gets the exception? What about PRE/POST: can you CATCH failure of your own pre-/post-conditions? - Does it make any difference in any of the above if 'die' is replaced by 'exit'? Ben