summaryrefslogtreecommitdiff
path: root/pp_hot.c
diff options
context:
space:
mode:
Diffstat (limited to 'pp_hot.c')
-rw-r--r--pp_hot.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/pp_hot.c b/pp_hot.c
index f01a3e06df..83ed6135cc 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -130,8 +130,11 @@ PP(pp_sassign)
else if (PL_op->op_private & OPpASSIGN_STATE) {
if (SvPADSTALE(right))
SvPADSTALE_off(right);
- else
+ else {
+ (void)POPs;
+ PUSHs(right);
RETURN; /* ignore assignment */
+ }
}
if (PL_tainting && PL_tainted && !SvTAINTED(left))
TAINT_NOT;
@@ -969,6 +972,12 @@ PP(pp_aassign)
int duplicates = 0;
SV **firsthashrelem = NULL; /* "= 0" keeps gcc 2.95 quiet */
+ if (PL_op->op_private & OPpASSIGN_STATE) {
+ if (SvPADSTALE(*firstlelem))
+ SvPADSTALE_off(*firstlelem);
+ else
+ RETURN; /* ignore assignment */
+ }
PL_delaymagic = DM_DELAY; /* catch simultaneous items */
gimme = GIMME_V;
@@ -986,12 +995,6 @@ PP(pp_aassign)
}
}
}
- if (PL_op->op_private & OPpASSIGN_STATE) {
- if (SvPADSTALE(*firstlelem))
- SvPADSTALE_off(*firstlelem);
- else
- RETURN; /* ignore assignment */
- }
relem = firstrelem;
lelem = firstlelem;