]> git.vpit.fr Git - perl/modules/Scope-Context.git/commitdiff
Update synopsis
authorVincent Pit <vince@profvince.com>
Tue, 17 Mar 2015 13:40:56 +0000 (10:40 -0300)
committerVincent Pit <vince@profvince.com>
Tue, 17 Mar 2015 13:40:56 +0000 (10:40 -0300)
lib/Scope/Context.pm
samples/synopsis.pl

index 2789f5dc908b830a282d5c97b8a5df5753c5767f..ffc139e1835a1c859db8ca18fdf58ba36eb69d8e 100644 (file)
@@ -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<Scope::Upper>'s functionalities.
index c531098d2c9c1cbbc2d8b788a9faecaa9f1a3aaa..556dd01b9da56a5515cf6e3b37a14b146185e7de 100644 (file)
@@ -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";