develooper Front page | perl.perl5.porters | Postings from June 2013

[perl #82418] sprintf() not respecting locale in 5.10+

Thread Previous | Thread Next
Karl Williamson via RT
June 18, 2013 22:54
[perl #82418] sprintf() not respecting locale in 5.10+
Message ID:
On Mon Jul 02 23:14:23 2012, sprout wrote:
> On Mon Jul 02 22:41:20 2012, sprout wrote:
> > On Mon Jul 02 20:17:15 2012, doy wrote:
> > > If changes to the runtime environment can cause sprintf to need to
> > > output different things, shouldn't we really just not be constant
> > > folding sprintf?
> > 
> > I could have sworn this was already fixed (see commit b3fd6149), but it
> > was only fixed for ‘use locale’, not POSIX::setlocale.
> Actually, the perllocale page seems to say that setlocale is for
> switching locales at run time, but ‘use locale’ is necessary for
> enabling it.  It’s a bit vague, though.  This is what perl actually does:
> $  ./perl -Ilib -MPOSIX -e 'setlocale(LC_ALL, "nl_NL"); print
> sprintf("%f", $_=2.5)."\n";'
> 2,500000
> $  ./perl -Ilib -MPOSIX -e 'setlocale(LC_ALL, "nl_NL"); print
> sprintf("%f", 2.5)."\n";'
> 2.500000

You shouldn't expect to get locale effects outside of a 'use locale',
and I have just changed perllocale to be clear about that (I hope it's
clear anyway).

So this ticket is the complement of what it should be (in blead anyway).
 The sprintf is working fine: it should print a dot since there is no
'use locale'.  If you add one, it prints the comma:

$ blead -MPOSIX -e 'setlocale(LC_NUMERIC, "fr_FR.utf8"); print
$ blead -Mlocale -MPOSIX -e 'setlocale(LC_NUMERIC, "fr_FR.utf8"); print

The printf should not be printing a comma unless "use locale" is
specified, and hence, there is a bug there.

Karl Williamson

via perlbug:  queue: perl5 status: open

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About