How about "leave"?
leave
<SURROUNDING> | [<SURROUNDING>]<IDENTIFIER>
[ [result] <VALUE-SPEC> ];
Aliases:
=========
return -> "leave sub"
exit -> "leave program" (or is it "thread"?)
break -> "leave loop" (this is shaky: does it deserve to be here?)
last -> "leave block"
Extensions (these are WAY! optional):
==========================
enter $jb BLOCK;
leave $jb [result $val];
You may recognize these from a past life. But now they're like an
inversion of throw-catch/return, since the result is "left".
my $jb;
sub myoutersub()
{
...
$val = enter $jb {
mysub();
...
} if $needwork;
...
return $val;
}
sub mysub()
{
OUTER: for ...
for ...
if $foo ->
{
...
leave block if $bar; # leaves the "if" block
leave sub if $foo > 100; # returns
leave OUTER if is_prime($foo); # last OUTER if ...
}
leave $jb result 0
if $xyz; # Back to myoutersub, leaves block
}
=Austin
--- Larry Wall <[EMAIL PROTECTED]> wrote:
> On 27 Oct 2002, Marco Baringer wrote:
> : why not use -> to create a sub which you can return from?
> :
> : if $foo -> {
> : ...
> : return if $bar;
> : ...
> : }
>
> Except that by the current rule you can only C<return> from something
> that is declared with the word "sub". ->{...} is still just a fancy
> block from that perspective.
>
> : this of course means you can't directly return from the sub (or
> whatever) in
> : which the if (or given or while or for) is nested...
>
> Which is why the rule for "return" says there has to be a "sub",
> because that's what people will usually expect "return" to do, at
> least
> until they get sophisticated about every block being a subroutine.
> And that's also why we need a different way of returning from the
> innermost block (or any labelled block). "last" almost works, except
> it's specific to loops, at least in Perl 5 semantics. I keep
> thinking
> of "ret" as a little "return", but that's mostly a placeholder in
> my mind. I've got a lot of those...
>
> : slightly related:
> :
> : what happens to the return value of the subs passed to for, if,
> while
> : and given statements? (what does '$foo = if $bar { ... } else { ...
> }'
> : do?)
>
> Same thing as in Perl 5. Try this:
>
> print do { if (int rand 2) { "true" } else { "false" } }, "\n";
>
> The only difference is that in Perl 6, there is no cat. :-)
>
> Larry
>
__________________________________________________
Do you Yahoo!?
Y! Web Hosting - Let the expert host your web site
http://webhosting.yahoo.com/