]> git.vpit.fr Git - perl/modules/Scope-Upper.git/commitdiff
Show unwind() and want_at() in the synopsys and the samples
authorVincent Pit <vince@profvince.com>
Sun, 11 Jan 2009 17:54:42 +0000 (18:54 +0100)
committerVincent Pit <vince@profvince.com>
Sun, 11 Jan 2009 18:03:50 +0000 (19:03 +0100)
MANIFEST
lib/Scope/Upper.pm
samples/try.pl [new file with mode: 0644]

index 4041009db802af78fc15c01a955dc035c3918878..6ddf912f482997f6c7751adcef0e7deac7d5e2e7 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -5,6 +5,7 @@ README
 Upper.xs
 lib/Scope/Upper.pm
 samples/tag.pl
+samples/try.pl
 t/00-load.t
 t/01-import.t
 t/05-words.t
index a315552a6479e83c0121400c3a826e7eece1ebb9..ba26e61291537cb5049c51732a7ecc25036f8247 100644 (file)
@@ -56,6 +56,26 @@ BEGIN {
      ...
     } # "pie: done" is printed
 
+    package Z;
+
+    use Scope::Upper qw/unwind want_at :words/;
+
+    sub try (&) {
+     my @result = shift->();
+     my $cx = SUB UP SUB;
+     unwind +(want_at($cx) ? @result : scalar @result) => $cx;
+    }
+
+    ...
+
+    sub zap {
+     try {
+      return @things; # returns to try() and then outside zap()
+     }
+    }
+
+    my @what = zap(); # @what contains @things
+
 =head1 DESCRIPTION
 
 This module lets you defer actions that will take place when the control flow returns into an upper scope.
diff --git a/samples/try.pl b/samples/try.pl
new file mode 100644 (file)
index 0000000..d49c183
--- /dev/null
@@ -0,0 +1,27 @@
+#!perl
+
+use strict;
+use warnings;
+
+use blib;
+
+use Scope::Upper qw/unwind want_at :words/;
+
+sub try (&) {
+ my @result = shift->();
+ my $cx = SUB UP SUB;
+ unwind +(want_at($cx) ? @result : scalar @result) => $cx;
+}
+
+sub zap {
+ try {
+  my @things = qw/a b c/;
+  return @things; # returns to try() and then outside zap()
+ };
+ print "NOT REACHED\n";
+}
+
+my @what = zap(); # @what contains @things
+my $what = zap(); # @what contains @things
+
+print "zap() returns @what in list context and $what in scalar context\n";