>I want last, next, etc. to magically work where I want them to:
> do {
> last if /booger/;
> ...
> } while ( ... );
Special cased for postfix modifiers, or generalized? If so,
what's the return value?
$x = TERM OP do { BLOCK } OP TERM;
Actually, these are all pretty similar in that regard:
do { BLOCK }
eval { BLOCK }
sub { BLOCK }
In that do{} and eval{} both do the same thing--run that code
now--but that eval{} traps exceptions. sub{}, meanwhile, returns
a handle to that block for subsequence execution. Or you could
say that eval{} and sub{} both do the same thing insofar as return
will exit either of them, but return does not work on do{}.
run when? trap exceptions? exit via?
do now no ---
eval now yes return
sub later no return
Actually, you *can* last out of an eval{} or a sub{}, but only
in the case that they themselves had a real loop in dynamic scope.
It's not an immediate "return from this named block wherever I am",
though, as it depends on whether there are loops inside the sub and
whether there are any outside of it.
One could argue that do{} should take return so it might have a value,
but this will definitely annoy the C programmers.
--tom