}
else if (SvTYPE(sv) < SVt_PVNV)
sv_upgrade(sv, SVt_PVNV);
- if (SvIOKp(sv) &&
+ if (SvNOKp(sv) && !(SvIOK(sv) || SvPOK(sv))) {
+ SvNOK_on(sv);
+ }
+ else if (SvIOKp(sv) &&
(!SvPOKp(sv) || !strchr(SvPVX(sv),'.') || !looks_like_number(sv)))
{
SvNVX(sv) = SvIsUV(sv) ? (NV)SvUVX(sv) : (NV)SvIVX(sv);
char *
Perl_sv_2pv(pTHX_ register SV *sv, STRLEN *lp)
{
- sv_2pv_flags(sv, lp, SV_GMAGIC);
+ return sv_2pv_flags(sv, lp, SV_GMAGIC);
}
char *
STRLEN
Perl_sv_utf8_upgrade(pTHX_ register SV *sv)
{
- sv_utf8_upgrade_flags(sv, SV_GMAGIC);
+ return sv_utf8_upgrade_flags(sv, SV_GMAGIC);
}
/*
char *
Perl_sv_pvn_force(pTHX_ SV *sv, STRLEN *lp)
{
- sv_pvn_force_flags(sv, lp, SV_GMAGIC);
+ return sv_pvn_force_flags(sv, lp, SV_GMAGIC);
}
/*
break;
case SVt_RV:
SvANY(dstr) = new_XRV();
- SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ SvRV(dstr) = SvRV(sstr) && SvWEAKREF(SvRV(sstr))
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
break;
case SVt_PV:
SvANY(dstr) = new_XPV();
SvLEN(dstr) = SvLEN(sstr);
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvIVX(dstr) = SvIVX(sstr);
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvNVX(dstr) = SvNVX(sstr);
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else
SvSTASH(dstr) = hv_dup_inc(SvSTASH(sstr));
if (SvROK(sstr))
SvRV(dstr) = SvWEAKREF(SvRV(sstr))
- ? sv_dup_inc(SvRV(sstr))
- : sv_dup(SvRV(sstr));
+ ? sv_dup(SvRV(sstr))
+ : sv_dup_inc(SvRV(sstr));
else if (SvPVX(sstr) && SvLEN(sstr))
SvPVX(dstr) = SAVEPVN(SvPVX(sstr), SvLEN(sstr)-1);
else