My gut-level feeling on this is that $! is going to end up being an
"env" variable like $_. (If you don't know what "env" is then you've
not read the conjectural parts of S2 lately.) Then the problem reduces
to what you do with an unhandled $! at the end of a lexical scope,
which is probably just to fail, insofar as this style of processing is
treating the rest of the block as an implicit catch block. We'd also
have to determine what "handled" means. Probably just evaluating
$! for boolean is sufficient to mark it as handled.
With the env solution, if an inner sub wants to refer to its caller's
$!, it'd use $+! or ENV::<$!> instead of $!. And $! passed to a sub
as an argument would simply be a different variable, just as everyone
gets their own $_ right now.