{
dTHX;
+ /* We only need to toggle into the underlying LC_NUMERIC locale for these
+ * two items, and only if not already there */
+ if (toggle && (( item != PERL_RADIXCHAR && item != PERL_THOUSEP)
+ || PL_numeric_underlying))
+ {
+ toggle = FALSE;
+ }
+
#if defined(HAS_NL_LANGINFO) /* nl_langinfo() is available. */
#if ! defined(HAS_POSIX_2008_LOCALE)
LOCALE_LOCK;
if (toggle) {
- if ( ! PL_numeric_underlying
- && (item == PERL_RADIXCHAR || item == PERL_THOUSEP))
- {
do_setlocale_c(LC_NUMERIC, PL_numeric_name);
- }
- else {
- toggle = FALSE;
- }
}
save_to_buffer(nl_langinfo(item), &PL_langinfo_buf, &PL_langinfo_bufsize, 0);
# else /* Use nl_langinfo_l(), avoiding both a mutex and changing the locale */
+ {
bool do_free = FALSE;
locale_t cur = uselocale((locale_t) 0);
if (do_free) {
freelocale(cur);
}
+ }
# endif
LOCALE_LOCK;
if (toggle) {
- if (! PL_numeric_underlying) {
do_setlocale_c(LC_NUMERIC, PL_numeric_name);
- }
- else {
- toggle = FALSE;
- }
}
lc = localeconv();