X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FScope-Context.git;a=blobdiff_plain;f=lib%2FScope%2FContext.pm;fp=lib%2FScope%2FContext.pm;h=ffc139e1835a1c859db8ca18fdf58ba36eb69d8e;hp=2789f5dc908b830a282d5c97b8a5df5753c5767f;hb=78cfdeb253000a116c0c48488d2d14dbf61e6d06;hpb=bb41ed6abe5f20bb60a36164f8b2e2179752bbc2 diff --git a/lib/Scope/Context.pm b/lib/Scope/Context.pm index 2789f5d..ffc139e 100644 --- a/lib/Scope/Context.pm +++ b/lib/Scope/Context.pm @@ -29,32 +29,33 @@ our $VERSION = '0.02'; for (1 .. 5) { sub { eval { - # Create Scope::Context objects for different upper frames. - 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); }; - # This prints "hello" when the eval block above ends. + # This will print "hello" when the current eval block ends : $eval->reap(sub { print "hello\n" }); - # Ignore $SIG{__DIE__} just for the loop body. - $loop->localize_delete('%SIG', '__DIE__'); + # Ignore warnings just for the loop body : + $loop->localize_elem('%SIG', __WARN__ => sub { }); - # 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); + # @values now contains (1, 2). - # 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. @@ -63,10 +64,13 @@ our $VERSION = '0.02'; # Not reached. }->(); - # unwind() returns here. "hello\n" was printed, and now - # $SIG{__DIE__} is undefined. + # unwind() returns here. "hello\n" was printed, and now warnings are + # ignored. } + # $SIG{__WARN__} has been restored to its original value, warnings are no + # longer ignored. + =head1 DESCRIPTION This class provides an object-oriented interface to L's functionalities.