Package: perl
Version: 5.10.1-1
Tags: patch
Forwarded: http://rt.perl.org/rt3/Ticket/Display.html?id=78632
A regression in 5.10.1 breaks sprintf and LC_NUMERIC with numeric constants:
perl -Mlocale -MPOSIX=locale_h -e 'setlocale(LC_NUMERIC, "fi_FI") or die;
printf("%s should be %g\n", spr
intf("%g", 2.4), 2.4)'
2.4 should be 2,4
(At least de_DE and sv_SE should also do for the locale.)
The bug is with constant folding, this works:
perl -Mlocale -MPOSIX=locale_h -e 'setlocale(LC_NUMERIC, "fi_FI") or die; $in
= 2.4; printf("%s should be
%g\n", sprintf("%g", $in), 2.4)'
2,4 should be 2,4
This is [perl #78632]. One line patch that disables sprintf() constant
folding when locales are involved:
diff --git a/op.c b/op.c
index dc9fd64..a2481af 100644
--- a/op.c
+++ b/op.c
@@ -2466,6 +2466,7 @@ Perl_fold_constants(pTHX_ register OP *o)
case OP_SLE:
case OP_SGE:
case OP_SCMP:
+ case OP_SPRINTF:
/* XXX what about the numeric ops? */
if (PL_hints & HINT_LOCALE)
goto nope;
I think this is a possible candidate for squeeze but may not worth an
upload by itself.
--
Niko Tyni [email protected]
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]