This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Sort some perldiag entries
[perl5.git] / pod / perldiag.pod
index 09dace1..9a0e8b5 100644 (file)
@@ -103,11 +103,12 @@ a missing quote, operator, parenthesis pair or declaration.
 =item Ambiguous use of %c resolved as operator %c
 
 (W ambiguous) C<%>, C<&>, and C<*> are both infix operators (modulus,
-bitwise and, and multpication), and you said something like C<*foo *
-foo> that might be interpreted as either of them.  We assumed you
-meant the infix operator, but please try to make it more clear -- in
-the example given, you might write C<*foo * foo()> if you really meant
-to multiply a glob by the result of calling a function.
+bitwise and, and multiplication) I<and> initial special characters
+(denoting hashes, subroutines and typeglobs), and you said something
+like C<*foo * foo> that might be interpreted as either of them.  We
+assumed you meant the infix operator, but please try to make it more
+clear -- in the example given, you might write C<*foo * foo()> if you
+really meant to multiply a glob by the result of calling a function.
 
 =item Ambiguous use of %c{%s} resolved to %c%s
 
@@ -120,18 +121,27 @@ and a function with the same name, and save yourself a lot of trouble.
 
 =item Ambiguous use of %c{%s%s} resolved to %c%s%s
 
-(W ambiguous) You wrote something like C<${foo[2]}>, which might be
-looking for element number 2 of the array named C<@foo>, in which case
-please write C<$foo[2]>, or you might have meant to pass an anonymous
-arrayref to the function named foo, then do a scalar deref on the
-value it returns.  If you meant that, write C<${foo([2])}>.
+(W ambiguous) You wrote something like C<${foo[2]}> (where foo
+represents the name of a Perl keyword), which might be looking for
+element number 2 of the array named C<@foo>, in which case please write
+C<$foo[2]>, or you might have meant to pass an anonymous arrayref to
+the function named foo, and then do a scalar deref on the value it
+returns.  If you meant that, write C<${foo([2])}>.
+
+In regular expressions, the C<${foo[2]}> syntax is sometimes necessary
+to disambiguate between array subscripts and character classes.
+C</$length[2345]/>, for instance, will be interpreted as C<$length>
+followed by the character class C<[2345]>. If an array subscript is what
+you want, you can avoid the warning by changing C</${length[2345]}/>
+to the unsightly C</${\$length[2345]}/>, by renaming your array to
+something that does not coincide with a built-in keyword, or by
+simply turning off warnings with C<no warnings 'ambiguous';>.
 
 =item Ambiguous use of -%s resolved as -&%s()
 
 (W ambiguous) You wrote something like C<-foo>, which might be the
-string C<"-foo"> (outside of C<use strict 'subs'>), or a call to the
-function C<foo>, negated.  If you meant the string, just write
-C<"-foo">, and please use strict.  If you meant the function call,
+string C<"-foo">, or a call to the function C<foo>, negated.  If you meant
+the string, just write C<"-foo">.  If you meant the function call,
 write C<-foo()>.
 
 =item '|' and '<' may not both be specified on command line
@@ -242,8 +252,8 @@ know which context to supply to the right side.
 
 (W threads)(S) When using threaded Perl, a thread (not necessarily the main
 thread) exited while there were still other threads running.
-Usually it's a good idea to first collect the return values of the
-created threads by joining them, and only then exit from the main
+Usually it's a good idea first to collect the return values of the
+created threads by joining them, and only then to exit from the main
 thread.  See L<threads>.
 
 =item Attempt to access disallowed key '%s' in a restricted hash
@@ -287,7 +297,7 @@ outside any of those arenas.
 
 =item Attempt to free nonexistent shared string
 
-(P internal) Perl maintains a reference counted internal table of
+(P internal) Perl maintains a reference-counted internal table of
 strings to optimize the storage and access of hash keys and other
 strings.  This indicates someone tried to decrement the reference count
 of a string that can no longer be found in the table.
@@ -353,17 +363,17 @@ dereference it first.  See L<perlfunc/substr>.
 
 =item Attribute "locked" is deprecated
 
