Perl_new_numeric(pTHX_ const char *newnum)
{
#ifdef USE_LOCALE_NUMERIC
+ char *save_newnum;
dVAR;
if (! newnum) {
return;
}
- if (! PL_numeric_name || strNE(PL_numeric_name, newnum)) {
+ save_newnum = stdize_locale(savepv(newnum));
+ if (! PL_numeric_name || strNE(PL_numeric_name, save_newnum)) {
Safefree(PL_numeric_name);
- PL_numeric_name = stdize_locale(savepv(newnum));
- PL_numeric_standard = ((*newnum == 'C' && newnum[1] == '\0')
- || strEQ(newnum, "POSIX"));
+ PL_numeric_name = save_newnum;
+ PL_numeric_standard = ((*save_newnum == 'C' && save_newnum[1] == '\0')
+ || strEQ(save_newnum, "POSIX"));
PL_numeric_local = TRUE;
set_numeric_radix();
}
+ else {
+ Safefree(save_newnum);
+ }
#endif /* USE_LOCALE_NUMERIC */
}