summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xConfigure232
-rw-r--r--config_h.SH67
-rw-r--r--pod/perldiag.pod24
-rw-r--r--pp_sys.c24
-rw-r--r--regcomp.c27
-rwxr-xr-xt/op/misc.t1
-rwxr-xr-xt/op/pat.t27
-rw-r--r--t/op/re_tests6
-rwxr-xr-xt/pragma/locale.t10
9 files changed, 318 insertions, 100 deletions
diff --git a/Configure b/Configure
index 952a685c0b..df610b2b34 100755
--- a/Configure
+++ b/Configure
@@ -317,13 +317,20 @@ d_Gconvert=''
d_getgrps=''
d_setgrps=''
d_gethent=''
-d_gethbadd=''
-gethbadd_addr_type=''
-gethbadd_alen_type=''
-d_getnbadd=''
-getnbadd_net_type=''
+d_gethbyaddr=''
+netdb_host_type=''
+netdb_hlen_type=''
+d_gethbyname=''
+netdb_name_type=''
+d_getnbyaddr=''
+d_getnbyname=''
+netdb_net_type=''
aphostname=''
d_gethname=''
+d_getpbyname=''
+d_getpbynumber=''
+d_getsbyname=''
+d_getsbyport=''
d_phostname=''
d_uname=''
d_getlogin=''
@@ -6624,7 +6631,11 @@ set fsetpos d_fsetpos
eval $inlibc
: see if gethostbyaddr exists
-set gethostbyaddr d_gethbadd
+set gethostbyaddr d_gethbyaddr
+eval $inlibc
+
+: see if gethostbyname exists
+set gethostbyname d_gethbyname
eval $inlibc
: see if gethostent exists
@@ -6636,7 +6647,11 @@ set getlogin d_getlogin
eval $inlibc
: see if getnetbyaddr exists
-set getnetbyaddr d_getnbadd
+set getnetbyaddr d_getnbyaddr
+eval $inlibc
+
+: see if getnetbyname exists
+set getnetbyname d_getnbyname
eval $inlibc
: see if getpgid exists
@@ -6655,6 +6670,22 @@ eval $inlibc
set getpriority d_getprior
eval $inlibc
+: see if getprotobyname exists
+set getprotobyname d_getpbyname
+eval $inlibc
+
+: see if getprotobynumber exists
+set getprotobynumber d_getpbynumber
+eval $inlibc
+
+: see if getservbyname exists
+set getservbyname d_getsbyname
+eval $inlibc
+
+: see if getservbyport exists
+set getservbyport d_getsbyport
+eval $inlibc
+
: see if gettimeofday or ftime exists
set gettimeofday d_gettimeod
eval $inlibc
@@ -9262,10 +9293,10 @@ eval $inhdr
: check for type of arguments to gethostbyaddr. This will only really
: work if the system supports prototypes and provides one for
-: gethostbyaddr.
-case "$d_gethbadd" in
+: gethostbyaddr. The netdb_host_type and netdb_hlen_type get defined.
+case "$d_gethbyaddr" in
$define)
- if test "X$gethbadd_addr_type" = X -o "X$gethbadd_alen_type" = X; then
+ if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
$cat <<EOM
Checking to see what type of arguments are expected by gethostbyaddr().
@@ -9292,72 +9323,130 @@ EOM
#define Size_t $sizetype
main()
{
- Gethbadd_addr_t addr;
- Gethbadd_alen_t alen;
+ Netdb_alen_t alen = sizeof(struct in_addr);
+ Netdb_addr_t addr = (Netdb_addr_t)malloc(alen);
struct hostent* hent;
- extern struct hostent *gethostbyaddr(const Gethbadd_addr_t, Gethbadd_alen_t, int);
+ extern struct hostent *gethostbyaddr(Netdb_addr_t, Netdb_alen_t, int);
- alen = sizeof(struct in_addr);
- addr = (Gethbadd_addr_t)malloc(alen);
- /* We do not execute this so the contents of the addr matter not. */
+ /* We do not execute this so the arguments matter not. */
hent = gethostbyaddr(addr, alen, AF_INET);
exit(0);
}
EOCP
- for xxx in "void *" "char *"; do
- for yyy in Size_t int; do
- if $cc $ccflags -c -DGethbadd_addr_t="$xxx" -DGethbadd_alen_t="$yyy" try.c >/dev/null 2>&1 ; then
- gethbadd_addr_type="$xxx"
- gethbadd_alen_type="$yyy"
+ for xxx in in_addr_t "const void *" "const char *" "void *" "char *"; do
+ for yyy in Size_t long int; do
+ if $cc $ccflags -c -DNetdb_addr_t="$xxx" -DNetdb_alen_t="$yyy" try.c >/dev/null 2>&1 ; then
+ netdb_host_type="$xxx"
+ netdb_hlen_type="$yyy"
$cat >&4 <<EOM
-Your system uses $xxx for the 1st argument to gethostbyaddr.
-and the 2nd argument to gethostbyaddr is $yyy.
+Your system accepts $xxx for the 1st argument to gethostbyaddr.
+and the 2nd argument to gethostbyaddr can be $yyy.
EOM
break
fi
done
- test "X$gethbadd_addr_type" != X && break
+ test "X$netdb_host_type" != X && break
done
- if test "X$gethbadd_addr_type" = X; then
+ if test "X$netdb_host_type" = X; then
rp='What is the type for the 1st argument to gethostbyaddr?'
dflt="void *"
. ./myread
- gethbadd_addr_type="$ans"
+ netdb_host_type="$ans"
# Remove the "const" if needed.
- gethbadd_addr_type=`echo "$gethbadd_addr_type" | sed 's/^const //'`
+ netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
rp='What is the type for the 2nd argument to gethostbyaddr ?'
dflt="Size_t"
. ./myread
- gethbadd_alen_type="$ans"
+ netdb_hlen_type="$ans"
fi
$rm -f try.[co]
else
$cat >&4 <<EOM
-Your system uses $gethbadd_addr_type for the 1st argument to gethostbyaddr.
-and the 2nd argument to gethostbyaddr is $gethbadd_alen_type.
+Your system accepts $netdb_host_type for the 1st argument to gethostbyaddr.
+and the 2nd argument to gethostbyaddr can be $netdb_hlen_type.
EOM
fi
;;
-*) gethbadd_addr_type='void *'
- gethbadd_alen_type='Size_t'
+*) netdb_host_type='void *'
+ netdb_hlen_type='Size_t'
;;
esac
+: check for type of arguments to gethostbyname. This will only really
+: work if the system supports prototypes and provides one for
+: gethostbyname. The netdb_name_type gets defined.
+case "$d_gethbyname" in
+$define)
+ if test "X$netdb_name_type" = X; then
+ $cat <<EOM
+
+Checking to see what type of arguments are expected by gethostbyname().
+EOM
+ $cat >try.c <<EOCP
+#$i_niin I_NIIN
+#$i_netdb I_NETDB
+#$d_socket HAS_SOCKET
+#$d_socket HAS_SOCKET
+#include <sys/types.h>
+#ifdef HAS_SOCKET
+#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
+#endif
+#ifdef I_NIIN
+#include <netinet/in.h>
+#endif
+#ifdef I_NETDB
+#include <netdb.h>
+#endif
+main()
+{
+ char* host = "localhost";
+ struct hostent* hent;
+
+ extern struct hostent *gethostbyname(Netdb_name_t);
+
+ /* We do not execute this so the arguments matter not. */
+ hent = gethostbyname(host);
+
+ exit(0);
+}
+EOCP
+ for xxx in "const char *" "char *"; do
+ if $cc $ccflags -c -DNetdb_name_t="$xxx" try.c >/dev/null 2>&1 ; then
+ netdb_name_type="$xxx"
+ echo "Your system accepts $xxx for the 1st argument to gethostbyname." >&4
+ break
+ fi
+ done
+ if test "X$netdb_name_type" = X; then
+ rp='What is the type for the 1st argument to gethostbyname?'
+ dflt="char *"
+ . ./myread
+ netdb_name_type="$ans"
+ fi
+ $rm -f try.[co]
+ else
+ echo "Your system accepts $netdb_name_type for the 1st argument to gethostbyname." >&4
+ fi
+ ;;
+*) netdb_name_type='char *'
+ ;;
+esac
+
: check for type of arguments to getnetbyaddr. This will only really
: work if the system supports prototypes and provides one for
-: getnetbyaddr.
-case "$d_getnbadd" in
+: getnetbyaddr. The netdb_net_type gets defined.
+case "$d_getnbyaddr" in
$define)
- if test "X$getnbadd_net_type" = X; then
- $cat <<EOM
+ if test "X$netdb_net_type" = X; then
+ $cat <<EOM
Checking to see what type of arguments are expected by getnetbyaddr().
EOM
- $cat >try.c <<EOCP
+ $cat >try.c <<EOCP
#$i_niin I_NIIN
#$i_netdb I_NETDB
#$d_socket HAS_SOCKET
@@ -9374,37 +9463,37 @@ EOM
#endif
main()
{
- Getnbadd_net_t net;
- struct netent* nent;
+ Netdb_net_t net;
+ struct netent* nent;
- extern struct netent *getnetbyaddr(Getnbadd_net_t, int);
+ extern struct netent *getnetbyaddr(Netdb_net_t, int);
- /* We do not execute this so the contents of the net matter not. */
- nent = getnetbyaddr(net, AF_INET);
+ /* We do not execute this so the arguments matter not. */
+ nent = getnetbyaddr(net, 2);
- exit(0);
+ exit(0);
}
EOCP
- for xxx in in_addr_t long int; do
- if $cc $ccflags -c -DGetnbadd_net_t="$xxx" try.c >/dev/null 2>&1 ; then
- getnbadd_net_type="$xxx"
- echo "Your system uses $xxx for the 1st argument to getnetbyaddr." >&4
- break
- fi
- done
- if test "X$getnbadd_net_type" = X; then
- rp='What is the type for the 1st argument to getnetbyaddr?'
- dflt="long"
- . ./myread
- getnbadd_net_type="$ans"
- fi
- $rm -f try.[co]
- else
- echo "Your system uses $getnbadd_net_type for the 1st argument to getnetbyaddr." >&4
- fi
- ;;
-*) getnbadd_net_type='long'
- ;;
+ for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
+ if $cc $ccflags -c -DNetdb_net_t="$xxx" try.c >/dev/null 2>&1 ; then
+ netdb_net_type="$xxx"
+ echo "Your system accepts $xxx for the 1st argument to getnetbyaddr." >&4
+ break
+ fi
+ done
+ if test "X$netdb_net_type" = X; then
+ rp='What is the type for the 1st argument to getnetbyaddr?'
+ dflt="long"
+ . ./myread
+ netdb_net_type="$ans"
+ fi
+ $rm -f try.[co]
+ else
+ echo "Your system accepts $netdb_net_type for the 1st argument to getnetbyaddr." >&4
+ fi
+ ;;
+*) netdb_net_type='long'
+ ;;
esac
: see what type of char stdio uses.
@@ -10356,19 +10445,26 @@ d_fsetpos='$d_fsetpos'
d_ftime='$d_ftime'
d_getgrps='$d_getgrps'
d_setgrps='$d_setgrps'
-d_gethbadd='$d_gethbadd'
-gethbadd_addr_type='$gethbadd_addr_type'
-gethbadd_alen_type='$gethbadd_alen_type'
+d_gethbyaddr='$d_gethbyaddr'
+netdb_host_type='$netdb_host_type'
+netdb_hlen_type='$netdb_hlen_type'
+d_gethbynam='$d_gethbynam'
+netdb_name_type='$netdb_name_type'
d_gethent='$d_gethent'
d_gethname='$d_gethname'
d_getlogin='$d_getlogin'
-d_getnbadd='$d_getnbadd'
-getnbadd_net_type='$getnbadd_net_type'
+d_getnbyaddr='$d_getnbyaddr'
+d_getnbyname='$d_getnbyname'
+netdb_net_type='$netdb_net_type'
d_getpgid='$d_getpgid'
d_getpgrp2='$d_getpgrp2'
d_getpgrp='$d_getpgrp'
d_getppid='$d_getppid'
d_getprior='$d_getprior'
+d_getpbyname='$d_getpbyname'
+d_getpbynumber='$d_getpbynumber'
+d_getsbyname='$d_getsbyname'
+d_getsbyport='$d_getsbyport'
d_gettimeod='$d_gettimeod'
d_gnulibc='$d_gnulibc'
d_htonl='$d_htonl'
diff --git a/config_h.SH b/config_h.SH
index 33009ab3c2..5ff88445ac 100644
--- a/config_h.SH
+++ b/config_h.SH
@@ -329,35 +329,80 @@ sed <<!GROK!THIS! >config.h -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-
*/
#$d_gethent HAS_GETHOSTENT /**/
-/* HAS_GETHBADD:
+/* HAS_GETHOSTBYADDR:
* This symbol, if defined, indicates that the gethostbyaddr routine is
- * available to lookup host names by their IP addresses.
+ * available to lookup hosts by their IP addresses.
*/
-#$d_gethbadd HAS_GETHBADD /**/
+#$d_gethbyaddr HAS_GETHOSTBYADDR /**/
-/* Gethbadd_addr_t:
+/* Netdb_host_t:
* This symbol holds the type used for the 1st argument
* to gethostbyaddr().
*/
-#define Gethbadd_addr_t $gethbadd_addr_type
+#define Netdb_host_t $netdb_host_type
-/* Gethbadd_alen_t:
+/* Netdb_hlen_t:
* This symbol holds the type used for the 2nd argument
* to gethostbyaddr().
*/
-#define Gethbadd_alen_t $gethbadd_alen_type
+#define Netdb_hlen_t $netdb_hlen_type
-/* HAS_GETNBADD:
+/* HAS_GETHOSTBYNAME:
+ * This symbol, if defined, indicates that the gethostbyname routine is
+ * available to lookup hosts by their DNS names.
+ */
+#$d_gethbyname HAS_GETHOSTBYNAME /**/
+
+/* Netdb_name_t:
+ * This symbol holds the type used for the 1st argument
+ * to gethostbyname(), the 1st argument to getnetbyname(),
+ * the 1st argument to getprotobyname(), the 1st argument to
+ * getservbyname(), the 2nd argument to getservbyname(),
+ * and the 2nd argument to getservbyport().
+ */
+#define Netdb_name_t $netdb_name_type
+
+/* HAS_GETNETBYADD:
* This symbol, if defined, indicates that the getnetbyaddr routine is
* available to lookup networks by their IP addresses.
*/
-#$d_getnbadd HAS_GETNBADD /**/
+#$d_getnbyaddr HAS_GETNETBYADD /**/
-/* Gethbadd_net_t:
+/* Netdb_net_t:
* This symbol holds the type used for the 1st argument
* to getnetbyaddr().
*/
-#define Getnbadd_net_t $getnbadd_net_type
+#define Netdb_net_t $netdb_net_type
+
+/* HAS_GETNETBYNAME:
+ * This symbol, if defined, indicates that the getnetbyname routine is
+ * available to lookup networks by their names.
+ */
+#$d_getnbyname HAS_GETNETBYNAME /**/
+
+/* HAS_GETPROTOBYNAME:
+ * This symbol, if defined, indicates that the getprotobyname routine is
+ * available to lookup protocols by their names.
+ */
+#$d_getpbyname HAS_GETPROTOBYNAME /**/
+
+/* HAS_GETPROTOBYNUMBER:
+ * This symbol, if defined, indicates that the getprotobynumber routine is
+ * available to lookup protocols by their numbers.
+ */
+#$d_getpbynumber HAS_GETPROTOBYNUMBER /**/
+
+/* HAS_GETSERVBYNAME:
+ * This symbol, if defined, indicates that the getservbyname routine is
+ * available to lookup services by their names.
+ */
+#$d_getsbyname HAS_GETSERVBYNAME /**/
+
+/* HAS_GETSERVBYPORT:
+ * This symbol, if defined, indicates that the getservbyport routine is
+ * available to lookup services by their ports.
+ */
+#$d_getsbyport HAS_GETSERVBYPORT /**/
/* HAS_UNAME:
* This symbol, if defined, indicates that the C program may use the
diff --git a/pod/perldiag.pod b/pod/perldiag.pod
index 20c0ae1325..6802b08ac5 100644
--- a/pod/perldiag.pod
+++ b/pod/perldiag.pod
@@ -899,6 +899,30 @@ a B<-e> switch. Maybe your /tmp partition is full, or clobbered.
opposed to a subroutine reference): no such method callable via the
package. If method name is C<???>, this is an internal error.
+=item Character class syntax [. .] is reserved for future extensions
+
+(W) Within regular expression character classes ([]) the syntax beginning
+with "[." and ending with ".]" is reserved for future extensions.
+If you need to represent those character sequences inside a regular
+expression character class, just quote the square brackets with the
+backslash: "\[." and ".\]".
+
+=item Character class syntax [: :] is reserved for future extensions
+
+(W) Within regular expression character classes ([]) the syntax beginning
+with "[:" and ending with ":]" is reserved for future extensions.
+If you need to represent those character sequences inside a regular
+expression character class, just quote the square brackets with the
+backslash: "\[:" and ":\]".
+
+=item Character class syntax [= =] is reserved for future extensions
+
+(W) Within regular expression character classes ([]) the syntax
+beginning with "[=" and ending with "=]" is reserved for future extensions.
+If you need to represent those character sequences inside a regular
+expression character class, just quote the square brackets with the
+backslash: "\[=" and "=\]".
+
=item chmod: mode argument is missing initial 0
(W) A novice will sometimes say
diff --git a/pp_sys.c b/pp_sys.c
index a5de48bafe..ce5af57ab7 100644
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -3579,8 +3579,8 @@ PP(pp_ghostent)
register char **elem;
register SV *sv;
#if defined(HAS_GETHOSTENT) && !defined(DONT_DECLARE_STD)
- struct hostent *PerlSock_gethostbyname(const char *);
- struct hostent *PerlSock_gethostbyaddr(const Gethbadd_addr_t, Gethbadd_alen_t, int);
+ struct hostent *PerlSock_gethostbyaddr(Netdb_host_t, Netdb_hlen_t, int);
+ struct hostent *PerlSock_gethostbyname(Netdb_name_t);
#ifndef PerlSock_gethostent
struct hostent *PerlSock_gethostent(void);
#endif
@@ -3596,9 +3596,9 @@ PP(pp_ghostent)
int addrtype = POPi;
SV *addrsv = POPs;
STRLEN addrlen;
- Gethbadd_addr_t addr = (Gethbadd_addr_t) SvPV(addrsv, addrlen);
+ Netdb_host_t addr = (Netdb_host_t) SvPV(addrsv, addrlen);
- hent = PerlSock_gethostbyaddr(addr, (Gethbadd_alen_t) addrlen, addrtype);
+ hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
}
else
#ifdef HAS_GETHOSTENT
@@ -3682,12 +3682,8 @@ PP(pp_gnetent)
register char **elem;
register SV *sv;
#ifdef NETDB_H_OMITS_GETNET
- struct netent *getnetbyname(const char *);
- /*
- * long is wrong for getnetbyadddr (e.g. on Alpha). POSIX.1g says
- * in_addr_t but then such systems don't have broken netdb.h anyway.
- */
- struct netent *getnetbyaddr(Getnbadd_net_t, int);
+ struct netent *getnetbyaddr(Netdb_net_t, int);
+ struct netent *getnetbyname(Netdb_name_t);
struct netent *getnetent(void);
#endif
struct netent *nent;
@@ -3696,7 +3692,7 @@ PP(pp_gnetent)
nent = getnetbyname(POPp);
else if (which == OP_GNBYADDR) {
int addrtype = POPi;
- Getnbadd_net_t addr = (Getnbadd_net_t) U_L(POPn);
+ Netdb_net_t addr = (Netdb_net_t) U_L(POPn);
nent = getnetbyaddr(addr, addrtype);
}
else
@@ -3761,7 +3757,7 @@ PP(pp_gprotoent)
register char **elem;
register SV *sv;
#ifndef DONT_DECLARE_STD
- struct protoent *PerlSock_getprotobyname(const char *);
+ struct protoent *PerlSock_getprotobyname(Netdb_name_t);
struct protoent *PerlSock_getprotobynumber(int);
#ifndef PerlSock_getprotoent
struct protoent *PerlSock_getprotoent(void);
@@ -3833,8 +3829,8 @@ PP(pp_gservent)
register char **elem;
register SV *sv;
#ifndef DONT_DECLARE_STD
- struct servent *PerlSock_getservbyname(const char *, const char *);
- struct servent *PerlSock_getservbynumber();
+ struct servent *PerlSock_getservbyname(Netdb_name_t, Netdb_name_t);
+ struct servent *PerlSock_getservbyport(int, Netdb_name_t);
#ifndef PerlSock_getservent
struct servent *PerlSock_getservent(void);
#endif
diff --git a/regcomp.c b/regcomp.c
index aa713bc0a5..a42c4db0a4 100644
--- a/regcomp.c
+++ b/regcomp.c
@@ -1866,6 +1866,30 @@ regclass(void)
while (regparse < regxend && *regparse != ']') {
skipcond:
Class = UCHARAT(regparse++);
+ if (Class == '[' && regparse + 1 < regxend &&
+ /* I smell either [: or [= or [. -- POSIX has been here, right? */
+ (*regparse == ':' || *regparse == '=' || *regparse == '.')) {
+ char posixccc = *regparse;
+ char* posixccs = regparse++;
+
+ while (regparse < regxend && *regparse != posixccc)
+ regparse++;
+ if (regparse == regxend)
+ /* Grandfather lone [:, [=, [. */
+ regparse = posixccs;
+ else {
+ regparse++; /* skip over the posixccc */
+ if (*regparse == ']') {
+ /* Not Implemented Yet.
+ * (POSIX Extended Character Classes, that is)
+ * The text between e.g. [: and :] would start
+ * at posixccs + 1 and stop at regparse - 2. */
+ if (dowarn && !SIZE_ONLY)
+ warn("Character class syntax [%c %c] is reserved for future extensions", posixccc, posixccc);
+ regparse++; /* skip over the ending ] */
+ }
+ }
+ }
if (Class == '\\') {
Class = UCHARAT(regparse++);
switch (Class) {
@@ -2662,6 +2686,3 @@ re_croak2(const char* pat1,const char* pat2, va_alist)
buf[l1] = '\0'; /* Overwrite \n */
croak("%s", buf);
}
-
-
-
diff --git a/t/op/misc.t b/t/op/misc.t
index 7a7fc334d3..1ca45db039 100755
--- a/t/op/misc.t
+++ b/t/op/misc.t
@@ -357,3 +357,4 @@ begin <a>
init <b>
end <c>
argv <>
+########
diff --git a/t/op/pat.t b/t/op/pat.t
index 5d8bf8ad78..5ea9bb44ae 100755
--- a/t/op/pat.t
+++ b/t/op/pat.t
@@ -2,7 +2,7 @@
# $RCSfile: pat.t,v $$Revision: 4.1 $$Date: 92/08/07 18:28:12 $
-print "1..101\n";
+print "1..104\n";
$x = "abc\ndef\n";
@@ -354,3 +354,28 @@ $x =~ /.a/g;
print "not " unless f(pos($x)) == 4;
print "ok $test\n";
$test++;
+
+sub must_warn_pat {
+ my $warn_pat = shift;
+ return sub { print "not " unless $_[0] =~ /$warn_pat/ }
+}
+
+sub must_warn {
+ my ($warn_pat, $code) = @_;
+ local $^W; local %SIG;
+ eval 'BEGIN { $^W = 1; $SIG{__WARN__} = $warn_pat };' . $code;
+ print "ok $test\n";
+ $test++;
+}
+
+
+sub make_must_warn {
+ my $warn_pat = shift;
+ return sub { must_warn(must_warn_pat($warn_pat)) }
+}
+
+my $for_future = make_must_warn('reserved for future extensions');
+
+&$for_future('q(a:[b]:) =~ /[x[:foo:]]/');
+&$for_future('q(a=[b]=) =~ /[x[=foo=]]/');
+&$for_future('q(a.[b].) =~ /[x[.foo.]]/');
diff --git a/t/op/re_tests b/t/op/re_tests
index b688a167f2..121e96481f 100644
--- a/t/op/re_tests
+++ b/t/op/re_tests
@@ -431,6 +431,12 @@ $(?<=^(a)) a y $1 a
(?{$a=2})(a(?{local$a=$a+1}))*aak*c(?{$b=$a}) yaaxxaaaacd y $b 4
(>a+)ab aaab n - -
(?>a+)b aaab y - -
+([[:]+) a:[b]: y $1 :[
+([[=]+) a=[b]= y $1 =[
+([[.]+) a.[b]. y $1 .[
+[a[:xyz: - c - /[a[:xyz:/: unmatched [] in regexp
+[a[:xyz:] - c - /[a[:xyz:]/: unmatched [] in regexp
+([a[:xyz:]b]+) pbaq y $1 ba
((?>a+)b) aaab y $1 aaab
(?>(a+))b aaab y $1 aaa
((?>[^()]+)|\([^()]*\))+ ((abc(ade)ufh()()x y $& abc(ade)ufh()()x
diff --git a/t/pragma/locale.t b/t/pragma/locale.t
index d068465fb3..8875f7caa6 100755
--- a/t/pragma/locale.t
+++ b/t/pragma/locale.t
@@ -291,14 +291,18 @@ locatelocale(\$Spanish, \@Spanish,
($Locale, @Locale) = ($Spanish, @Spanish)
if (@Spanish > @Locale);
-print "# Locale = $Locale\n";
-print "# Alnum_ = @Locale\n";
-
{
local $^W = 0;
setlocale(&LC_ALL, $Locale);
}
+# Sort it now that LC_ALL has been set.
+
+@Locale = sort @Locale;
+
+print "# Locale = $Locale\n";
+print "# Alnum_ = @Locale\n";
+
{
my $i = 0;