This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldiag: miscellaneous clean-up
[perl5.git] / pod / perldiag.pod
index fadbbad..9d9786e 100644 (file)
@@ -20,7 +20,7 @@ The majority of messages from the first three classifications above
 
 If a message can be controlled by the C<warnings> pragma, its warning
 category is included with the classification letter in the description
-below.
+below.  E.g. C<(W closed)> means a warning in the C<closed> category.
 
 Optional warnings are enabled by using the C<warnings> pragma or the B<-w>
 and B<-W> switches.  Warnings may be captured by setting C<$SIG{__WARN__}>
@@ -536,13 +536,15 @@ check the return value of your socket() call?  See L<perlfunc/bind>.
 (W unopened) You tried binmode() on a filehandle that was never opened.
 Check your control flow and number of arguments.
 
-=item "\b{" is deprecated; use "\b\{" instead in regex; marked by <-- HERE in m/%s/
+=item "\b{" is deprecated; use "\b\{" or "\b[{]" instead in regex; marked by <-- HERE in m/%s/
 
-=item "\B{" is deprecated; use "\B\{" instead in regex; marked by <-- HERE in m/%s/
+=item "\B{" is deprecated; use "\B\{" or "\B[{]" instead in regex; marked by <-- HERE in m/%s/
 
-(W deprecated, regexp) Use of an unescaped "{" immediately following a
+(W deprecated) Use of an unescaped "{" immediately following a
 C<\b> or C<\B> is now deprecated so as to reserve its use for Perl
-itself in a future release.
+itself in a future release.  You can either precede the brace with a
+backslash, or enclose it in square brackets; the latter is the way to go
+if the pattern delimiters are C<{}>.
 
 =item Bit vector size > 32 non-portable
 
@@ -671,7 +673,7 @@ Something like this will reproduce the error:
 
 =item Can't chdir to %s
 
-(F) You called C<perl -x/foo/bar>, but C</foo/bar> is not a directory
+(F) You called C<perl -x/foo/bar>, but F</foo/bar> is not a directory
 that you can chdir to, possibly because it doesn't exist.
 
 =item Can't check filesystem of script "%s" for nosuid
@@ -787,7 +789,7 @@ is no builtin with the name C<word>.
 (F) You used C<\p{}> or C<\P{}> but the character property by that name
 could not be found.  Maybe you misspelled the name of the property?
 See L<perluniprops/Properties accessible through \p{} and \P{}>
-for a complete list of available properties.
+for a complete list of available official properties.
 
 =item Can't find label %s
 
@@ -996,6 +998,15 @@ e.g. open(FH, ">:nosuchlayer", "somefile").
 (F) List assignment to %ENV is not supported on some systems, notably
 VMS.
 
+=item Can't make loaded symbols global on this platform while loading %s
+
+(W) A module passed the flag 0x01 to DynaLoader::dl_load_file() to request
+that symbols from the stated file are made available globally within the
+process, but that functionality is not available on this platform.  Whilst
+the module likely will still work, this may prevent the perl interpreter
+from loading other XS-based extensions which need to link directly to
+functions defined in the C or XS code in the stated file.
+
 =item Can't modify %s in %s
 
 (F) You aren't allowed to assign to the item indicated, or otherwise try
@@ -1300,11 +1311,12 @@ Perhaps you need to copy the value to a temporary, and repeat that.
 =item Character following "\c" must be ASCII
 
 (F)(W deprecated, syntax) In C<\cI<X>>, I<X> must be an ASCII character.
-It is planned to make this fatal in all instances in Perl 5.18.  In the
-cases where it isn't fatal, the character this evaluates to is
+It is planned to make this fatal in all instances in Perl v5.20.  In
+the cases where it isn't fatal, the character this evaluates to is
 derived by exclusive or'ing the code point of this character with 0x40.
 
-Note that non-alphabetic ASCII characters are discouraged here as well.
+Note that non-alphabetic ASCII characters are discouraged here as well,
+and using non-printable ones will be deprecated starting in v5.18.
 
 =item Character in 'C' format wrapped in pack
 
@@ -1389,7 +1401,7 @@ uses the character values modulus 256 instead, as if you had provided:
 (D deprecated, syntax) The C<\cI<X>> construct is intended to be a way
 to specify non-printable characters.  You used it with a "{" which
 evaluates to ";", which is printable.  It is planned to remove the