-(D deprecated) You have used the attributes pragam to modify the "locked"
+(D deprecated) You have used the attributes pragma to modify the "locked"
 attribute on a code reference. The :locked attribute is obsolete, has had no
-effect since 5005 threads were removed, and will be removed in the next major
+effect since 5005 threads were removed, and will be removed in a future
 release of Perl 5.
 
 =item Attribute "unique" is deprecated
 
-(D deprecated) You have used the attributes pragam to modify the "unique"
+(D deprecated) You have used the attributes pragma to modify the "unique"
 attribute on an array, hash or scalar reference. The :unique attribute has
-had no effect since Perl 5.8.8, and will be removed in the next major
-release of Perl 5.
+had no effect since Perl 5.8.8, and will be removed in a future release
+of Perl 5.
 
 =item Bad arg length for %s, is %u, should be %d
 
@@ -427,7 +437,7 @@ plugin API.
 
 (S malloc) An internal routine called realloc() on something that had
 never been malloc()ed in the first place. Mandatory, but can be disabled
-by setting environment variable C<PERL_BADFREE> to 1.
+by setting the environment variable C<PERL_BADFREE> to 1.
 
 =item Bad symbol for array
 
@@ -514,7 +524,15 @@ check the return value of your socket() call?  See L<perlfunc/bind>.
 =item binmode() on closed filehandle %s
 
 (W unopened) You tried binmode() on a filehandle that was never opened.
-Check you control flow and number of arguments.
+Check your control flow and number of arguments.
+
+=item "\b{" is deprecated; use "\b\{" instead
+
+=item "\B{" is deprecated; use "\B\{" instead
+
+(W deprecated, regexp) 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.
 
 =item Bit vector size > 32 non-portable
 
@@ -523,7 +541,7 @@ Check you control flow and number of arguments.
 =item Bizarre copy of %s in %s
 
 (P) Perl detected an attempt to copy an internal value that is not
-copyable.
+copiable.
 
 =item Buffer overflow in prime_env_iter: %s
 
@@ -569,7 +587,7 @@ from that type of reference to a typeglob.
 =item Cannot copy to %s in %s
 
 (P) Perl detected an attempt to copy a value to an internal type that cannot
-be directly assigned not.
+be directly assigned to.
 
 =item Cannot find encoding "%s"
 
@@ -596,12 +614,6 @@ a C<given> block. You probably meant to use C<next> or C<last>.
 
 (F) You called C<break>, but you're not inside a C<given> block.
 
-=item Can't call method "%s" in empty package "%s"
-
-(F) You called a method correctly, and it correctly indicated a package
-functioning as a class, but that package doesn't have ANYTHING defined
-in it, let alone methods.  See L<perlobj>.
-
 =item Can't call method "%s" on an undefined value
 
 (F) You used the syntax of a method call, but the slot filled by the
@@ -640,13 +652,7 @@ that you can chdir to, possibly because it doesn't exist.
 (P) For some reason you can't check the filesystem of the script for
 nosuid.
 
-=item Can't coerce array into hash
-
-(F) You used an array where a hash was expected, but the array has no
-information on how to map from keys to array indices.  You can do that
-only with arrays that have a hash reference at index 0.
-
-=item Can't coerce %s to integer in %s
+=item Can't coerce %s to %s in %s
 
 (F) Certain types of SVs, in particular real symbol table entries
 (typeglobs), can't be forced to stop being what they are.  So you can't
@@ -661,16 +667,6 @@ You CAN say
 
 but then $foo no longer contains a glob.
 
-=item Can't coerce %s to number in %s
-
-(F) Certain types of SVs, in particular real symbol table entries
-(typeglobs), can't be forced to stop being what they are.
-
-=item Can't coerce %s to string in %s
-
-(F) Certain types of SVs, in particular real symbol table entries
-(typeglobs), can't be forced to stop being what they are.
-
 =item Can't "continue" outside a when block
 
 (F) You called C<continue>, but you're not inside a C<when>
@@ -681,12 +677,6 @@ or C<default> block.
 (P) An error peculiar to VMS.  The process is suffering from exhausted
 quotas or other plumbing problems.
 
