Pod typos, pod2man bugs, and miscellaneous installation comments
[p5sagit/p5-mst-13.2.git] / doop.c
diff --git a/doop.c b/doop.c
index b7c220a..0d8538c 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -498,7 +498,7 @@ register SV *sv;
                    goto nope;
                len -= rslen - 1;
                s -= rslen - 1;
-               if (bcmp(s, rsptr, rslen))
+               if (memcmp(s, rsptr, rslen))
                    goto nope;
                count += rslen;
            }
@@ -531,6 +531,8 @@ SV *right;
     register char *rc = SvPV(right, rightlen);
     register I32 len;
     I32 lensave;
+    char *lsave = lc;
+    char *rsave = rc;
 
     dc = SvPV_force(sv,na);
     len = leftlen < rightlen ? leftlen : rightlen;
@@ -588,9 +590,6 @@ SV *right;
     }
 #endif
     {
-       char *lsave = lc;
-       char *rsave = rc;
-       
        switch (optype) {
        case OP_BIT_AND:
            while (len--)
@@ -630,8 +629,15 @@ dARGS
     if (op->op_type == OP_RV2HV || op->op_type == OP_PADHV) 
        dokeys = dovalues = TRUE;
 
-    if (!hv)
+    if (!hv) {
+       if (op->op_flags & OPf_MOD) {   /* lvalue */
+           dTARGET;            /* make sure to clear its target here */
+           if (SvTYPE(TARG) == SVt_PVLV)
+               LvTARG(TARG) = Nullsv;
+           PUSHs(TARG);
+       }
        RETURN;
+    }
 
     (void)hv_iterinit(hv);     /* always reset iterator regardless */
 
@@ -639,6 +645,17 @@ dARGS
        I32 i;
        dTARGET;
 
+       if (op->op_flags & OPf_MOD) {   /* lvalue */
+           if (SvTYPE(TARG) < SVt_PVLV) {
+               sv_upgrade(TARG, SVt_PVLV);
+               sv_magic(TARG, Nullsv, 'k', Nullch, 0);
+           }
+           LvTYPE(TARG) = 'k';
+           LvTARG(TARG) = (SV*)hv;
+           PUSHs(TARG);
+           RETURN;
+       }
+
        if (!SvRMAGICAL(hv) || !mg_find((SV*)hv,'P'))
            i = HvKEYS(hv);
        else {