X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperllocale.pod;h=ddb5a6e7106a60201eb71f9ec710a9ee140e2bca;hb=25fbdfc0879f30cf6944c322d4607eea9bcc7d15;hp=95aa6af167d137b879988de16f2fc3b943584c73;hpb=528d65adbfbca8f0de82f889e6bbf92ea5fb07c8;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perllocale.pod b/pod/perllocale.pod index 95aa6af..ddb5a6e 100644 --- a/pod/perllocale.pod +++ b/pod/perllocale.pod @@ -215,6 +215,8 @@ I section). If that fails, try the following command lines: ls /usr/lib/nls + ls /usr/share/locale + and see whether they list something resembling these en_US.ISO8859-1 de_DE.ISO8859-1 ru_RU.ISO8859-5 @@ -287,7 +289,7 @@ than the PERL_BADLANG approach, but setting LC_ALL (or other locale variables) may affect other programs as well, not just Perl. In particular, external programs run from within Perl will see these changes. If you make the new settings permanent (read on), all -programs you run see the changes. See L for for +programs you run see the changes. See L for the full list of relevant environment variables and L for their effects in Perl. Effects in other programs are easily deducible. For example, the variable LC_COLLATE may well affect @@ -307,7 +309,7 @@ discussed above. We decided to try that instead of the above faulty locale "En_US"--and in Cshish shells (B, B) setenv LC_ALL en_US.ISO8859-1 - + If you do not know what shell you have, consult your local helpdesk or the equivalent. @@ -330,9 +332,9 @@ Second, if using the listed commands you see something B (prefix matches do not count and case usually counts) like "En_US" without the quotes, then you should be okay because you are using a locale name that should be installed and available in your system. -In this case, see L. +In this case, see L. -=head2 Permanently fixing your locale configuration +=head2 Permanently fixing your system's locale configuration This is when you see something like: @@ -447,7 +449,7 @@ if you "use locale". a A b B c C d D e E a b c d e A B C D E -Here is a code snippet to tell what alphanumeric +Here is a code snippet to tell what "word" characters are in the current locale, in that locale's order: use locale; @@ -516,8 +518,9 @@ results, and so always obey the current C locale. In the scope of S>, Perl obeys the C locale setting. This controls the application's notion of which characters are alphabetic. This affects Perl's C<\w> regular expression metanotation, -which stands for alphanumeric characters--that is, alphabetic and -numeric characters. (Consult L for more information about +which stands for alphanumeric characters--that is, alphabetic, +numeric, and including other special characters such as the underscore or +hyphen. (Consult L for more information about regular expressions.) Thanks to C, depending on your locale setting, characters like 'E', 'E', 'E', and 'E' may be understood as C<\w> characters. @@ -606,8 +609,12 @@ obeys the current C locale. The remaining locale category, C (possibly supplemented by others in particular implementations) is not currently used by -Perl--except possibly to affect the behavior of library functions called -by extensions outside the standard Perl distribution. +Perl--except possibly to affect the behavior of library functions +called by extensions outside the standard Perl distribution and by the +operating system and its utilities. Note especially that the string +value of C<$!> and the error messages given by external utilities may +be changed by C. If you want to have portable error +codes, use C<%!>. See L. =head1 SECURITY @@ -635,11 +642,12 @@ case-mapping table is in effect. =item * -If the decimal point character in the C locale is -surreptitiously changed from a dot to a comma, C produces a string result of "123,456". Many people would -interpret this as one hundred and twenty-three thousand, four hundred -and fifty-six. +Some systems are broken in that they allow the "C" locale to be +overridden by users. If the decimal point character in the +C category of the "C" locale is surreptitiously changed +from a dot to a comma, C produces a +string result of "123,456". Many people would interpret this as +one hundred and twenty-three thousand, four hundred and fifty-six. =item * @@ -708,10 +716,6 @@ if modified as a result of a substitution based on a regular expression match involving C<\w>, C<\W>, C<\s>, or C<\S>; or of case-mapping with C<\l>, C<\L>,C<\u> or C<\U>. -=item B (sprintf()): - -Result is tainted if C is in effect. - =item B (printf() and write()): Success/failure result is never tainted. @@ -812,9 +816,14 @@ set, it overrides all the rest of the locale environment variables. B: C is a GNU extension, it affects you only if you are using the GNU libc. This is the case if you are using e.g. Linux. If you are using "commercial" UNIXes you are most probably I -using libc and you can ignore C. But in the case you are -using it: it is an even more powerful "override-all" than C -and moreover, it's a "path" (":"-separated list) of locales. +using GNU libc and you can ignore C. + +However, in the case you are using C: it affects the +language of informational, warning, and error messages output by +commands (in other words, it's like C) but it has higher +priority than L. Moreover, it's not a single value but +instead a "path" (":"-separated list) of I (not locales). +See the GNU C library documentation for more information. =item LC_CTYPE