-=item Can't declare class for non-scalar %s in "%s"
-
-(F) Currently, only scalar variables can be declared with a specific
-class qualifier in a "my", "our" or "state" declaration.  The semantics may be
-extended for other types of variables in future.
-
 =item Can't declare %s in "%s"
 
 (F) Only scalar, array, and hash variables may be declared as "my", "our" or
@@ -801,14 +791,14 @@ editor will have a way to help you find these characters.
 
 =item Can't find Unicode property definition "%s"
 
-(F) You may have tried to use C<\p> which means a Unicode property (for
-example C<\p{Lu}> matches all uppercase letters).  If you did mean to use a
-Unicode property, see
+(F) You may have tried to use C<\p> which means a Unicode
+property (for example C<\p{Lu}> matches all uppercase
+letters). If you did mean to use a Unicode property, see
 L<perluniprops/Properties accessible through \p{} and \P{}>
-for a complete list of available properties.
-If you didn't mean to use a Unicode property, escape the C<\p>, either
-by C<\\p> (just the C<\p>) or by C<\Q\p> (the rest of the string, until
-possible C<\E>).
+for a complete list of available properties. If you didn't
+mean to use a Unicode property, escape the C<\p>, either by C<\\p>
+(just the C<\p>) or by C<\Q\p> (the rest of the string, or
+until C<\E>).
 
 =item Can't fork: %s
 
@@ -828,12 +818,12 @@ Under VMS, access checks are done by filename, rather than by bits in
 the stat buffer, so that ACLs and other protections can be taken into
 account.  Unfortunately, Perl assumes that the stat buffer contains all
 the necessary information, and passes it, instead of the filespec, to
-the access checking routine.  It will try to retrieve the filespec using
+the access-checking routine.  It will try to retrieve the filespec using
 the device name and FID present in the stat buffer, but this works only
 if you haven't made a subsequent call to the CRTL stat() routine,
 because the device name is overwritten with each call.  If this warning
