This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Describe the changes to ExtUtils::{Embed,Miniperl} in perldelta.
[perl5.git] / util.c
diff --git a/util.c b/util.c
index d8b3d33..2904500 100644 (file)
--- a/util.c
+++ b/util.c
@@ -521,13 +521,13 @@ Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
     const U8 *s;
     STRLEN i;
     STRLEN len;
-    STRLEN rarest = 0;
     U32 frequency = 256;
     MAGIC *mg;
+    PERL_DEB( STRLEN rarest = 0 );
 
     PERL_ARGS_ASSERT_FBM_COMPILE;
 
-    if (isGV_with_GP(sv))
+    if (isGV_with_GP(sv) || SvROK(sv))
        return;
 
     if (SvVALID(sv))
@@ -539,7 +539,9 @@ Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
        if (mg && mg->mg_len >= 0)
            mg->mg_len++;
     }
-    s = (U8*)SvPV_force_mutable(sv, len);
+    if (!SvPOK(sv) || SvNIOKp(sv) || SvIsCOW(sv))
+       s = (U8*)SvPV_force_mutable(sv, len);
+    else s = (U8 *)SvPV_mutable(sv, len);
     if (len == 0)              /* TAIL might be on a zero-length string. */
        return;
     SvUPGRADE(sv, SVt_PVMG);
@@ -589,7 +591,7 @@ Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
     s = (const unsigned char*)(SvPVX_const(sv));       /* deeper magic */
     for (i = 0; i < len; i++) {
        if (PL_freq[s[i]] < frequency) {
-           rarest = i;
+           PERL_DEB( rarest = i );
            frequency = PL_freq[s[i]];
        }
     }
@@ -1338,7 +1340,7 @@ Perl_write_to_stderr(pTHX_ SV* msv)
     if (PL_stderrgv && SvREFCNT(PL_stderrgv) 
        && (io = GvIO(PL_stderrgv))
        && (mg = SvTIED_mg((const SV *)io, PERL_MAGIC_tiedscalar))) 
-       Perl_magic_methcall(aTHX_ MUTABLE_SV(io), mg, "PRINT",
+       Perl_magic_methcall(aTHX_ MUTABLE_SV(io), mg, SV_CONST(PRINT),
                            G_SCALAR | G_DISCARD | G_WRITING_TO_STDERR, 1, msv);
     else {
 #ifdef USE_SFIO
@@ -4467,8 +4469,11 @@ Perl_upg_version(pTHX_ SV *ver, bool qv)
        SV *sv = SvNVX(ver) > 10e50 ? newSV(64) : 0;
        char *buf;
 #ifdef USE_LOCALE_NUMERIC
-       char *loc = savepv(setlocale(LC_NUMERIC, NULL));
-       setlocale(LC_NUMERIC, "C");
+       char *loc = NULL;
+        if (! PL_numeric_standard) {
+            loc = savepv(setlocale(LC_NUMERIC, NULL));
+            setlocale(LC_NUMERIC, "C");
+        }
 #endif
        if (sv) {
            Perl_sv_setpvf(aTHX_ sv, "%.9"NVff, SvNVX(ver));
@@ -4479,8 +4484,10 @@ Perl_upg_version(pTHX_ SV *ver, bool qv)
            buf = tbuf;
        }
 #ifdef USE_LOCALE_NUMERIC
-       setlocale(LC_NUMERIC, loc);
-       Safefree(loc);
+        if (loc) {
+            setlocale(LC_NUMERIC, loc);
+            Safefree(loc);
+        }
 #endif
        while (buf[len-1] == '0' && len > 0) len--;
        if ( buf[len-1] == '.' ) len--; /* eat the trailing decimal */