stop t/op/write.t failures under stdio by always closing files
[p5sagit/p5-mst-13.2.git] / pad.c
diff --git a/pad.c b/pad.c
index a121e53..316833d 100644 (file)
--- a/pad.c
+++ b/pad.c
@@ -91,6 +91,12 @@ become so if C<my sub foo {}> is implemented.)
 Note that formats are treated as anon subs, and are cloned each time
 write is called (if necessary).
 
+The flag SVf_PADSTALE is cleared on lexicals each time the my() is executed,
+and set on scope exit. This allows the 'Variable $x is not available' warning
+to be generated in evals, such as 
+
+    { my $x = 1; sub f { eval '$x'} } f();
+
 =cut
 */
 
@@ -257,17 +263,19 @@ Perl_pad_undef(pTHX_ CV* cv)
                    && CvOUTSIDE(innercv) == cv)
                {
                    assert(CvWEAKOUTSIDE(innercv));
-                   CvWEAKOUTSIDE_off(innercv);
-                   CvOUTSIDE_SEQ(innercv) = seq;
                    /* don't relink to grandfather if he's being freed */
-                   if (SvREFCNT(outercv)) {
+                   if (outercv && SvREFCNT(outercv)) {
+                       CvWEAKOUTSIDE_off(innercv);
                        CvOUTSIDE(innercv) = outercv;
+                       CvOUTSIDE_SEQ(innercv) = seq;
                        SvREFCNT_inc(outercv);
                    }
                    else {
                        CvOUTSIDE(innercv) = Nullcv;
                    }
+
                }
+
            }
        }
     }