X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FScope-Context.git;a=blobdiff_plain;f=samples%2Fsynopsis.pl;fp=samples%2Fsynopsis.pl;h=556dd01b9da56a5515cf6e3b37a14b146185e7de;hp=c531098d2c9c1cbbc2d8b788a9faecaa9f1a3aaa;hb=78cfdeb253000a116c0c48488d2d14dbf61e6d06;hpb=bb41ed6abe5f20bb60a36164f8b2e2179752bbc2 diff --git a/samples/synopsis.pl b/samples/synopsis.pl index c531098..556dd01 100644 --- a/samples/synopsis.pl +++ b/samples/synopsis.pl @@ -7,38 +7,43 @@ use blib; use Scope::Context; +local $" = ', '; + for my $run (1 .. 2) { my @values = sub { local $@; eval { - # create Scope::Context objects - my ($block, $sub, $eval, $loop); + # Create Scope::Context objects for different upper frames : + my ($block, $eval, $sub, $loop); { $block = Scope::Context->new; - $sub = $block->sub; # = $block->up - $eval = $block->eval; # = $block->up(2) - $loop = $eval->up; # = $block->up(3) + $eval = $block->eval; # == $block->up + $sub = $block->sub; # == $block->up(2) + $loop = $sub->up; # == $block->up(3) } eval { - # This will throw an exception, since $block has expired. + # This throws an exception, since $block has expired : $block->localize('$x' => 1); }; print "Caught an error at run $run: $@" if $@; - # This prints "hello" when the eval block above ends. + # This will print "End of eval scope..." when the current eval block ends : $eval->reap(sub { print "End of eval scope at run $run\n" }); - # Ignore $SIG{__DIE__} just for the loop. - $loop->localize_delete('%SIG', '__DIE__'); + # Ignore warnings just for the loop body : + $loop->localize_elem('%SIG', __WARN__ => sub { }); + # But for now they are still processed : + warn "This is a warning at run $run\n"; - # Execute the callback as if it ran in place of the sub. + # Execute the callback as if it ran in place of the sub : my @values = $sub->uplevel(sub { return @_, 2; }, 1); + print "After uplevel, \@values contains (@values) at run $run\n"; - # Immediately return (1, 2, 3) from the sub, bypassing the eval. + # Immediately return (1, 2, 3) from the sub, bypassing the eval : $sub->unwind(@values, 3); # Not reached. @@ -49,5 +54,10 @@ for my $run (1 .. 2) { die $@ if $@; }->(); - print "Values returned at run $run: @values\n"; + print "Values returned at run $run: (@values)\n"; + + # warnings are ignored, so this will be completely silent. + warn "You will not see this at run $run\n"; } + +warn "Warnings have been restored\n";