package locale;
-our $VERSION = '1.06';
+our $VERSION = '1.09';
use Config;
$Carp::Internal{ (__PACKAGE__) } = 1;
locale - Perl pragma to use or avoid POSIX locales for built-in operations
+=head1 WARNING
+
+DO NOT USE this pragma in scripts that have multiple
+L<threads|threads> active. The locale is not local to a single thread.
+Another thread may change the locale at any time, which could cause at a
+minimum that a given thread is operating in a locale it isn't expecting
+to be in. On some platforms, segfaults can also occur. The locale
+change need not be explicit; some operations cause perl to change the
+locale itself. You are vulnerable simply by having done a C<"use
+locale">.
+
=head1 SYNOPSIS
@x = sort @y; # Native-platform/Unicode code point sort order
$arg =~ s/^://;
eval { require POSIX; import POSIX 'locale_h'; };
- unless (defined &POSIX::LC_CTYPE) {
- return;
- }
# Map our names to the ones defined by POSIX
my $LC = "LC_" . uc($arg);
my $bit = eval "&POSIX::$LC";
- if (defined $bit) {
+ if (defined $bit) { # XXX Should we warn that this category isn't
+ # supported on this platform, or make it
+ # always be the C locale?
# Verify our assumption.
if (! ($bit >= 0 && $bit < 31)) {