10 for my $run (1 .. 2) {
15 # create Scope::Context objects
16 my ($block, $sub, $eval, $loop);
18 $block = Scope::Context->new;
19 $sub = $block->sub; # = $block->up
20 $eval = $block->eval; # = $block->up(2)
21 $loop = $eval->up; # = $block->up(3)
25 # This will throw an exception, since $block has expired.
26 $block->localize('$x' => 1);
28 print "Caught an error at run $run: $@" if $@;
30 # This prints "hello" when the eval block above ends.
31 $eval->reap(sub { print "End of eval scope at run $run\n" });
33 # Ignore $SIG{__DIE__} just for the loop.
34 $loop->localize_delete('%SIG', '__DIE__');
36 # Execute the callback as if it ran in place of the sub.
37 my @values = $sub->uplevel(sub {
41 # Immediately return (1, 2, 3) from the sub, bypassing the eval.
42 $sub->unwind(@values, 3);
52 print "Values returned at run $run: @values\n";