t/io/binmode.t
[p5sagit/p5-mst-13.2.git] / pp_ctl.c
index 8a187b0..e79d45d 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -121,7 +121,16 @@ PP(pp_regcomp)
                PL_reginterp_cnt = I32_MAX; /* Mark as safe.  */
 
            pm->op_pmflags = pm->op_pmpermflags;        /* reset case sensitivity */
+           if (DO_UTF8(tmpstr))
+               pm->op_pmdynflags |= PMdf_DYN_UTF8;
+           else {
+               pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
+               if (pm->op_pmdynflags & PMdf_UTF8)
+                   t = (char*)bytes_to_utf8((U8*)t, &len);
+           }
            PM_SETRE(pm, CALLREGCOMP(aTHX_ t, t + len, pm));
+           if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
+               Safefree(t);
            PL_reginterp_cnt = 0;       /* XXXX Be extra paranoid - needed
                                           inside tie/overload accessors.  */
        }
@@ -3144,7 +3153,9 @@ trylocal: {
                    int count;
                    SV *loader = dirsv;
 
-                   if (SvTYPE(SvRV(loader)) == SVt_PVAV) {
+                   if (SvTYPE(SvRV(loader)) == SVt_PVAV
+                       && !sv_isobject(loader))
+                   {
                        loader = *av_fetch((AV *)SvRV(loader), 0, TRUE);
                    }