All~ On 6/7/05, Luke Palmer <[EMAIL PROTECTED]> wrote: > 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.
You are right. I yield... It just made by brain hurt, now that it is somewhat fortified with caffeine I see. Matt -- "Computer Science is merely the post-Turing Decline of Formal Systems Theory." -???