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

Re: return() in pointy blocks

Thread Previous | Thread Next
Matt Fowles
June 7, 2005 09:37
Re: return() in pointy blocks
Message ID:

On 6/7/05, Ingo Blechschmidt <> 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) {

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.

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

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About