Package: perl-base Version: 5.8.8-4 Severity: normal Tags: l10n I am trying to write a locale aware program. As I understand the perl documentation (mainly the man page perllocale) perl is currently dealing only with output (I will discuss this man page in a different wishlist bug later). So I attempt to construct an input routine.
The following programm, which is taken almost verbatim from the man page, does not work as advertised, i.e. setlocale() seems to return "C", regardless of the actual locale settings. [EMAIL PROTECTED]:~/prog/db/rechnung$ less locale_info.pl #!/usr/bin/perl use POSIX qw(locale_h); # Get a reference to a hash of locale-dependent info $locale_values = localeconv(); # Output sorted list of the values for (sort keys %$locale_values) { printf "%-20s = %s\n", $_, $locale_values->{$_} } # query and save the old locale $old_locale = setlocale(LC_NUMERIC); print "LC_NUMERIC: $old_locale\n"; No look at the follwing output: [EMAIL PROTECTED]:~/prog/db/rechnung$ bash [EMAIL PROTECTED]:~/prog/db/rechnung$ export LANG=de_DE [EMAIL PROTECTED]:~/prog/db/rechnung$ export LC_ALL=de_DE [EMAIL PROTECTED]:~/prog/db/rechnung$ export LC_NUMERIC=de_DE [EMAIL PROTECTED]:~/prog/db/rechnung$ ./locale_info.pl currency_symbol = EUR decimal_point = . frac_digits = 2 int_curr_symbol = EUR int_frac_digits = 2 mon_decimal_point = , mon_grouping = mon_thousands_sep = . n_cs_precedes = 0 n_sep_by_space = 1 n_sign_posn = 1 negative_sign = - p_cs_precedes = 0 p_sep_by_space = 1 p_sign_posn = 1 LC_NUMERIC: C ~~~~~~~~~~~~~ If I use LC_CTYPE instead of LC_NUMERIC, it *does* work. (Note, that decimal_point is incorrectly set to "." instead of "," - I reported this against locales in #379329, but I tend to believe this to be a perl problem in reality). Next I take another example from perllocale(1): [EMAIL PROTECTED]:~/prog/db/rechnung$ cat lcnumeric.pl #!/usr/bin/perl use POSIX qw(strtod); use locale; $n = 5/2; # Assign numeric 2.5 to $n $a = " $n"; # Locale-dependent conversion to string print "half five is $n\n"; # Locale-dependent output printf "half five is %g\n", $n; # Locale-dependent output print "DECIMAL POINT IS COMMA\n" if $n == (strtod("2,5"))[0]; # Locale-dependent conversion and run it as well: [EMAIL PROTECTED]:~/prog/db/rechnung$ ./lcnumeric.pl half five is 2.5 half five is 2.5 DECIMAL POINT IS COMMA Now this programm still prints "2.5" (not 2,5 as proper) but *claims* that the decimal point is in fact a comma??? Unfortunately I have no idea how to debug this, I simply wanted to use the facilities provided by perl :-(( -- System Information: Debian Release: testing/unstable APT prefers testing APT policy: (500, 'testing'), (500, 'stable') Architecture: amd64 (x86_64) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.14.6-grsec-cz03 Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] (charmap=ISO-8859-15) Versions of packages perl-base depends on: ii libc6 2.3.6-15 GNU C Library: Shared libraries perl-base recommends no packages. -- no debconf information -- Dr. Helge Kreutzmann [EMAIL PROTECTED] Dipl.-Phys. http://www.helgefjell.de/debian.php 64bit GNU powered gpg signed mail preferred Help keep free software "libre": http://www.ffii.de/
signature.asc
Description: Digital signature