-ability to specify a semi-colon this way in Perl 5.18.  Just use a
+ability to specify a semi-colon this way in Perl 5.20.  Just use a
 semi-colon or a backslash-semi-colon without the "\c".
 
 =item "\c%c" is more clearly written simply as "%s"
@@ -1571,6 +1583,12 @@ called as barewords.  Something like this will work:
 
 (F) The CORE:: namespace is reserved for Perl keywords.
 
+=item Corrupted regexp opcode %d > %d
+
+(P) This is either an error in Perl, or, if you're using
+one, your L<custom regular expression engine|perlreapi>.  If not the
+latter, report the problem through the L<perlbug> utility.
+
 =item corrupted regexp pointers
 
 (P) The regular expression engine got confused by what the regular
@@ -1720,7 +1738,7 @@ See Server error.
 =item %s does not define %s::VERSION--version check failed
 
 (F) You said something like "use Module 42" but the Module did not
-define a C<$VERSION.>
+define a C<$VERSION>.
 
 =item '/' does not take a repeat count
 
@@ -1772,7 +1790,7 @@ it's ugly.  Your code will be interpreted as an attempt to call a method
 named "elseif" for the class returned by the following block.  This is
 unlikely to be what you want.
 
-=item Empty %s
+=item Empty \%c{} in regex; marked by <-- HERE in m/%s/
 
 (F) C<\p> and C<\P> are used to introduce a named Unicode property, as
 described in L<perlunicode> and L<perlre>.  You used C<\p> or C<\P> in
@@ -1887,6 +1905,16 @@ as a goto, or a loop control statement.
 (W exiting) You are exiting a substitution by unconventional means, such
 as a return, a goto, or a loop control statement.
 