-appears, the name lookup failed, and the access checking routine gave up
-and returned FALSE, just to be conservative.  (Note: The access checking
+appears, the name lookup failed, and the access-checking routine gave up
+and returned FALSE, just to be conservative.  (Note: The access-checking
 routine knows about the Perl C<stat> operator and file tests, so you
 shouldn't ever see this warning in response to a Perl command; it arises
 only if some internal code takes stat buffers lightly.)
@@ -989,7 +979,7 @@ a NULL.
 =item Can't modify non-lvalue subroutine call
 
 (F) Subroutines meant to be used in lvalue context should be declared as
-such, see L<perlsub/"Lvalue subroutines">.
+such.  See L<perlsub/"Lvalue subroutines">.
 
 =item Can't msgrcv to read-only var
 
@@ -1016,7 +1006,7 @@ the command line.
 =item Can't open a reference
 
 (W io) You tried to open a scalar reference for reading or writing,
-using the 3-arg open() syntax :
+using the 3-arg open() syntax:
 
     open FH, '>', $ref;
 
@@ -1099,7 +1089,7 @@ to reopen it to accept binary data.  Alas, it failed.
 
 (F|P) Error resolving overloading specified by a method name (as opposed
 to a subroutine reference): no such method callable via the package. If
-method name is C<???>, this is an internal error.
+the method name is C<???>, this is an internal error.
 
 =item Can't return %s from lvalue subroutine
 
@@ -1144,11 +1134,6 @@ with Perl, though, if you really want to do that.
 however, redefine it while it's running, and you can even undef the
 redefined subroutine while the old routine is running.  Go figure.
 
-=item Can't unshift
-
-(F) You tried to unshift an "unreal" array that can't be unshifted, such
-as the main Perl stack.
-
 =item Can't upgrade %s (%d) to %d
 
 (P) The internal sv_upgrade routine adds "members" to an SV, making it
@@ -1258,7 +1243,12 @@ Perhaps you need to copy the value to a temporary, and repeat that.
 
 =item Character following "\c" must be ASCII
 
-(F) In C<\cI<X>>, I<X> must be an ASCII character.
+(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.16.  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.
 
 =item Character in 'C' format wrapped in pack
 
@@ -1338,6 +1328,21 @@ uses the character values modulus 256 instead, as if you had provided:
 
    unpack("s", "\x{f3}b")
 
+=item "\c{" is deprecated and is more clearly written as ";"
+
+(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.16.  Just use a
+semi-colon or a backslash-semi-colon without the "\c".
+
+=item "\c%c" is more clearly written simply as "%s"
+
+(W syntax) The C<\cI<X>> construct is intended to be a way to specify
+non-printable characters.  You used it for a printable one, which is better
+written as simply itself, perhaps preceded by a backslash for non-word
+characters.
+
 =item close() on unopened filehandle %s
 
 (W unopened) You tried to close a filehandle that was never opened.
@@ -1358,6 +1363,30 @@ This subroutine cannot be called.
 (F) You had a (sub-)template that ends with a '/'. There must be another
 template code following the slash. See L<perlfunc/pack>.
 
+=item Code point 0x%X is not Unicode, may not be portable
+
+=item Code point 0x%X is not Unicode, no properties match it; all inverse properties do
+
+(W utf8) You had a code point above the Unicode maximum of U+10FFFF.
+
+Perl allows strings to contain a superset of Unicode code
+points, up to the limit of what is storable in an unsigned integer on
+your system, but these may not be accepted by other languages/systems.
+At one time, it was legal in some standards to have code points up to
+0x7FFF_FFFF, but not higher.  Code points above 0xFFFF_FFFF require
+larger than a 32 bit word.
+
+None of the Unicode or Perl-defined properties will match a non-Unicode
+code point.  For example,
+
+    chr(0x7FF_FFFF) =~ /\p{Any}/
+
+will not match, because the code point is not in Unicode.  But
+
+    chr(0x7FF_FFFF) =~ /\P{Any}/
+
+will match.
+
 =item %s: Command not found
 
 (A) You've accidentally run your script through B<csh> instead of Perl.
@@ -1385,10 +1414,10 @@ on I<Mastering Regular Expressions>.)
 
 (W threads) Within a thread-enabled program, you tried to call
 cond_broadcast() on a variable which wasn't locked. The cond_broadcast()
-function  is used to wake up another thread that is waiting in a
+function is used to wake up another thread that is waiting in a
 cond_wait(). To ensure that the signal isn't sent before the other thread
-has a chance to enter the wait, it is usual for the signaling thread to
-first wait for a lock on variable. This lock attempt will only succeed
+has a chance to enter the wait, it is usual for the signaling thread
+first to wait for a lock on variable. This lock attempt will only succeed
 after the other thread has entered cond_wait() and thus relinquished the
 lock.
 
@@ -1396,10 +1425,10 @@ lock.
 
 (W threads) Within a thread-enabled program, you tried to call
 cond_signal() on a variable which wasn't locked. The cond_signal()
-function  is used to wake up another thread that is waiting in a
+function is used to wake up another thread that is waiting in a
 cond_wait(). To ensure that the signal isn't sent before the other thread
-has a chance to enter the wait, it is usual for the signaling thread to
-first wait for a lock on variable. This lock attempt will only succeed
+has a chance to enter the wait, it is usual for the signaling thread
+first to wait for a lock on variable. This lock attempt will only succeed
 after the other thread has entered cond_wait() and thus relinquished the
 lock.
 
@@ -1474,13 +1503,6 @@ valid magic number.
 you have also specified an explicit size for the string.  See
 L<perlfunc/pack>.
 
-=item "\c%c" more clearly written simply as "%s"
-
-(D deprecated) The C<\cI<X>> construct is intended to be a way to specify
-non-printable characters.  You used it for a printable one, which is better
-written as simply itself, perhaps preceded by a backslash for non-word
-characters.  This message may not remain as Deprecated beyond 5.13.
-
 =item Deep recursion on subroutine "%s"
 
 (W recursion) This subroutine has called itself (directly or indirectly)
@@ -1517,10 +1539,10 @@ that triggers this error.
 =item Deprecated character in \N{...}; marked by <-- HERE  in \N{%s<-- HERE %s
 
 (D deprecated) Just about anything is legal for the C<...> in C<\N{...}>.
-But starting in 5.12, non-reasonable ones that don't look like names are
-deprecated.  A reasonable name begins with an alphabetic character and
-continues with any combination of alphanumerics, dashes, spaces, parentheses or
-colons.
+But starting in 5.12, non-reasonable ones that don't look like names
+are deprecated.  A reasonable name begins with an alphabetic character
+and continues with any combination of alphanumerics, dashes, spaces,
+parentheses or colons.
 
 =item Deprecated use of my() in false conditional
 
@@ -1580,7 +1602,7 @@ carried away.
 =item Died
 
 (F) You passed die() an empty string (the equivalent of C<die "">) or
-you called it with no args and both C<$@> and C<$_> were empty.
+you called it with no args and C<$@> was empty.
 
 =item Document contains no data
 
@@ -1676,10 +1698,11 @@ is unsafe.  See L<perlre/(?{ code })>, and L<perlsec>.
 
 (F) Perl tried to compile a regular expression containing the
 C<(?{ ... })> zero-width assertion at run time, as it would when the
-pattern contains interpolated values.  Since that is a security risk, it
-is not allowed.  If you insist, you may still do this by explicitly
-building the pattern from an interpolated string at run time and using
-that in an eval().  See L<perlre/(?{ code })>.
+pattern contains interpolated values.  Since that is a security risk,
+it is not allowed.  If you insist, you may still do this by using the
+C<re 'eval'> pragma or by explicitly building the pattern from an
+interpolated string at run time and using that in an eval().  See
+L<perlre/(?{ code })>.
 
 =item %s: Eval-group not allowed, use re 'eval'
 
@@ -1704,7 +1727,8 @@ variable and glob that.
 
 =item exec? I'm not *that* kind of operating system
 
-(F) The C<exec> function is not implemented in MacPerl. See L<perlport>.
+(F) The C<exec> function is not implemented on some systems, e.g., Symbian
+OS. See L<perlport>.
 
 =item Execution of %s aborted due to compilation errors.
 
@@ -1784,7 +1808,7 @@ is not possible.
 (W pack) Each line in an uuencoded string start with a length indicator
 which can't encode values above 63. So there is no point in asking for
 a line length bigger than that. Perl will behave as if you specified
-C<u63> as format.
+C<u63> as the format.
 
 =item Filehandle %s opened only for input
 
@@ -1797,10 +1821,10 @@ write the file, use ">" or ">>".  See L<perlfunc/open>.
 
 (W io) You tried to read from a filehandle opened only for writing, If
 you intended it to be a read/write filehandle, you needed to open it
-with "+<" or "+>" or "+>>" instead of with "<" or nothing.  If you
-intended only to read from the file, use "<".  See L<perlfunc/open>.
-Another possibility is that you attempted to open filedescriptor 0
-(also known as STDIN) for output (maybe you closed STDIN earlier?).
+with "+<" or "+>" or "+>>" instead of with ">".  If you intended only to
+read from the file, use "<".  See L<perlfunc/open>.  Another possibility
+is that you attempted to open filedescriptor 0 (also known as STDIN) for
+output (maybe you closed STDIN earlier?).
 
 =item Filehandle %s reopened as %s only for input
 
@@ -1940,9 +1964,8 @@ unspecified destination.  See L<perlfunc/goto>.
 
 =item ()-group starts with a count
 
-(F) A ()-group started with a count.  A count is
-supposed to follow something: a template character or a ()-group.
- See L<perlfunc/pack>.
+(F) A ()-group started with a count.  A count is supposed to follow
+something: a template character or a ()-group.  See L<perlfunc/pack>.
 
 =item %s had compilation errors.
 
@@ -1974,8 +1997,8 @@ without an intervening space.  For example, the two constructs:
  $a =~ m/$foo/sand $bar
  $a =~ m/$foo/s and $bar
 
-both currently mean the same thing, but it is planned to disallow the first form
-in Perl 5.16.  And,
+both currently mean the same thing, but it is planned to disallow the first
+form in Perl 5.16.  And,
 
  $a =~ m/$foo/and $bar
 
@@ -2022,7 +2045,7 @@ to your Perl administrator.
 =item Illegal character in prototype for %s : %s
 
 (W illegalproto) An illegal character was found in a prototype declaration.
-Legal characters in prototypes are $, @, %, *, ;, [, ], &, and \.
+Legal characters in prototypes are $, @, %, *, ;, [, ], &, \, and +.
 
 =item Illegal declaration of anonymous subroutine
 
@@ -2146,6 +2169,12 @@ C<$ENV{ENV}>, C<$ENV{BASH_ENV}> or C<$ENV{TERM}> are derived from data
 supplied (or potentially supplied) by the user.  The script must set
 the path to a known value, using trustworthy data.  See L<perlsec>.
 
+=item Integer overflow in format string for %s
+
+(F) The indexes and widths specified in the format string of C<printf()>
+or C<sprintf()> are too large.  The numbers must not overflow the size of
+integers for your architecture.
+
 =item Integer overflow in %s number
 
 (W overflow) The hexadecimal, octal or binary number you have specified
@@ -2158,12 +2187,6 @@ transparently promotes all numbers to a floating point representation
 internally--subject to loss of precision errors in subsequent
 operations.
 
-=item Integer overflow in format string for %s
-
-(F) The indexes and widths specified in the format string of C<printf()>
-or C<sprintf()> are too large.  The numbers must not overflow the size of
-integers for your architecture.
-
 =item Integer overflow in version
 
 (F) Some portion of a version initialization is too large for the
@@ -3181,6 +3204,32 @@ handler was defined.  While some handlers can be autogenerated in terms
 of other handlers, there is no default handler for any operation, unless
 C<fallback> overloading key is specified to be true.  See L<overload>.
 
+=item Operation "%s" returns its argument for UTF-16 surrogate U+%X
+
+(W) You performed an operation requiring Unicode semantics on a Unicode
+surrogate.  Unicode frowns upon the use of surrogates for anything but
+storing strings in UTF-16, but semantics are (reluctantly) defined for
+the surrogates, and they are to do nothing for this operation.  Because
+the use of surrogates can be dangerous, Perl warns.
+
+If the operation shown is "ToFold", it means that case-insensitive
+matching in a regular expression was done on the code point.
+
+If you know what you are doing you can turn off this warning by
+C<no warnings 'utf8';>.
+
+=item Operation "%s" returns its argument for non-Unicode code point 0x%X
+
+(W) You performed an operation requiring Unicode semantics on a code
+point that is not in Unicode, so what it should do is not defined.  Perl
+has chosen to have it do nothing, and warn you.
+
+If the operation shown is "ToFold", it means that case-insensitive
+matching in a regular expression was done on the code point.
+
+If you know what you are doing you can turn off this warning by
+C<no warnings 'utf8';>.
+
 =item Operator or semicolon missing before %s
 
 (S ambiguous) You used a variable or subroutine call where the parser
@@ -3277,6 +3326,30 @@ package-specific handler.  That name might have a meaning to Perl itself
 some day, even though it doesn't yet.  Perhaps you should use a
 mixed-case attribute name, instead.  See L<attributes>.
 
+=item \p{} uses Unicode rules, not locale rules
+
+(W) You compiled a regular expression that contained a Unicode property
+match (C<\p> or C<\P>), but the regular expression is also being told to
+use the run-time locale, not Unicode.  Instead, use a POSIX character
+class, which should know about the locale's rules.
+(See L<perlrecharclass/POSIX Character Classes>.)
+
+Even if the run-time locale is ISO 8859-1 (Latin1), which is a subset of
+Unicode, some properties will give results that are not valid for that
+subset.
+
+Here are a couple of examples to help you see what's going on.  If the
+locale is ISO 8859-7, the character at code point 0xD7 is the "GREEK
+CAPITAL LETTER CHI".  But in Unicode that code point means the
+"MULTIPLICATION SIGN" instead, and C<\p> always uses the Unicode
+meaning.  That means that C<\p{Alpha}> won't match, but C<[[:alpha:]]>
+should.  Only in the Latin1 locale are all the characters in the same
+positions as they are in Unicode.  But, even here, some properties give
+incorrect results.  An example is C<\p{Changes_When_Uppercased}> which
+is true for "LATIN SMALL LETTER Y WITH DIAERESIS", but since the upper
+case of that character is not in Latin1, in that locale it doesn't
+change when upper cased.
+
 =item pack/unpack repeat count overflow
 
 (F) You can't specify a repeat count so large that it overflows your
@@ -3352,9 +3425,16 @@ failure was caught.
 (P) We popped the context stack to a context with the specified label,
 and then discovered it wasn't a context we know how to do a goto in.
 
+=item panic: gp_free failed to free glob pointer
+
+(P) The internal routine used to clear a typeglob's entries tried
+repeatedly, but each time something re-created entries in the glob. Most
+likely the glob contains an object with a reference back to the glob and a
+destructor that adds a new object to the glob.
+
 =item panic: hfreeentries failed to free hash
 
-(P) The internal routine used to clear a hashes entries tried repeatedly,
+(P) The internal routine used to clear a hash's entries tried repeatedly,
 but each time something added more entries to the hash. Most likely the hash
 contains an object with a reference back to the hash and a destructor that
 adds a new object to the hash.
@@ -4076,7 +4156,7 @@ for Perl to properly detect the end of the clause. The <-- HERE shows in
 the regular expression about where the problem was discovered. See
 L<perlre>.
 
-=item 500 Server error
+=item "500 Server error"
 
 See Server error.
 
@@ -4617,15 +4697,12 @@ 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 Unicode non-character 0x%x is illegal for interchange
+=item Unicode non-character U+%X is illegal for open interchange
 
 (W utf8) Certain codepoints, such as U+FFFE and U+FFFF, are defined by the
 Unicode standard to be non-characters. Those are legal codepoints, but are
 reserved for internal use; so, applications shouldn't attempt to exchange
-them.  In some cases, this message is also given if you use a codepoint that
-isn't in Unicode--that is it is above the legal maximum of U+10FFFF.  These
-aren't legal at all in Unicode, so they are illegal for interchange, but can be
-used internally in a Perl program.  If you know what you are doing you can turn
+them.  If you know what you are doing you can turn
 off this warning by C<no warnings 'utf8';>.
 
 =item Unknown BYTEORDER
@@ -4745,10 +4822,10 @@ escape was discovered.
 recognized by Perl.  The character was understood literally, but this may
 change in a future version of Perl.
 
-=item Unrecognized escape \%c passed through in regex; marked by <-- HERE in m/%s/
+=item Unrecognized escape \%s passed through in regex; marked by <-- HERE in m/%s/
 
 (W regexp) You used a backslash-character combination which is not
-recognized by Perl.  The character was understood literally, but this may
+recognized by Perl.  The character(s) were understood literally, but this may
 change in a future version of Perl.
 The <-- HERE shows in the regular expression about where the
 escape was discovered.
@@ -5193,15 +5270,18 @@ exceeded.  In the message, the characters in the sequence are separated by
 dots, and each is shown by its ordinal in hex.  Anything to the left of the
 C<HERE> was retained; anything to the right was discarded.
 
-=item UTF-16 surrogate 0x%x
+=item Unicode surrogate U+%X is illegal in UTF-8
 
-(W utf8) You tried to generate half of a UTF-16 surrogate by
-requesting a Unicode character between the code points 0xD800 and
-0xDFFF (inclusive).  That range is reserved exclusively for the use of
-UTF-16 encoding (by having two 16-bit UCS-2 characters); but Perl
-encodes its characters in UTF-8, so what you got is a very illegal
-character.  If you really really know what you are doing you can turn off
-this warning by C<no warnings 'utf8';>.
+=item UTF-16 surrogate U+%X
+
+(W utf8) You had a UTF-16 surrogate in a context where they are
+not considered acceptable.  These code points, between U+D800 and
+U+DFFF (inclusive), are used by Unicode only for UTF-16.  However, Perl
+internally allows all unsigned integer code points (up to the size limit
+available on your platform), including surrogates.  But these can cause
+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 'utf8';>.
 
 =item Value of %s can be "0"; test with defined()
 
@@ -5366,7 +5446,7 @@ of the codes @, /, U, u, w or a *-length. Redesign the template.
 (W closed) The filehandle you're writing to got itself closed sometime
 before now.  Check your control flow.
 
-=item %s "\x%s" does not map to Unicode
+=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