sub foo () {
say "hello";
my $x := bar();
say "goodbye $x";
}
Equivalent to this:
sub foo () {
say "hello";
-> $x {
say "goodbye $x";
}.(bar());
}
Then observe:
sub foo() {
say "hello";
my $x := 1|2|3;
say "goodbye $x";
}
foo();
__END__
hello
goodbye 1
goodbye 2
goodbye 3
If you bind an existing variable (instead of introducing a new one
with my), you get a delimited continuation for the scope of that
variable. Consequently, if you bind a global, you get a full
continuation.
I know, I know, this is putting continuations into the realm of
!/<upper>{10...}/, but I have an argument for this. The only people
who will ever see the continuations are the people *implementing*
junctions and junction-like things. And those people are already
gurus, so they should be comfortable in dealing with continuations.
The only other time that a user might get caught with continuation
"weirdness" is if they're binding to junctions as above (since there
are no other such values in the language... just yet). And with the
default "no junctions", junctions aren't allowed in variables anyway,
so what do they expect?
Luke