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

Reply via email to