summaryrefslogtreecommitdiff
path: root/objXSUB.h
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>1999-06-17 22:42:03 +0000
committerJarkko Hietaniemi <jhi@iki.fi>1999-06-17 22:42:03 +0000
commit097ee67dff1c60f201bc09435bc6eaeeafcd8123 (patch)
tree16efe7bbad1c2e935c57baa65ede283aa053c621 /objXSUB.h
parent908f8bc1445ea9eef07cec82a8241c080da1cc4e (diff)
downloadperl-097ee67dff1c60f201bc09435bc6eaeeafcd8123.tar.gz
Fixed two long-standing locale bugs.
Both problems were related to numeric locale which controls the radix character aka the decimal separator. (1) printf (and sprintf) were resetting the numeric locale to C. (2) Using locale-numerically formatted floating point numbers (e.g. "1,23") together with -w caused warnings about "isn't numeric". The operations were working fine, though, because atof() was using the local locale. Both problems reported by Stefan Vogtner. Introduced a wrapper for atof() that attempts to convert the string both ways. This helps Perl to understand numbers like this "4.56" even when using a local locale makes atof() understand only numbers like this "7,89". Remaining related problems, both of which existed before this patch and continue to exist after this patch: (a) The behaviour of print() is _not_ as documented by perllocale. Instead of always using the C locale, print() does use the local locale, just like the *printf() do. This may be fixable now that switching to-and-fro between locales has been made more consistent, but fixing print() would change existing behaviour. perllocale is not changed by this patch. (b) If a number has been stringified (say, via "$number") under a local locale, the cached string value persists even under "no locale". This may or may not be a problem: operations work fine because the original number is still there, but that the string form keeps its locale-ish outlook may be somewhat confusing. p4raw-id: //depot/cfgperl@3542
Diffstat (limited to 'objXSUB.h')
-rw-r--r--objXSUB.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/objXSUB.h b/objXSUB.h
index 579b9165b4..c15c19df1f 100644
--- a/objXSUB.h
+++ b/objXSUB.h
@@ -406,6 +406,8 @@
#define PL_numeric_local pPerl->PL_numeric_local
#undef PL_numeric_name
#define PL_numeric_name pPerl->PL_numeric_name
+#undef PL_numeric_radix
+#define PL_numeric_radix pPerl->PL_numeric_radix
#undef PL_numeric_standard
#define PL_numeric_standard pPerl->PL_numeric_standard
#undef PL_ofmt
@@ -1361,6 +1363,10 @@
#define moreswitches pPerl->moreswitches
#undef my
#define my pPerl->my
+#ifdef USE_LOCALE_NUMERIC
+#undef my_atof
+#define my_atof pPerl->my_atof
+#endif
#if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY)
#undef my_bcopy
#define my_bcopy pPerl->my_bcopy
@@ -1571,6 +1577,8 @@
#define new_numeric pPerl->new_numeric
#undef set_numeric_local
#define set_numeric_local pPerl->set_numeric_local
+#undef set_numeric_radix
+#define set_numeric_radix pPerl->set_numeric_radix
#undef set_numeric_standard
#define set_numeric_standard pPerl->set_numeric_standard
#undef require_pv