if (SvTEMP(sstr) && /* slated for free anyway? */
SvREFCNT(sstr) == 1 && /* and no other references to it? */
!(sflags & SVf_OOK) && /* and not involved in OOK hack? */
- SvLEN(sstr)) /* and really is a string */
+ SvLEN(sstr) && /* and really is a string */
+ !(PL_op && PL_op->op_type == OP_AASSIGN)) /* and won't be needed again, potentially */
{
if (SvPVX(dstr)) { /* we know that dtype >= SVt_PV */
if (SvOOK(dstr)) {
*--eptr = '%';
(void)sprintf(PL_efloatbuf, eptr, nv);
+#ifdef USE_LOCALE_NUMERIC
+ if ((PL_hints & HINT_LOCALE) && maybe_tainted)
+ *maybe_tainted = TRUE;
+#endif
eptr = PL_efloatbuf;
elen = strlen(PL_efloatbuf);