Clarifications on the usage of setlocale() and LC_NUMERIC to
Rafael Garcia-Suarez [Sun, 8 Oct 2006 17:07:42 +0000 (17:07 +0000)]
affect the decimal point in output, by Jarkko.

p4raw-id: //depot/perl@28965

pod/perldata.pod
pod/perlfunc.pod
pod/perllocale.pod

index 82ad855..cbfe070 100644 (file)
@@ -337,6 +337,12 @@ X<interpolation>
 
 There is no double interpolation in Perl, so the C<$100> is left as is.
 
+By default floating point numbers substituted inside strings use the
+dot (".")  as the decimal separator.  If C<use locale> is in effect,
+and POSIX::setlocale() has been called, the character used for the
+decimal separator is affected by the LC_NUMERIC locale.
+See L<perllocale> and L<POSIX>.
+
 As in some shells, you can enclose the variable name in braces to
 disambiguate it from following alphanumerics (and underscores).
 You must also do
index bcedd53..af5fe70 100644 (file)
@@ -4127,9 +4127,10 @@ X<printf>
 Equivalent to C<print FILEHANDLE sprintf(FORMAT, LIST)>, except that C<$\>
 (the output record separator) is not appended.  The first argument
 of the list will be interpreted as the C<printf> format. See C<sprintf>
-for an explanation of the format argument. If C<use locale> is in effect,
-the character used for the decimal point in formatted real numbers is
-affected by the LC_NUMERIC locale.  See L<perllocale>.
+for an explanation of the format argument.  If C<use locale> is in effect,
+and POSIX::setlocale() has been called, the character used for the decimal
+separator in formatted floating point numbers is affected by the LC_NUMERIC
+locale.  See L<perllocale> and L<POSIX>.
 
 Don't fall into the trap of using a C<printf> when a simple
 C<print> would do.  The C<print> is more efficient and less
@@ -5740,9 +5741,10 @@ index, the C<$> may need to be escaped:
 
 =back
 
-If C<use locale> is in effect, the character used for the decimal
-point in formatted real numbers is affected by the LC_NUMERIC locale.
-See L<perllocale>.
+If C<use locale> is in effect, and POSIX::setlocale() has been called,
+the character used for the decimal separator in formatted floating
+point numbers is affected by the LC_NUMERIC locale.  See L<perllocale>
+and L<POSIX>.
 
 =item sqrt EXPR
 X<sqrt> X<root> X<square root>
index 8f7ce04..3624903 100644 (file)
@@ -909,6 +909,23 @@ category-specific C<LC_...>.
 
 =back
 
+=head2 Examples
+
+The LC_NUMERIC controls the numeric output:
+
+        use locale;
+        use POSIX qw(locale_h); # Imports setlocale() and the LC_ constants.
+        setlocale(LC_NUMERIC, "fr_FR") or die "Pardon";
+        printf "%g\n", 1.23; # If the "fr_FR" succeeded, probably shows 1,23.
+
+and also how strings are parsed by POSIX::strtod() as numbers:
+
+        use locale;
+        use POSIX qw(locale_h strtod);
+        setlocale(LC_NUMERIC, "de_DE") or die "Entshuldigung";
+        my $x = strtod("2,34") + 5;
+        print $x, "\n"; # Probably shows 7,34.
+
 =head1 NOTES
 
 =head2 Backward compatibility