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

Reply via email to