fix $^R scoping bug.
[p5sagit/p5-mst-13.2.git] / pp_hot.c
index f01a3e0..2f2876b 100644 (file)
--- 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;
@@ -3021,6 +3024,7 @@ S_method_common(pTHX_ SV* meth, U32* hashp)
                     && SvOBJECT(ob))))
     {
        Perl_croak(aTHX_ "Can't call method \"%s\" on unblessed reference",
+                  (SvSCREAM(meth) && strEQ(name,"isa")) ? "DOES" :
                   name);
     }