|
|
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
|