Perl, locale és tizedesvessző

Magyar locale-beállítással tizedesvesszőt várok. Nem értem, miért nem működik:



$ LC_NUMERIC=hu_HU perl -le 'use locale; printf("%f\n", 1.234)'
1.234000

se így:



$ LC_ALL=hu_HU perl -le 'use locale; printf("%f\n", 1.234)'
1.234000

pedig



$ LC_NUMERIC=hu_HU locale -k LC_NUMERIC
decimal_point=","
thousands_sep="."
grouping=3;3
numeric-decimal-point-wc=44
numeric-thousands-sep-wc=46
numeric-codeset="ISO-8859-2"

Hozzászólások

IMHO perl bug, ennek működnie kéne. Check this out:

#!/usr/bin/perl
use POSIX;
use locale;
strtod(0);
printf("%f\n", 1.2345);

Ez vesszőt ír. Úgy fest, hogy a strtod() tetszőleges argumentummal helyrepofozza a későbbi printf-et. Arra tippelek, hogy a "use locale" pragma önmagában még semmit sem csinál, hanem a strtod() és rakat egyéb függvény van úgy megírva, hogy inicializálja a locale-t, ha ez még nem történt meg. Szerintem a printf()-ből elfelejtették ennek csekkolását. De ez csak egy megalapozatlan tipp a semmiből. Az ötletet egyébként a "man perllocale"-ben a "Category LC_NUMERIC" példaprogramja adta.