This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #49522] state variable not available
[perl5.git] / t / op / state.t
index 411ffaa..953cd26 100644 (file)
@@ -10,7 +10,7 @@ BEGIN {
 use strict;
 use feature ":5.10";
 
-plan tests => 123;
+plan tests => 130;
 
 ok( ! defined state $uninit, q(state vars are undef by default) );
 
@@ -354,6 +354,50 @@ foreach my $forbidden (<DATA>) {
     eval $forbidden;
     like $@, qr/Initialization of state variables in list context currently forbidden/, "Currently forbidden: $forbidden";
 }
+
+# [perl #49522] state variable not available
+
+{
+    my @warnings;
+    local $SIG{__WARN__} = sub { push @warnings, $_[0] };
+
+    eval q{
+       use warnings;
+
+       sub f_49522 {
+           state $s = 88;
+           sub g_49522 { $s }
+           sub { $s };
+       }
+
+       sub h_49522 {
+           state $t = 99;
+           sub i_49522 {
+               sub { $t };
+           }
+       }
+    };
+    is $@, '', "eval f_49522";
+    # shouldn't be any 'not available' or 'not stay shared' warnings
+    ok !@warnings, "suppress warnings part 1 [@warnings]";
+
+    @warnings = ();
+    my $f = f_49522();
+    is $f->(), 88, "state var closure 1";
+    is g_49522(), 88, "state var closure 2";
+    ok !@warnings, "suppress warnings part 2 [@warnings]";
+
+
+    @warnings = ();
+    $f = i_49522();
+    h_49522(); # initialise $t
+    is $f->(), 99, "state var closure 3";
+    ok !@warnings, "suppress warnings part 3 [@warnings]";
+
+
+}
+
+
 __DATA__
 state ($a) = 1;
 (state $a) = 1;