Fixed two long-standing locale bugs.
authorJarkko Hietaniemi <jhi@iki.fi>
Thu, 17 Jun 1999 22:42:03 +0000 (22:42 +0000)
committerJarkko Hietaniemi <jhi@iki.fi>
Thu, 17 Jun 1999 22:42:03 +0000 (22:42 +0000)
commit097ee67dff1c60f201bc09435bc6eaeeafcd8123
tree16efe7bbad1c2e935c57baa65ede283aa053c621
parent908f8bc1445ea9eef07cec82a8241c080da1cc4e
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
18 files changed:
dump.c
embed.h
embed.pl
embedvar.h
global.sym
intrpvar.h
mg.c
objXSUB.h
perl.c
perl.h
pp.c
pp_ctl.c
pp_sys.c
proto.h
sv.c
t/pragma/locale.t
toke.c
util.c