+=item Expecting close bracket in regex; marked by <-- HERE in m/%s/
+
+(F) You wrote something like
+
+ (?13
+
+to denote a capturing group of the form
+L<C<(?I<PARNO>)>|perlre/(?PARNO) (?-PARNO) (?+PARNO) (?R) (?0)>,
+but omitted the C<")">.
+
 =item Experimental "%s" subs not enabled
 
 (F) To use lexical subs, you must first enable them:
@@ -2045,6 +2073,13 @@ C<getpwnam> operator returned an invalid UIC.
 forget to check the return value of your socket() call?  See
 L<perlfunc/getsockopt>.
 
+=item given is experimental
+
+(S experimental::smartmatch) C<given> depends on smartmatch, which
+is experimental, so its behavior may change or even be removed
+in any future release of perl.  See the explanation under
+L<perlsyn/Experimental Details on given and when>.
+
 =item Global symbol "%s" requires explicit package name
 
 (F) You've said "use strict" or "use strict vars", which indicates 
@@ -2231,6 +2266,16 @@ two from 1 to 32 (or 64, if your platform supports that).
 (W digit) You may have tried to use an 8 or 9 in an octal number.
 Interpretation of the octal number stopped before the 8 or 9.
 
+=item Illegal pattern in regex; marked by <-- HERE in m/%s/
+
+(F) You wrote something like
+
+ (?+foo)
+
+The C<"+"> is valid only when followed by digits, indicating a
+capturing group.  See
+L<C<(?I<PARNO>)>|perlre/(?PARNO) (?-PARNO) (?+PARNO) (?R) (?0)>.
+
 =item Illegal switch in PERL5OPT: -%c
 
 (X) The PERL5OPT environment variable may only be used to set the
@@ -2260,6 +2305,13 @@ would otherwise result in the same message being repeated.
 Failure of user callbacks dispatched using the C<G_KEEPERR> flag could
 also result in this warning.  See L<perlcall/G_KEEPERR>.
 
+=item Incomplete expression within '(?[ ])' in regex; marked by <-- HERE in m/%s/
+
+(F) There was a syntax error within the C<(?[ ])>.  This can happen if the
+expression inside the construct was completely empty, or if there are
+too many or few operands for the number of operators.  Perl is not smart
+enough to give you a more precise indication as to what is wrong.
+
 =item Inconsistent hierarchy during C3 merge of class '%s': merging failed on 
 parent '%s'
 
@@ -2322,6 +2374,16 @@ expression that contains a call to a user-defined character property
 function, i.e. C<\p{IsFoo}> or C<\p{InFoo}>.
 See L<perlunicode/User-Defined Character Properties> and L<perlsec>.
 
+=item In '(?...)', splitting the initial '(?' is deprecated in regex; marked by <-- HERE in m/%s/
+
+(D regexp, deprecated) The two-character sequence C<"(?"> in
+this context in a regular expression pattern should be an
+indivisible token, with nothing intervening between the C<"(">
+and the C<"?">, but you separated them.  Due to an accident of
+implementation, this prohibition was not enforced, but we do
+plan to forbid it in a future Perl version.  This message
+serves as giving you fair warning of this pending change.
+
 =item Integer overflow in format string for %s
 
 (F) The indexes and widths specified in the format string of C<printf()>
@@ -2456,7 +2518,7 @@ character (U+FFFD).
 
 (S debugging) Perl was called with invalid debugger flags.  Call perl
 with the B<-D> option with no flags to see the list of acceptable values.
-See also L<perlrun/B<-D>I<letters>>.
+See also L<perlrun/-Dletters>.
 
 =item Invalid [] range "%s" in regex; marked by <-- HERE in m/%s/
 
@@ -2521,6 +2583,16 @@ for more details on allowed version formats.
 Perhaps the internals were modified directly in some way or
 an arbitrary reference was blessed into the "version" class.
 
+=item In '(*VERB...)', splitting the initial '(*' is deprecated in regex; marked by <-- HERE in m/%s/
+
+(D regexp, deprecated) The two-character sequence C<"(*"> in
+this context in a regular expression pattern should be an
+indivisible token, with nothing intervening between the C<"(">
+and the C<"*">, but you separated them. Due to an accident of
+implementation, this prohibition was not enforced, but we do
+plan to forbid it in a future Perl version.  This message
+serves as giving you fair warning of this pending change.
+
 =item ioctl is not implemented
 
 (F) Your machine apparently doesn't implement ioctl(), which is pretty
@@ -2619,10 +2691,10 @@ The number of items in a hash can be obtained by doing:
 
 =item Lexing code attempted to stuff non-Latin-1 character into Latin-1 input
 
-(F) An extension is attempting to insert text into the current parse
-(using L<lex_stuff_pvn|perlapi/lex_stuff_pvn> or similar), but tried to insert a character that
-couldn't be part of the current input.  This is an inherent pitfall
-of the stuffing mechanism, and one of the reasons to avoid it.  Where
+(F) An extension is attempting to insert text into the current parse (using
+L<lex_stuff_pvn|perlapi/lex_stuff_pvn> or similar), but tried to insert a
+character that couldn't be part of the current input.  This is an inherent
+pitfall of the stuffing mechanism, and one of the reasons to avoid it.  Where
 it is necessary to stuff, stuffing only plain ASCII is recommended.
 
 =item Lexing code internal error (%s)
@@ -3042,6 +3114,25 @@ C<\N> is separated by spaces from the C<{>, in which case, remove the spaces.
     /\N {SPACE}/x;     # Wrong!
     /\N{SPACE}/x;      # ok
 
+=item Need exactly 3 octal digits in regex; marked by <-- HERE in m/%s/
+
+(F) Within S<C<(?[   ])>>, all constants interpreted as octal need to be
+exactly 3 digits long.  This helps catch some ambiguities.  If your
+constant is too short, add leading zeros, like
+
+ (?[ [ \078 ] ])     # Syntax error!
+ (?[ [ \0078 ] ])    # Works
+ (?[ [ \007 8 ] ])   # Clearer
+
+The maximum number this construct can express is C<\777>.  If you
+need a larger one, you need to use L<\o{}|perlrebackslash/Octal escapes> instead.  If you meant
+two separate things, you need to separate them:
+
+ (?[ [ \7776 ] ])        # Syntax error!
+ (?[ [ \o{7776} ] ])     # One meaning
+ (?[ [ \777 6 ] ])       # Another meaning
+ (?[ [ \777 \006 ] ])    # Still another
+
 =item Negative '/' count in unpack
 
 (F) The length count obtained from a length/code unpack operation was
@@ -3166,11 +3257,38 @@ in the remaining packages of the MRO of this class.  If you don't want
 it throwing an exception, use C<maybe::next::method>
 or C<next::can>.  See L<mro>.
 
+=item Non-hex character in regex; marked by <-- HERE in m/%s/
+
+(F) In a regular expression, there was a non-hexadecimal character where
+a hex one was expected, like
+
+ (?[ [ \xDG ] ])
+ (?[ [ \x{DEKA} ] ])
+
+=item Non-octal character in regex; marked by <-- HERE in m/%s/
+
+(F) In a regular expression, there was a non-octal character where
+an octal one was expected, like
+
+ (?[ [ \o{1278} ] ])
+
+=item Non-octal character '%c'.  Resolved as "%s"
+
+(W digit) In parsing an octal numeric constant, a character was
+unexpectedly encountered that isn't octal.  The resulting value
+is as indicated.
+
 =item "no" not allowed in expression
 
 (F) The "no" keyword is recognized and executed at compile time, and
 returns no useful value.  See L<perlmod>.
 
+=item Non-string passed as bitmask
+
+(W misc) A number has been passed as a bitmask argument to select().
+Use the vec() function to construct the file descriptor bitmasks for
+select.  See L<perlfunc/select>.
+
 =item No output file after > on command line
 
 (F) An error peculiar to VMS.  Perl handles its own command line
@@ -3298,6 +3416,13 @@ supplied.  See L<perlform>.
 of Perl.  Check the #! line, or manually feed your script into Perl
 yourself.
 
+=item (?[...]) not valid in locale in regex; marked by <-- HERE in m/%s/
+
+(F) C<(?[...])> cannot be used within the scope of a C<S<use locale>> or with
+an C</l> regular expression modifier, as that would require deferring
+to run-time the calculation of what it should evaluate to, and it is
+regex compile-time only.
+
 =item no UTC offset information; assuming local time is UTC
 
 (S) A warning peculiar to VMS.  Perl was unable to find the local
@@ -3306,18 +3431,6 @@ to UTC.  If it's not, define the logical name
 F<SYS$TIMEZONE_DIFFERENTIAL> to translate to the number of seconds which
 need to be added to UTC to get local time.
 
-=item Non-octal character '%c'.  Resolved as "%s"
-
-(W digit) In parsing an octal numeric constant, a character was
-unexpectedly encountered that isn't octal.  The resulting value
-is as indicated.
-
-=item Non-string passed as bitmask
-
-(W misc) A number has been passed as a bitmask argument to select().
-Use the vec() function to construct the file descriptor bitmasks for
-select.  See L<perlfunc/select>.
-
 =item Null filename used
 
 (F) You can't require the null filename, especially because on many
@@ -3438,6 +3551,15 @@ a symbol (glob or scalar) that already holds a filehandle.
 Although legal, this idiom might render your code confusing
 and is deprecated.
 
+=item Operand with no preceding operator in regex; marked by <-- HERE in m/%s/
+
+(F) You wrote something like
+
+ (?[ \p{Digit} \p{Thai} ])
+
+There are two operands, but no operator giving how you want to combine
+them.
+
 =item Operation "%s": no method found, %s
 
 (F) An attempt was made to perform an overloaded operation for which no
@@ -3860,11 +3982,11 @@ that a method requires a package that has not been loaded.
 =item Perl folding rules are not up-to-date for 0x%X; please use the perlbug 
 utility to report; in regex; marked by <-- HERE in m/%s/
 
-(W regexp, deprecated) You used a regular expression with
+(D regexp, deprecated) You used a regular expression with
 case-insensitive matching, and there is a bug in Perl in which the
-built-in regular expression folding rules are not accurate.  This may
-lead to incorrect results.  Please report this as a bug using the
-"perlbug" utility.  (This message is marked deprecated, so that it by
+built-in regular expression folding rules are not accurate.  This
+may lead to incorrect results.  Please report this as a bug using the
+L<perlbug> utility.  (This message is marked deprecated, so that it by
 default will be turned-on.)
 
 =item Perl_my_%s() not available
@@ -3905,6 +4027,12 @@ on the version of Perl you are using because it is too new.
 Maybe the code needs to be updated, or maybe it is simply
 wrong and the version check should just be removed.
 
+=item perl: warning: Non hex character in '$ENV{PERL_HASH_SEED}', seed only partially set
+
+(W) PERL_HASH_SEED should match /^\s*(?:0x)?[0-9a-fA-F]+\s*\z/ but it
+contained a non hex character.  This could mean you are not using the
+hash seed you think you are.
+
 =item perl: warning: Setting locale failed.
 
 (S) The whole warning message will look something like:
@@ -3927,12 +4055,20 @@ fix the problem, however, you will get the same error message each
 time you run Perl.  How to really fix the problem can be found in
 L<perllocale> section B<LOCALE PROBLEMS>.
 
-=item perl: warning: Non hex character in '$ENV{PERL_HASH_SEED}', seed only 
-partially set
+=item perl: warning: strange setting in '$ENV{PERL_PERTURB_KEYS}': '%s'
 
-(W) PERL_HASH_SEED should match /^\s*(?:0x)?[0-9a-fA-F]+\s*\z/ but it
-contained a non hex character. This could mean your hash randomization
-is not being set correctly.
+(W) Perl was run with the environment variable PERL_PERTURB_KEYS defined
+but containing an unexpected value.  The legal values of this setting
+are as follows.
+
+  Numeric | String        | Result
+  --------+---------------+-----------------------------------------
+  0       | NO            | Disables key traversal randomization
+  1       | RANDOM        | Enables full key traversal randomization
+  2       | DETERMINISTIC | Enables repeatable key traversal randomization
+
+Both numeric and string values are accepted, but note that string values are
+case sensitive.  The default for this setting is "RANDOM" or 1.
 
 =item pid %x not a child
 
@@ -4109,6 +4245,16 @@ port.  One can easily disable this by appropriate sighandlers, see
 L<perlipc/"Signals">.  See also "Process terminated by SIGTERM/SIGINT"
 in L<perlos2>.
 
+=item Property '%s' is unknown in regex; marked by <-- HERE in m/%s/
+
+(F) The named property which you specified via C<\p> or C<\P> is not one
+known to Perl.  Perhaps you misspelled the name?  See
+L<perluniprops/Properties accessible through \p{} and \P{}>
+for a complete list of available official
+properties.  If it is a L<user-defined property|perlunicode/User-Defined Character Properties>
+it must have been defined by the time the regular expression is
+compiled.
+
 =item Prototype after '%c' for %s : %s
 
 (W illegalproto) A character follows % or @ in a prototype.  This is
@@ -4160,6 +4306,13 @@ expression the problem was discovered.  See L<perlre>.
 the {min,max} construct.  The <-- HERE shows whereabouts in the regular
 expression the problem was discovered.  See L<perlre>.
 
+=item Quantifier {n,m} with n > m can't match in regex
+
+=item Quantifier {n,m} with n > m can't match in regex; marked by <-- HERE in m/%s/
+
+(W regexp) Minima should be less than or equal to maxima.  If you really
+want your regexp to match something 0 times, just put {0}.
+
 =item Quantifier unexpected on zero-length expression in regex; marked by <-- 
 HERE in m/%s/
 
@@ -4172,11 +4325,6 @@ C</abc(?=(?:xyz){3})/>, not C</abc(?=xyz){3}/>.
 The <-- HERE shows whereabouts in the regular expression the problem was
 discovered.
 
-=item Quantifier {n,m} with n > m can't match in regex; marked by <-- HERE in m/%s/
-
-(W regexp) Minima should be less than or equal to maxima.  If you really
-want your regexp to match something 0 times, just put {0}.
-
 =item Range iterator outside integer range
 
 (F) One (or both) of the numeric arguments to the range operator ".."
@@ -4489,11 +4637,7 @@ L<perlre>.
 (F) The end of the perl code contained within the {...} must be
 followed immediately by a ')'.
 
-=item Z<>500 Server error
-
-See Server error.
-
-=item Server error
+=item Server error (a.k.a. "500 Server error")
 
 (A) This is the error message generally seen in a browser window
 when trying to run a CGI program (including SSI) over the web.  The
@@ -4600,8 +4744,17 @@ requested.
 =item Smart matching a non-overloaded object breaks encapsulation
 
 (F) You should not use the C<~~> operator on an object that does not
-overload it: Perl refuses to use the object's underlying structure for
-the smart match.
+overload it: Perl refuses to use the object's underlying structure
+for the smart match.
+
+=item Smartmatch is experimental
+
+(S experimental::smartmatch) This warning is emitted if you
+use the smartmatch (C<~~>) operator.  This is currently an experimental
+feature, and its details are subject to change in future releases of
+Perl.  Particularly, its current behavior is noticed for being
+unnecessarily complex and unintuitive, and is very likely to be
+overhauled.
 
 =item sort is now a reserved word
 
@@ -4807,6 +4960,11 @@ yourself.
 a perl4 interpreter, especially if the next 2 tokens are "use strict"
 or "my $var" or "our $var".
 
+=item Syntax error in (?[...]) in regex m/%s/
+
+(F) Perl could not figure out what you meant inside this construct; this
+notifies you that it is giving up trying.
+
 =item sysread() on closed filehandle %s
 
 (W closed) You tried to read from a closed filehandle.
@@ -4870,6 +5028,22 @@ think the U.S. Government thinks it's a secret, or at least that they
 will continue to pretend that it is.  And if you quote me on that, I
 will deny it.
 
+=item The %s feature is experimental
+
+(S experimental) This warning is emitted if you enable an experimental
+feature via C<use feature>.  Simply suppress the warning if you want
+to use the feature, but know that in doing so you are taking the risk
+of using an experimental feature which may change or be removed in a
+future Perl version:
+
+    no warnings "experimental::lexical_subs";
+    use feature "lexical_subs";
+
+=item The %s function is unimplemented
+
+(F) The function indicated isn't implemented on this architecture,
+according to the probings of Configure.
+
 =item The lexical_subs feature is experimental
 
 (S experimental::lexical_subs) This warning is emitted if you
@@ -4882,10 +5056,17 @@ change or be removed in a future Perl version:
     use feature "lexical_subs";
     my sub foo { ... }
 
-=item The %s function is unimplemented
+=item The regex_sets feature is experimental
 
-(F) The function indicated isn't implemented on this architecture, according
-to the probings of Configure.
+(S experimental::regex_sets) This warning is emitted if you
+use the syntax S<C<(?[   ])>> in a regular expression.
+The details of this feature are subject to change.
+if you want to use it, but know that in doing so you
+are taking the risk of using an experimental feature which may
+change in a future Perl version, you can do this to silence the
+warning:
+
+    no warnings "experimental::regex_sets";
 
 =item The stat preceding %s wasn't an lstat
 
@@ -4910,6 +5091,14 @@ F<PERL_ENV_TABLES> (see L<perlvms>) so that the environ array isn't the
 target of the change to
 %ENV which produced the warning.
 
+=item This Perl has not been built with support for randomized hash key traversal but something called Perl_hv_rand_set().
+
+(F) Something has attempted to use an internal API call which
+depends on Perl being compiled with the default support for randomized hash
+key traversal, but this Perl has been compiled without it. You should
+report this warning to the relevant upstream party, or recompile perl
+with default options.
+
 =item thread failed to start: %s
 
 (W threads)(S) The entry point function of threads->create() failed for some reason.
@@ -5121,11 +5310,54 @@ Check the #! line, or manually feed your script into Perl yourself.
 (F) The unexec() routine failed for some reason.  See your local FSF
 representative, who probably put it there in the first place.
 
+=item Unexpected binary operator '%c' with no preceding operand in regex; marked by <-- HERE in m/%s/
+
+(F) You had something like this:
+
+ (?[ | \p{Digit} ])
+
+where the C<"|"> is a binary operator with an operand on the right, but
+no operand on the left.
+
+=item Unexpected character in regex; marked by <-- HERE in m/%s/
+
+(F) You had something like this:
+
+ (?[ z ])
+
+Within C<(?[ ])>, no literal characters are allowed unless they are
+within an inner pair of square brackets, like
+
+ (?[ [ z ] ])
+
+Another possibility is that you forgot a backslash.  Perl isn't smart
+enough to figure out what you really meant.
+
 =item Unexpected constant lvalue entersub entry via type/targ %d:%d
 
 (P) When compiling a subroutine call in lvalue context, Perl failed an
 internal consistency check.  It encountered a malformed op tree.
 
+=item Unexpected ')' in regex; marked by <-- HERE in m/%s/
+
+(F) You had something like this:
+
+ (?[ ( \p{Digit} + ) ])
+
+The C<")"> is out-of-place.  Something apparently was supposed to
+be combined with the digits, or the C<"+"> shouldn't be there, or
+something like that.  Perl can't figure out what was intended.
+
+=item Unexpected '(' with no preceding operator in regex; marked by <-- HERE in m/%s/
+
+(F) You had something like this:
+
+ (?[ \p{Digit} ( \p{Lao} + \p{Thai} ) ])
+
+There should be an operator before the C<"(">, as there's
+no indication as to how the digits are to be combined
+with the characters in the Lao and Thai scripts.
+
 =item Unicode non-character U+%X is illegal for open interchange
 
 (S utf8, nonchar) Certain codepoints, such as U+FFFE and U+FFFF, are
@@ -5145,11 +5377,6 @@ problems when being input or output, which is likely where this message
 came from.  If you really really know what you are doing you can turn
 off this warning by C<no warnings 'surrogate';>.
 
-=item Unknown BYTEORDER
-
-(F) There are no byte-swapping functions for a machine with this byte
-order.
-
 =item Unknown charname '%s'
 
 (F) The name you used inside C<\N{}> is unknown to Perl.  Check the
@@ -5249,6 +5476,26 @@ Note that if you want to enable a warnings category registered by a
 module (e.g. C<use warnings 'File::Find'>), you must have loaded this
 module first.
 
+=item Unmatched '[' in POSIX class in regex; marked by <-- HERE in m/%s/
+
+(F) You had something like this:
+
+ (?[ [:digit: ])
+
+That should be written:
+
+ (?[ [:digit:] ])
+
+=item Unmatched '%c' in POSIX class in regex; marked by <-- HERE in m/%s/
+
+(F) You had something like this:
+
+ (?[ [:alnum] ])
+
+There should be a second C<":">, like this:
+
+ (?[ [:alnum:] ])
+
 =item Unmatched [ in regex; marked by <-- HERE in m/%s/
 
 (F) The brackets around a character class must match.  If you wish to
@@ -5285,6 +5532,12 @@ subroutine.
 in your Perl script (or eval) near the specified column.  Perhaps you tried 
 to run a compressed script, a binary program, or a directory as a Perl program.
 
+=item Unrecognized escape \%c in character class in regex; marked by <-- HERE in m/%s/
+
+(F) You used a backslash-character combination which is not
+recognized by Perl inside character classes.  This is a fatal
+error when the character class is used within C<(?[ ])>.
+
 =item Unrecognized escape \%c in character class passed through in regex; 
 marked by <-- HERE in m/%s/
 
@@ -5384,10 +5637,14 @@ instead of:
 
     <<"foo"
 
+=item Unterminated \g... pattern in regex; marked by <-- HERE in m/%s/
+
 =item Unterminated \g{...} pattern in regex; marked by <-- HERE in m/%s/
 
-(F) You missed a close brace on a \g{..} pattern (group reference) in
-a regular expression.  Fix the pattern and retry.
+(F) In a regular expression, you had a C<\g> that wasn't followed by a
+proper group reference.  In the case of C<\g{>, the closing brace is
+missing; otherwise the C<\g> must be followed by an integer.  Fix the
+pattern and retry.
 
 =item Unterminated <> operator
 
@@ -5498,7 +5755,7 @@ metacharacters even though they are backslashed; instead write:
  s[foo[a-z]bar][baz]
 
 The backslashes have no effect when a regular expression pattern is
-delimitted by C<{}>, C<[]>, or C<()>, which ordinarily are
+delimited by C<{}>, C<[]>, or C<()>, which ordinarily are
 metacharacters, and the delimiters are also used, paired, within the
 interior of the pattern.  It is planned that a future Perl release will
 change the meaning of constructs like these so that the backslashes
@@ -5549,6 +5806,11 @@ since they are often used in statements like
 String constants that would normally evaluate to 0 or 1 are warned
 about.
 
+=item Useless use of (?-p) in regex; marked by <-- HERE in m/%s/
+
+(W regexp) The C<p> modifier cannot be turned off once set.  Trying to do
+so is futile.
+
 =item Useless use of "re" pragma
 
 (W) You did C<use re;> without any arguments.  That isn't very useful.
@@ -5611,6 +5873,12 @@ modifier is not presently meaningful in substitutions.
 use the /g modifier.  Currently, /c is meaningful only when /g is
 used.  (This may change in the future.)
 
+=item Use of each() on hash after insertion without resetting hash iterator results in undefined behavior
+
+(S internal) The behavior of C<each()> after insertion is undefined; it may
+skip items, or visit items more than once. Consider using C<keys()> instead
+of C<each()>.
+
 =item Use of := for an empty attribute list is not allowed
 
 (F) The construction C<my $x := 42> used to parse as equivalent to
@@ -5691,11 +5959,11 @@ old way has bad side effects.
 it already went past any symlink you are presumably trying to look for.
 The operation returned C<undef>.  Use a filename instead.
 
-=item Use of my $_ is deprecated
+=item Use of my $_ is experimental
 
-(D deprecated) Lexical $_ is deprecated because of
-its confusing side-effects.  Consider using C<local $_>
-instead.  See the explanation under L<perlvar/$_>.
+(S experimental::lexical_topic) Lexical $_ is an experimental feature and
+its behavior may change or even be removed in any future release of perl.
+See the explanation under L<perlvar/$_>.
 
 =item Use of %s on a handle without * is deprecated
 
@@ -5728,11 +5996,11 @@ C<$array[0+$ref]>.  This warning is not given for overloaded objects,
 however, because you can overload the numification and stringification
 operators and then you presumably know what you are doing.
 
-=item Use of state $_ is deprecated
+=item Use of state $_ is experimental
 
-(D deprecated) Lexical $_ is deprecated because of
-its confusing side-effects.  Consider using C<local $_>
-instead.  See the explanation under L<perlvar/$_>.
+(S experimental::lexical_topic) Lexical $_ is an experimental feature and
+its behavior may change or even be removed in any future release of perl.
+See the explanation under L<perlvar/$_>.
 
 =item Use of tainted arguments in %s is deprecated
 
@@ -5751,12 +6019,28 @@ To help you figure out what was undefined, perl will try to tell you
 the name of the variable (if any) that was undefined.  In some cases
 it cannot do this, so it also tells you what operation you used the
 undefined value in.  Note, however, that perl optimizes your program
-anid the operation displayed in the warning may not necessarily appear
+and the operation displayed in the warning may not necessarily appear
 literally in your program.  For example, C<"that $foo"> is usually
 optimized into C<"that " . $foo>, and the warning will refer to the
 C<concatenation (.)> operator, even though there is no C<.> in
 your program.
 
+=item Use \x{...} for more than two hex characters in regex; marked by <-- HERE in m/%s/
+
+(F) In a regular expression, you said something like
+
+ (?[ [ \xBEEF ] ])
+
+Perl isn't sure if you meant this
+
+ (?[ [ \x{BEEF} ] ])
+
+or if you meant this
+
+ (?[ [ \x{BE} E F ] ])
+
+You need to add either braces or blanks to disambiguate.
+
 =item Using a hash as a reference is deprecated
 
 (D deprecated) You tried to use a hash as a reference, as in
@@ -5944,6 +6228,14 @@ but in actual fact, you got
 
 So put in parentheses to say what you really mean.
 
+=item when is experimental
+
+(S experimental::smartmatch) C<when> depends on smartmatch, which is
+experimental.  Additionally, it has several special cases that may
+not be immediately obvious, and their behavior may change or
+even be removed in any future release of perl.  See the explanation
+under L<perlsyn/Experimental Details on given and when>.
+
 =item Wide character in %s
 
 (S utf8) Perl met a wide character (>255) when it wasn't expecting
@@ -5969,9 +6261,9 @@ before now.  Check your control flow.
 
 =item %s "\x%X" does not map to Unicode
 
-(F) When reading in different encodings Perl tries to map everything
-into Unicode characters.  The bytes you read in are not legal in
-this encoding, for example
+(F) When reading in different encodings, Perl tries to map
+everything into Unicode characters.  The bytes you read in
+are not legal in this encoding.  For example
 
     utf8 "\xE4" does not map to Unicode
 
@@ -6004,7 +6296,7 @@ what you want, put an & in front.)
 
 =item Your random numbers are not that random
 
-(F) When trying to initialise the random seed for hashes, Perl could
+(F) When trying to initialize the random seed for hashes, Perl could
 not get any randomness out of your system.  This usually indicates
 Something Very Wrong.