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