develooper Front page | perl.perl6.language | Postings from June 2005

Re: return() in pointy blocks

Thread Previous | Thread Next
From:
Matt Fowles
Date:
June 7, 2005 09:37
Subject:
Re: return() in pointy blocks
Message ID:
f2601a7f05060709362dd633ac@mail.gmail.com
Ingo~

On 6/7/05, Ingo Blechschmidt <iblech@web.de> 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.  If bar had read

sub bar(Code $moo) {
    $moo(13);
    save_the_world();
}

it would not have gotten to save the world.  One might argue that $moo
could throw an exception, but bar has a way to catch that.

It seems to me that what you are asking for has the potential to cause
some vary large unexpected jumps down the stack.  That said, I would
want the pointy subs in for loops to ask this way, so maybe this is
just one of those things that one has to be ware of.

Matt
-- 
"Computer Science is merely the post-Turing Decline of Formal Systems Theory."
-???

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About