Document and test for prev value of $@ in catch
Yuval Kogman [Fri, 11 Sep 2009 17:57:13 +0000 (02:57 +0900)]
Since catch is invoked after the delocalization the previous value of $@
(whether meaningful or not) should still be available.

lib/Try/Tiny.pm
t/basic.t

index e3fdf8d..1c45fa9 100644 (file)
@@ -167,6 +167,10 @@ is the same as
 
        sub { ... }
 
+Inside the catch block the previous value of C<$@> is still available for use.
+This value may or may not be meaningful depending on what happenned before the
+C<try>, but it might be a good idea to preserve it in an error stack.
+
 =back
 
 =head1 BACKGROUND
index 7f1471c..1d257da 100644 (file)
--- a/t/basic.t
+++ b/t/basic.t
@@ -3,7 +3,7 @@
 use strict;
 #use warnings;
 
-use Test::More tests => 21;
+use Test::More tests => 22;
 
 BEGIN { use_ok 'Try::Tiny' };
 
@@ -129,7 +129,7 @@ sub Evil::new { bless { }, $_[0] }
 }
 
 {
-       my $caught;
+       my ( $caught, $prev );
 
        {
                local $@;
@@ -144,8 +144,10 @@ sub Evil::new { bless { }, $_[0] }
                        }
                } catch {
                        $caught = $_;
+                       $prev = $@;
                }
        }
 
        is_deeply( $caught, { prev => "bar\n" }, 'previous value of $@ available for capture' );
+       is( $prev, "bar\n", 'previous value of $@ also available in catch block' );
 }