Blob Blame History Raw
diff -up perl-5.8.8/cop.h.BAD perl-5.8.8/cop.h
--- perl-5.8.8/cop.h.BAD	2007-10-18 09:54:16.000000000 -0400
+++ perl-5.8.8/cop.h	2007-10-18 09:56:17.000000000 -0400
@@ -286,9 +286,14 @@ struct block_loop {
 #define POPLOOP(cx)							\
 	SvREFCNT_dec(cx->blk_loop.iterlval);				\
 	if (CxITERVAR(cx)) {						\
-	    SV **s_v_p = CxITERVAR(cx);					\
-	    sv_2mortal(*s_v_p);						\
-	    *s_v_p = cx->blk_loop.itersave;				\
+	    if (SvPADMY(cx->blk_loop.itersave)) { 			\
+	        SV **s_v_p = CxITERVAR(cx);				\
+	        sv_2mortal(*s_v_p);					\
+	        *s_v_p = cx->blk_loop.itersave;				\
+	    }								\
+	    else {							\
+	        SvREFCNT_dec(cx->blk_loop.itersave);			\
+	    }								\
 	}								\
 	if (cx->blk_loop.iterary && cx->blk_loop.iterary != PL_curstack)\
 	    SvREFCNT_dec(cx->blk_loop.iterary);
diff -up perl-5.8.8/t/op/local.t.BAD perl-5.8.8/t/op/local.t
--- perl-5.8.8/t/op/local.t.BAD	2007-10-18 10:53:10.000000000 -0400
+++ perl-5.8.8/t/op/local.t	2007-10-18 10:53:44.000000000 -0400
@@ -324,7 +324,7 @@ like($@, qr/Modification of a read-only 
 
 # make sure $1 is still read-only
 eval { for ($1) { local $_ = 1 } };
-is($@, "");
+like($@, qr/Modification of a read-only value attempted/);
 
 # The s/// adds 'g' magic to $_, but it should remain non-readonly
 eval { for("a") { for $x (1,2) { local $_="b"; s/(.*)/+$1/ } } };
diff -up perl-5.8.8/op.c.BAD perl-5.8.8/op.c