On 6/7/05, Matt Fowles <[EMAIL PROTECTED]> wrote: > On 6/7/05, Ingo Blechschmidt <[EMAIL PROTECTED]> wrote: > > Hi, > > > > sub foo (Code $code) { > > my $return_to_caller = -> $ret { return $ret }; > > > > $code($return_to_caller); > > return 23; > > } > > > > sub bar (Code $return) { $return(42) } > > > > say foo &bar; # 42 or 23? > > > > I think it should output 42, as the return() in the pointy > > block $return_to_caller affects &foo, not the pointy block. > > To leave a pointy block, one would have to use leave(), right? > > I don't like this because the function bar is getting oddly > prematurely halted.
Then let's put it this way: sub foo () { for 0..10 { when 6 { return 42 } } return 26; } And if that didn't do it, then let's write it equivalently as: sub foo () { &map(-> $_ { return 42 }, 0..10); return 26; } Do you see why the return binds to the sub rather than the pointy now? Also, we're going to be avoiding the return continuation problem with: sub foo() { return -> { return 42 }; } my $code = foo(); say "Boo!"; $code(); Says not: Boo Boo Boo ... But: Boo Can't return from subroutine that already returned at <eval> line 2. Luke