diff --git a/sv.c b/sv.c index aaf23e3c55c..50501e70164 100644 --- a/sv.c +++ b/sv.c @@ -3941,7 +3941,13 @@ Perl_sv_utf8_upgrade_flags(pTHX_ register SV *sv, I32 flags) return 0; if (!SvPOK(sv)) { STRLEN len = 0; - (void) SvPV_force(sv,len); + if (SvREADONLY(sv) && (SvPOKp(sv) || SvIOKp(sv) || SvNOKp(sv))) { + (void) sv_2pv_flags(sv,&len, flags); + if (SvUTF8(sv)) + return len; + } else { + (void) SvPV_force(sv,len); + } } if (SvUTF8(sv)) {