In perl.git, the branch rjbs/perldelta has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/6eb0c4c8c2cece49433998c7e45ba399ed751e3f?hp=765d5fa885eceedc23951770fd3f4ceba8d9cc48>

- Log -----------------------------------------------------------------
commit 6eb0c4c8c2cece49433998c7e45ba399ed751e3f
Author: Ricardo Signes <[email protected]>
Date:   Sun Apr 26 20:45:17 2015 -0400

    perldelta: sort changed warnings

M       Porting/perl5220delta.pod

commit 6cb7b6e40f9ad014864a1d07060cc8b85269b579
Author: Ricardo Signes <[email protected]>
Date:   Sun Apr 26 20:42:38 2015 -0400

    perldelta: sort new warnings

M       Porting/perl5220delta.pod

commit 0935830eae9b962c14f1f18258e8858b8c7b2afb
Author: Ricardo Signes <[email protected]>
Date:   Sun Apr 26 20:12:00 2015 -0400

    perldelta: sort new errors

M       Porting/perl5220delta.pod

commit af304e4ae3b3563add169b46e91b989830a0eccc
Author: Ricardo Signes <[email protected]>
Date:   Sun Apr 26 20:03:53 2015 -0400

    perldelta: minor fixes, XXX-removal, etc.

M       Porting/perl5220delta.pod
-----------------------------------------------------------------------

Summary of changes:
 Porting/perl5220delta.pod | 619 ++++++++++++++++++++--------------------------
 1 file changed, 270 insertions(+), 349 deletions(-)

diff --git a/Porting/perl5220delta.pod b/Porting/perl5220delta.pod
index db55f05..46b6b34 100644
--- a/Porting/perl5220delta.pod
+++ b/Porting/perl5220delta.pod
@@ -82,7 +82,7 @@ other unintentional behavior that backwards-compatibility 
issues prevent
 us from doing in normal regular expression compilations.  Because the
 behavior of this is subject to change in future Perl releases as we gain
 experience, using this pragma will raise a category
-C<experimental:re_strict> warning.
+C<experimental::re_strict> warning.
 See L<'strict' in re|re/'strict' mode>.
 
 =head2 C<qr/foo/x> now ignores any Unicode pattern white space
@@ -296,7 +296,6 @@ List slices return an empty list now only if the original 
list was empty
 (or if there are no indices).  Formerly, a list slice would return an empty
 list if all indices fell outside the original list.  [perl #114498]
 
-
 =head2 C<\N{}> with a sequence of multiple spaces is now a fatal error.
 
 This has been deprecated since v5.18.
@@ -1004,7 +1003,6 @@ Added a discussion of locale issues in XS code.
 
 =back
 
-
 =head1 Diagnostics
 
 The following additions or changes have been made to diagnostic output,
@@ -1019,15 +1017,6 @@ diagnostic messages, see L<perldiag>.
 
 =item *
 
-L<Invalid quantifier in {,} in regex; marked by <-- HERE in 
mE<sol>%sE<sol>|perldiag/"Invalid quantifier in {,} in regex; marked by <-- 
HERE in m/%s/">
-
-(F) The pattern looks like a {min,max} quantifier, but the min or max could not
-be parsed as a valid number - either it has leading zeroes, or it represents
-too big a number to cope with.  The S<<-- HERE> shows where in the regular
-expression the problem was discovered.  See L<perlre>.
-
-=item *
-
 L<Bad symbol for scalar|perldiag/"Bad symbol for scalar">
 
 (P) An internal request asked to add a scalar entry to something that
@@ -1035,82 +1024,6 @@ wasn't a symbol table entry.
 
 =item *
 
-L<:const is not permitted on named subroutines|perldiag/":const is not 
permitted on named subroutines">
-
-(F) The "const" attribute causes an anonymous subroutine to be run and
-its value captured at the time that it is cloned.  Names subroutines are
-not cloned like this, so the attribute does not make sense on them.
-
-=item *
-
-L<Cannot chr %f|perldiag/"Cannot chr %f">
-
-=item *
-
-L<Cannot compress %f in pack|perldiag/"Cannot compress %f in pack">
-
-=item *
-
-L<Cannot pack %f with '%c'|perldiag/"Cannot pack %f with '%c'">
-
-=item *
-
-L<Cannot print %f with '%c'|perldiag/"Cannot printf %f with '%c'">
-
-=item *
-
-L<Hexadecimal float: internal error|perldiag/"Hexadecimal float: internal 
error">
-
-(F) Something went horribly bad in hexadecimal float handling.
-
-=item *
-
-L<Hexadecimal float: unsupported long double format|perldiag/"Hexadecimal 
float: unsupported long double format">
-
-(F) You have configured Perl to use long doubles but
-the internals of the long double format are unknown,
-therefore the hexadecimal float output is impossible.
-
-=item *
-
-L<In '(?...)', the '(' and '?' must be adjacent in regex; marked by S<<-- 
HERE> in mE<sol>%sE<sol>|perldiag/"In '(?...)', the '(' and '?' must be 
adjacent in regex; marked by <-- HERE in m/%s/">
-
-(F) 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.
-
-=item *
-
-L<In '(*VERB...)', the '(' and '*' must be adjacent in regex; marked by S<<-- 
HERE> in mE<sol>%sE<sol>|perldiag/"In '(*VERB...)', the '(' and '*' must be 
adjacent in regex; marked by <-- HERE in m/%s ... [3 chars truncated]
-
-(F) 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.
-
-=item *
-
-L<charnames alias definitions may not contain a sequence of multiple 
spaces|perldiag/"charnames alias definitions may not contain a sequence of 
multiple spaces">
-
-(F) You defined a character name which had multiple space
-characters in a row.  Change them to single spaces.  Usually these
-names are defined in the C<:alias> import argument to C<use charnames>, but
-they could be defined by a translator installed into C<$^H{charnames}>.
-See L<charnames/CUSTOM ALIASES>.
-
-=item *
-
-L<charnames alias definitions may not contain trailing 
white-space|perldiag/"charnames alias definitions may not contain trailing 
white-space">
-
-(F) You defined a character name which ended in a space
-character.  Remove the trailing space(s).  Usually these names are
-defined in the C<:alias> import argument to C<use charnames>, but they
-could be defined by a translator installed into C<$^H{charnames}>.
-See L<charnames/CUSTOM ALIASES>.
-
-=item *
-
 L<Can't use a hash as a reference|perldiag/"Can't use a hash as a reference">
 
 (F) You tried to use a hash as a reference, as in
@@ -1159,122 +1072,127 @@ it's loaded, etc.
 
 =item *
 
-L<Illegal suidscript|perldiag/"Illegal suidscript">
+L<Cannot chr %f|perldiag/"Cannot chr %f">
 
-(F) The script run under suidperl was somehow illegal.
+=item *
 
-=back
+L<Cannot compress %f in pack|perldiag/"Cannot compress %f in pack">
 
-=head3 New Warnings
+=item *
 
-=over 4
+L<Cannot pack %f with '%c'|perldiag/"Cannot pack %f with '%c'">
 
 =item *
 
-L<'%s' is an unknown bound type in regex|perldiag/"'%s' is an unknown bound 
type in regex; marked by <-- HERE in m/%s/">
+L<Cannot print %f with '%c'|perldiag/"Cannot printf %f with '%c'">
 
-You used C<\b{...}> or C<\B{...}> and the C<...> is not known to
-Perl.  The current valid ones are given in
-L<perlrebackslash/\b{}, \b, \B{}, \B>.
+=item *
+
+L<charnames alias definitions may not contain a sequence of multiple 
spaces|perldiag/"charnames alias definitions may not contain a sequence of 
multiple spaces">
+
+(F) You defined a character name which had multiple space
+characters in a row.  Change them to single spaces.  Usually these
+names are defined in the C<:alias> import argument to C<use charnames>, but
+they could be defined by a translator installed into C<$^H{charnames}>.
+See L<charnames/CUSTOM ALIASES>.
 
 =item *
 
-L<Use of \b{} for non-UTF-8 locale is wrong.  Assuming a UTF-8 
locale|perldiag/"Use of \b{} for non-UTF-8 locale is wrong.  Assuming a UTF-8 
locale">
+L<charnames alias definitions may not contain trailing 
white-space|perldiag/"charnames alias definitions may not contain trailing 
white-space">
 
-You are matching a regular expression using locale rules,
-and a Unicode boundary is being matched, but the locale is not a Unicode
-one.  This doesn't make sense.  Perl will continue, assuming a Unicode
-(UTF-8) locale, but the results could well be wrong except if the locale
-happens to be ISO-8859-1 (Latin1) where this message is spurious and can
-be ignored.
+(F) You defined a character name which ended in a space
+character.  Remove the trailing space(s).  Usually these names are
+defined in the C<:alias> import argument to C<use charnames>, but they
+could be defined by a translator installed into C<$^H{charnames}>.
+See L<charnames/CUSTOM ALIASES>.
 
 =item *
 
-L<< Using E<sol>u for '%s' instead of E<sol>%s in regex; marked by E<lt>-- 
HERE in mE<sol>%sE<sol>|perldiag/"Using E<sol>u for '%s' instead of E<sol>%s in 
regex; marked by <-- HERE in mE<sol>%sE<sol> ... [4 chars truncated]
+L<:const is not permitted on named subroutines|perldiag/":const is not 
permitted on named subroutines">
 
-You used a Unicode boundary (C<\b{...}> or C<\B{...}>) in a
-portion of a regular expression where the character set modifiers C</a>
-or C</aa> are in effect.  These two modifiers indicate an ASCII
-interpretation, and this doesn't make sense for a Unicode definition.
-The generated regular expression will compile so that the boundary uses
-all of Unicode.  No other portion of the regular expression is affected.
+(F) The "const" attribute causes an anonymous subroutine to be run and
+its value captured at the time that it is cloned.  Names subroutines are
+not cloned like this, so the attribute does not make sense on them.
 
 =item *
 
-L<The bitwise feature is experimental|perldiag/"The bitwise feature is 
experimental">
+L<Hexadecimal float: internal error|perldiag/"Hexadecimal float: internal 
error">
 
-This warning is emitted if you use bitwise
-operators (C<& | ^ ~ &. |. ^. ~.>) with the "bitwise" feature enabled.
-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:
+(F) Something went horribly bad in hexadecimal float handling.
 
-    no warnings "experimental::bitwise";
-    use feature "bitwise";
-    $x |.= $y;
+=item *
+
+L<Hexadecimal float: unsupported long double format|perldiag/"Hexadecimal 
float: unsupported long double format">
+
+(F) You have configured Perl to use long doubles but
+the internals of the long double format are unknown,
+therefore the hexadecimal float output is impossible.
 
 =item *
 
-L<:const is experimental|perldiag/":const is experimental">
+L<Illegal suidscript|perldiag/"Illegal suidscript">
 
-(S experimental::const_attr) The "const" attribute is experimental.
-If you want to use the feature, disable the warning with C<no warnings
-'experimental::const_attr'>, but know that in doing so you are taking
-the risk that your code may break in a future Perl version.
+(F) The script run under suidperl was somehow illegal.
 
 =item *
 
-L<Non-finite repeat count does nothing|perldiag/"Non-finite repeat count does 
nothing">
+L<In '(?...)', the '(' and '?' must be adjacent in regex; marked by S<<-- 
HERE> in mE<sol>%sE<sol>|perldiag/"In '(?...)', the '(' and '?' must be 
adjacent in regex; marked by <-- HERE in m/%s/">
 
-(W numeric) You tried to execute the
-L<C<x>|perlop/Multiplicative Operators> repetition operator C<Inf> (or
-C<-Inf>) or C<NaN> times, which doesn't make sense.
+(F) 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.
 
 =item *
 
-L<Useless use of attribute "const"|perldiag/Useless use of attribute "const">
+L<In '(*VERB...)', the '(' and '*' must be adjacent in regex; marked by S<<-- 
HERE> in mE<sol>%sE<sol>|perldiag/"In '(*VERB...)', the '(' and '*' must be 
adjacent in regex; marked by <-- HERE in m/%s ... [3 chars truncated]
 
-(W misc) The "const" attribute has no effect except
-on anonymous closure prototypes.  You applied it to
-a subroutine via L<attributes.pm|attributes>.  This is only useful
-inside an attribute handler for an anonymous subroutine.
+(F) 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.
 
 =item *
 
-L<Unusual use of %s in void context|perldiag/"Unusual use of %s in void 
context">
+L<Invalid quantifier in {,} in regex; marked by <-- HERE in 
mE<sol>%sE<sol>|perldiag/"Invalid quantifier in {,} in regex; marked by <-- 
HERE in m/%s/">
+
+(F) The pattern looks like a {min,max} quantifier, but the min or max could not
+be parsed as a valid number - either it has leading zeroes, or it represents
+too big a number to cope with.  The S<<-- HERE> shows where in the regular
+expression the problem was discovered.  See L<perlre>.
 
-(W void_unusual) Similar to the "Useless use of %s in void context"
-warning, but only turned on by the top-level "pedantic" warning
-category, used for e.g. C<grep> in void context, which may indicate a
-bug, but could also just be someone using C<grep> for its side-effects
-as a loop.
+=back
 
-Enabled as part of "extra" warnings, not in the "all" category. See
-L<warnings> for details
+=head3 New Warnings
+
+=over 4
 
 =item *
 
-L<E<quot>use re 'strict'E<quot> is experimental|perldiag/"use re 'strict'" is 
experimental>
+L<'%s' is an unknown bound type in regex|perldiag/"'%s' is an unknown bound 
type in regex; marked by <-- HERE in m/%s/">
 
-(S experimental::re_strict) The things that are different when a regular
-expression pattern is compiled under C<'strict'> are subject to change
-in future Perl releases in incompatible ways.  This means that a pattern
-that compiles today may not in a future Perl release.  This warning is
-to alert you to that risk.
+You used C<\b{...}> or C<\B{...}> and the C<...> is not known to
+Perl.  The current valid ones are given in
+L<perlrebackslash/\b{}, \b, \B{}, \B>.
 
-L<Wide character (U+%X) in %s|perldiag/"Wide character (U+%X) in %s">
+=item *
 
-(W locale) While in a single-byte locale (I<i.e.>, a non-UTF-8
-one), a multi-byte character was encountered.   Perl considers this
-character to be the specified Unicode code point.  Combining non-UTF8
-locales and Unicode is dangerous.  Almost certainly some characters
-will have two different representations.  For example, in the ISO 8859-7
-(Greek) locale, the code point 0xC3 represents a Capital Gamma.  But so
-also does 0x393.  This will make string comparisons unreliable.
+L<"%s" is more clearly written simply as "%s" in regex; marked by E<lt>-- HERE 
in mE<sol>%sE<sol>|perldiag/"%s" is more clearly written simply as "%s" in 
regex; marked by <-- HERE in mE<sol>%sE<sol>>
 
-You likely need to figure out how this multi-byte character got mixed up
-with your single-byte locale (or perhaps you thought you had a UTF-8
-locale, but Perl disagrees).
+(W regexp) (only under C<S<use re 'strict'>> or within C<(?[...])>)
+
+You specified a character that has the given plainer way of writing it,
+and which is also portable to platforms running with different character
+sets.
+
+=item *
+
+L<Argument "%s" treated as 0 in increment (++)|perldiag/"Argument "%s" treated
+as 0 in increment (++)">
+
+(W numeric) The indicated string was fed as an argument to the C<++> operator
+which expects either a number or a string matching C</^[a-zA-Z]*[0-9]*\z/>.
+See L<perlop/Auto-increment and Auto-decrement> for details.
 
 =item *
 
@@ -1295,142 +1213,201 @@ the warning gets raised.
 
 =item *
 
-L<Ranges of ASCII printables should be some subset of "0-9", "A-Z", or "a-z" 
in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|perldiag/"Ranges of ASCII 
printables should be some subset of "0-9", " ... [64 chars truncated]
+L<Character in 'C' format overflow in pack|perldiag/"Character in 'C' format 
overflow in pack">
 
-(W regexp) (only under C<S<use re 'strict'>> or within C<(?[...])>)
+(W pack) You tried converting an infinity or not-a-number to an unsigned
+character, which makes no sense.  Perl behaved as if you tried to pack 0xFF.
 
-Stricter rules help to find typos and other errors.  Perhaps you didn't
-even intend a range here, if the C<"-"> was meant to be some other
-character, or should have been escaped (like C<"\-">).  If you did
-intend a range, the one that was used is not portable between ASCII and
-EBCDIC platforms, and doesn't have an obvious meaning to a casual
-reader.
+=item *
 
- [3-7]    # OK; Obvious and portable
- [d-g]    # OK; Obvious and portable
- [A-Y]    # OK; Obvious and portable
- [A-z]    # WRONG; Not portable; not clear what is meant
- [a-Z]    # WRONG; Not portable; not clear what is meant
- [%-.]    # WRONG; Not portable; not clear what is meant
- [\x41-Z] # WRONG; Not portable; not obvious to non-geek
+L<Character in 'c' format overflow in pack|perldiag/"Character in 'c' format 
overflow in pack">
 
-(You can force portability by specifying a Unicode range, which means that
-the endpoints are specified by
-L<C<\N{...}>|perlrecharclass/Character Ranges>, but the meaning may
-still not be obvious.)
-The stricter rules require that ranges that start or stop with an ASCII
-character that is not a control have all their endpoints be the literal
-character, and not some escape sequence (like C<"\x41">), and the ranges
-must be all digits, or all uppercase letters, or all lowercase letters.
+(W pack) You tried converting an infinity or not-a-number to a signed
+character, which makes no sense.  Perl behaved as if you tried to pack 0xFF.
 
 =item *
 
-L<Ranges of digits should be from the same group in regex; marked by E<lt>-- 
HERE in mE<sol>%sE<sol>|perldiag/"Ranges of digits should be from the same 
group in regex; marked by <-- HERE in m/%s/">
+L<:const is experimental|perldiag/":const is experimental">
 
-(W regexp) (only under C<S<use re 'strict'>> or within C<(?[...])>)
+(S experimental::const_attr) The "const" attribute is experimental.
+If you want to use the feature, disable the warning with C<no warnings
+'experimental::const_attr'>, but know that in doing so you are taking
+the risk that your code may break in a future Perl version.
 
-Stricter rules help to find typos and other errors.  You included a
-range, and at least one of the end points is a decimal digit.  Under the
-stricter rules, when this happens, both end points should be digits in
-the same group of 10 consecutive digits.
+=item *
+
+L<gmtime(%f) failed|perldiag/"gmtime(%f) failed">
+
+(W overflow) You called C<gmtime> with a number that it could not handle:
+too large, too small, or NaN.  The returned value is C<undef>.
 
 =item *
 
-L<"%s" is more clearly written simply as "%s" in regex; marked by E<lt>-- HERE 
in mE<sol>%sE<sol>|perldiag/"%s" is more clearly written simply as "%s" in 
regex; marked by <-- HERE in mE<sol>%sE<sol>>
+L<Hexadecimal float: exponent overflow|perldiag/"Hexadecimal float: exponent 
overflow">
 
-(W regexp) (only under C<S<use re 'strict'>> or within C<(?[...])>)
+(W overflow) The hexadecimal floating point has larger exponent
+than the floating point supports.
 
-You specified a character that has the given plainer way of writing it,
-and which is also portable to platforms running with different character
-sets.
+=item *
+
+L<Hexadecimal float: exponent underflow|perldiag/"Hexadecimal float: exponent 
underflow">
+
+(W overflow) The hexadecimal floating point has smaller exponent
+than the floating point supports.
 
 =item *
 
-L<Use of literal non-graphic characters in variable names is 
deprecated|perldiag/"Use of literal non-graphic characters in variable names is 
deprecated">
+L<Hexadecimal float: mantissa overflow|perldiag/"Hexadecimal float: mantissa 
overflow">
+
+(W overflow) The hexadecimal floating point literal had more bits in
+the mantissa (the part between the 0x and the exponent, also known as
+the fraction or the significand) than the floating point supports.
 
 =item *
 
-A new C<locale> warning category has been created, with the following warning
-messages currently in it:
+L<Hexadecimal float: precision loss|perldiag/"Hexadecimal float: precision 
loss">
 
-=over 4
+(W overflow) The hexadecimal floating point had internally more
+digits than could be output.  This can be caused by unsupported
+long double formats, or by 64-bit integers not being available
+(needed to retrieve the digits under some configurations).
+
+L<Invalid number (%f) in chr|perldiag/"Invalid number (%f) in chr">
+
+(W utf8) You passed an invalid number (like an infinity or not-a-number) to
+C<chr>.  Those are not valid character numbers, so it returned the Unicode
+replacement character (U+FFFD).
 
 =item *
 
-L<Locale '%s' may not work well.%s|perldiag/Locale '%s' may not work well.%s>
+L<localtime(%f) failed|perldiag/"localtime(%f) failed">
+
+(W overflow) You called C<localtime> with a number that it could not handle:
+too large, too small, or NaN.  The returned value is C<undef>.
 
 =item *
 
-L<Can't do %s("%s") on non-UTF-8 locale; resolved to "%s".|perldiag/Can't do 
%s("%s") on non-UTF-8 locale; resolved to "%s".>
+L<Negative repeat count does nothing|perldiag/"Negative repeat count does 
nothing">
 
-=back
+(W numeric) You tried to execute the
+L<C<x>|perlop/Multiplicative Operators> repetition operator fewer than 0
+times, which doesn't make sense.
 
 =item *
 
-L<Warning: unable to close filehandle %s properly: %s|perldiag/"Warning: 
unable to close filehandle %s properly: %s">
+L<NO-BREAK SPACE in a charnames alias definition is 
deprecated|perldiag/"NO-BREAK SPACE in a charnames alias definition is 
deprecated">
+
+(D deprecated) You defined a character name which contained a no-break
+space character.  Change it to a regular space.  Usually these names are
+defined in the C<:alias> import argument to C<use charnames>, but they
+could be defined by a translator installed into C<$^H{charnames}>.  See
+L<charnames/CUSTOM ALIASES>.
 
 =item *
 
-The following two warnings for C<tr///> used to be skipped if the
-transliteration contained wide characters, but now they occur regardless of
-whether there are wide characters or not:
+L<Non-finite repeat count does nothing|perldiag/"Non-finite repeat count does 
nothing">
+
+(W numeric) You tried to execute the
+L<C<x>|perlop/Multiplicative Operators> repetition operator C<Inf> (or
+C<-Inf>) or C<NaN> times, which doesn't make sense.
+
+=item *
 
-L<Useless use of E<sol>d modifier in transliteration 
operator|perldiag/"Useless use of /d modifier in transliteration operator">
+L<PerlIO layer ':win32' is experimental|perldiag/"PerlIO layer ':win32' is 
experimental">
 
-L<Replacement list is longer than search list|perldiag/Replacement list is 
longer than search list>
+(S experimental::win32_perlio) The C<:win32> PerlIO layer is
+experimental.  If you want to take the risk of using this layer,
+simply disable this warning:
+
+    no warnings "experimental::win32_perlio";
 
 =item *
 
-L<Character in 'C' format overflow in pack|perldiag/"Character in 'C' format 
overflow in pack">
+L<Ranges of ASCII printables should be some subset of "0-9", "A-Z", or "a-z" 
in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|perldiag/"Ranges of ASCII 
printables should be some subset of "0-9", " ... [64 chars truncated]
 
-(W pack) You tried converting an infinity or not-a-number to an unsigned
-character, which makes no sense.  Perl behaved as if you tried to pack 0xFF.
+(W regexp) (only under C<S<use re 'strict'>> or within C<(?[...])>)
 
-=item *
+Stricter rules help to find typos and other errors.  Perhaps you didn't
+even intend a range here, if the C<"-"> was meant to be some other
+character, or should have been escaped (like C<"\-">).  If you did
+intend a range, the one that was used is not portable between ASCII and
+EBCDIC platforms, and doesn't have an obvious meaning to a casual
+reader.
 
-L<Character in 'c' format overflow in pack|perldiag/"Character in 'c' format 
overflow in pack">
+ [3-7]    # OK; Obvious and portable
+ [d-g]    # OK; Obvious and portable
+ [A-Y]    # OK; Obvious and portable
+ [A-z]    # WRONG; Not portable; not clear what is meant
+ [a-Z]    # WRONG; Not portable; not clear what is meant
+ [%-.]    # WRONG; Not portable; not clear what is meant
+ [\x41-Z] # WRONG; Not portable; not obvious to non-geek
 
-(W pack) You tried converting an infinity or not-a-number to a signed
-character, which makes no sense.  Perl behaved as if you tried to pack 0xFF.
+(You can force portability by specifying a Unicode range, which means that
+the endpoints are specified by
+L<C<\N{...}>|perlrecharclass/Character Ranges>, but the meaning may
+still not be obvious.)
+The stricter rules require that ranges that start or stop with an ASCII
+character that is not a control have all their endpoints be the literal
+character, and not some escape sequence (like C<"\x41">), and the ranges
+must be all digits, or all uppercase letters, or all lowercase letters.
 
 =item *
 
-L<Invalid number (%f) in chr|perldiag/"Invalid number (%f) in chr">
+L<Ranges of digits should be from the same group in regex; marked by E<lt>-- 
HERE in mE<sol>%sE<sol>|perldiag/"Ranges of digits should be from the same 
group in regex; marked by <-- HERE in m/%s/">
 
-(W utf8) You passed an invalid number (like an infinity or not-a-number) to
-C<chr>.  Those are not valid character numbers, so it returned the Unicode
-replacement character (U+FFFD).
+(W regexp) (only under C<S<use re 'strict'>> or within C<(?[...])>)
+
+Stricter rules help to find typos and other errors.  You included a
+range, and at least one of the end points is a decimal digit.  Under the
+stricter rules, when this happens, both end points should be digits in
+the same group of 10 consecutive digits.
 
 =item *
 
-L<Hexadecimal float: exponent overflow|perldiag/"Hexadecimal float: exponent 
overflow">
+L<Redundant argument in %s|perldiag/Redundant argument in %s>
 
-(W overflow) The hexadecimal floating point has larger exponent
-than the floating point supports.
+(W redundant) You called a function with more arguments than other
+arguments you supplied indicated would be needed. Currently only
+emitted when a printf-type format required fewer arguments than were
+supplied, but might be used in the future for e.g. L<perlfunc/pack>.
+
+The warnings category C<< redundant >> is new. See also [RT #121025]
 
 =item *
 
-L<Hexadecimal float: exponent underflow|perldiag/"Hexadecimal float: exponent 
underflow">
+L<Use of \b{} for non-UTF-8 locale is wrong.  Assuming a UTF-8 
locale|perldiag/"Use of \b{} for non-UTF-8 locale is wrong.  Assuming a UTF-8 
locale">
 
-(W overflow) The hexadecimal floating point has smaller exponent
-than the floating point supports.
+You are matching a regular expression using locale rules,
+and a Unicode boundary is being matched, but the locale is not a Unicode
+one.  This doesn't make sense.  Perl will continue, assuming a Unicode
+(UTF-8) locale, but the results could well be wrong except if the locale
+happens to be ISO-8859-1 (Latin1) where this message is spurious and can
+be ignored.
 
 =item *
 
-L<Hexadecimal float: mantissa overflow|perldiag/"Hexadecimal float: mantissa 
overflow">
+L<< Using E<sol>u for '%s' instead of E<sol>%s in regex; marked by E<lt>-- 
HERE in mE<sol>%sE<sol>|perldiag/"Using E<sol>u for '%s' instead of E<sol>%s in 
regex; marked by <-- HERE in mE<sol>%sE<sol> ... [4 chars truncated]
 
-(W overflow) The hexadecimal floating point literal had more bits in
-the mantissa (the part between the 0x and the exponent, also known as
-the fraction or the significand) than the floating point supports.
+You used a Unicode boundary (C<\b{...}> or C<\B{...}>) in a
+portion of a regular expression where the character set modifiers C</a>
+or C</aa> are in effect.  These two modifiers indicate an ASCII
+interpretation, and this doesn't make sense for a Unicode definition.
+The generated regular expression will compile so that the boundary uses
+all of Unicode.  No other portion of the regular expression is affected.
 
 =item *
 
-L<Hexadecimal float: precision loss|perldiag/"Hexadecimal float: precision 
loss">
+L<The bitwise feature is experimental|perldiag/"The bitwise feature is 
experimental">
 
-(W overflow) The hexadecimal floating point had internally more
-digits than could be output.  This can be caused by unsupported
-long double formats, or by 64-bit integers not being available
-(needed to retrieve the digits under some configurations).
+This warning is emitted if you use bitwise
+operators (C<& | ^ ~ &. |. ^. ~.>) with the "bitwise" feature enabled.
+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::bitwise";
+    use feature "bitwise";
+    $x |.= $y;
 
 =item *
 
@@ -1447,86 +1424,73 @@ example,
 
 =item *
 
-L<NO-BREAK SPACE in a charnames alias definition is 
deprecated|perldiag/"NO-BREAK SPACE in a charnames alias definition is 
deprecated">
-
-(D deprecated) You defined a character name which contained a no-break
-space character.  Change it to a regular space.  Usually these names are
-defined in the C<:alias> import argument to C<use charnames>, but they
-could be defined by a translator installed into C<$^H{charnames}>.  See
-L<charnames/CUSTOM ALIASES>.
+L<Use of literal non-graphic characters in variable names is 
deprecated|perldiag/"Use of literal non-graphic characters in variable names is 
deprecated">
 
 =item *
 
-L<PerlIO layer ':win32' is experimental|perldiag/"PerlIO layer ':win32' is 
experimental">
-
-(S experimental::win32_perlio) The C<:win32> PerlIO layer is
-experimental.  If you want to take the risk of using this layer,
-simply disable this warning:
+L<Useless use of attribute "const"|perldiag/Useless use of attribute "const">
 
-    no warnings "experimental::win32_perlio";
+(W misc) The "const" attribute has no effect except
+on anonymous closure prototypes.  You applied it to
+a subroutine via L<attributes.pm|attributes>.  This is only useful
+inside an attribute handler for an anonymous subroutine.
 
 =item *
 
-L<Negative repeat count does nothing|perldiag/"Negative repeat count does 
nothing">
+L<E<quot>use re 'strict'E<quot> is experimental|perldiag/"use re 'strict'" is 
experimental>
 
-(W numeric) You tried to execute the
-L<C<x>|perlop/Multiplicative Operators> repetition operator fewer than 0
-times, which doesn't make sense.
+(S experimental::re_strict) The things that are different when a regular
+expression pattern is compiled under C<'strict'> are subject to change
+in future Perl releases in incompatible ways.  This means that a pattern
+that compiles today may not in a future Perl release.  This warning is
+to alert you to that risk.
 
 =item *
 
-L<localtime(%f) failed|perldiag/"localtime(%f) failed">
-
-(W overflow) You called C<localtime> with a number that it could not handle:
-too large, too small, or NaN.  The returned value is C<undef>.
+L<Warning: unable to close filehandle %s properly: %s|perldiag/"Warning: 
unable to close filehandle %s properly: %s">
 
 =item *
 
-L<gmtime(%f) failed|perldiag/"gmtime(%f) failed">
+L<Wide character (U+%X) in %s|perldiag/"Wide character (U+%X) in %s">
 
-(W overflow) You called C<gmtime> with a number that it could not handle:
-too large, too small, or NaN.  The returned value is C<undef>.
+(W locale) While in a single-byte locale (I<i.e.>, a non-UTF-8
+one), a multi-byte character was encountered.   Perl considers this
+character to be the specified Unicode code point.  Combining non-UTF8
+locales and Unicode is dangerous.  Almost certainly some characters
+will have two different representations.  For example, in the ISO 8859-7
+(Greek) locale, the code point 0xC3 represents a Capital Gamma.  But so
+also does 0x393.  This will make string comparisons unreliable.
+
+You likely need to figure out how this multi-byte character got mixed up
+with your single-byte locale (or perhaps you thought you had a UTF-8
+locale, but Perl disagrees).
 
 =item *
 
-L<PerlIO layer ':win32' is experimental|perldiag/"PerlIO layer ':win32' is 
experimental">:
+The following two warnings for C<tr///> used to be skipped if the
+transliteration contained wide characters, but now they occur regardless of
+whether there are wide characters or not:
 
-(S experimental::win32_perlio) The C<:win32> PerlIO layer is
-experimental.  If you want to take the risk of using this layer,
-simply disable this warning:
+L<Useless use of E<sol>d modifier in transliteration 
operator|perldiag/"Useless use of /d modifier in transliteration operator">
 
-    no warnings "experimental::win32_perlio";
+L<Replacement list is longer than search list|perldiag/Replacement list is 
longer than search list>
 
 =item *
 
-L<Negative repeat count does nothing|perldiag/"Negative repeat count does 
nothing">
-
-(W numeric)  This warns when the repeat count of the
-L<C<x>|perlop/Multiplicative Operators> repetition operator is
-negative.
+A new C<locale> warning category has been created, with the following warning
+messages currently in it:
 
-This warning may be changed or removed if it turn out that it was
-unwise to have added it.
+=over 4
 
 =item *
 
-L<Argument "%s" treated as 0 in increment (++)|perldiag/"Argument "%s" treated
-as 0 in increment (++)">
-
-(W numeric) The indicated string was fed as an argument to the C<++> operator
-which expects either a number or a string matching C</^[a-zA-Z]*[0-9]*\z/>.
-See L<perlop/Auto-increment and Auto-decrement> for details.
+L<Locale '%s' may not work well.%s|perldiag/Locale '%s' may not work well.%s>
 
 =item *
 
-L<Redundant argument in %s|perldiag/Redundant argument in %s>
-
-(W redundant) You called a function with more arguments than other
-arguments you supplied indicated would be needed. Currently only
-emitted when a printf-type format required fewer arguments than were
-supplied, but might be used in the future for e.g. L<perlfunc/pack>.
+L<Can't do %s("%s") on non-UTF-8 locale; resolved to "%s".|perldiag/Can't do 
%s("%s") on non-UTF-8 locale; resolved to "%s".>
 
-The warnings category C<< redundant >> is new. See also [RT #121025]
+=back
 
 =back
 
@@ -1536,8 +1500,11 @@ The warnings category C<< redundant >> is new. See also 
[RT #121025]
 
 =item *
 
-B<Unusual use of %s in void context> has been removed. It might
-come back in a future release.
+<> should be quotes
+
+This warning has been changed to
+L<< <> at require-statement should be quotes|perldiag/"<> at require-statement 
should be quotes" >>
+to make the issue more identifiable.
 
 =item *
 
@@ -1551,21 +1518,6 @@ now adds the following note:
 
 =item *
 
-B<Possible precedence problem on bitwise %c operator> reworded as
-L<Possible precedence problem on bitwise %s operator|perldiag/"Possible 
precedence problem on bitwise %s operator">.
-
-=item *
-
-'"my" variable &foo::bar can't be in a package' has been reworded to say
-'subroutine' instead of 'variable'.
-
-=item *
-
-"Variable %s will not stay shared" has been changed to say "Subroutine"
-when it is actually a lexical sub that will not stay shared.
-
-=item *
-
 L<Global symbol "%s" requires explicit package name|perldiag/"Global symbol 
"%s" requires explicit package name (did you forget to declare "my %s"?)">
 
 This message has had '(did you forget to declare "my %s"?)' appended to it, to
@@ -1574,6 +1526,11 @@ L<[perl 
#121638]|https://rt.perl.org/Ticket/Display.html?id=121638>
 
 =item *
 
+'"my" variable &foo::bar can't be in a package' has been reworded to say
+'subroutine' instead of 'variable'.
+
+=item *
+
 L<\N{} in character class restricted to one character in regex; marked by 
S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"\N{} in inverted character class or as 
a range end-point is restricted to one charac ... [46 chars truncated]
 
 This message has had 'character class' changed to 'inverted character class or
@@ -1589,22 +1546,13 @@ point number is.
 
 =item *
 
-C<require> with no argument or undef used to warn about a Null filename; now
-it dies with C<Missing or undefined argument to require>.
-
-=item *
-
-L<Variable length lookbehind not implemented in regex 
mE<sol>%sE<sol>|perldiag/"Variable length lookbehind not implemented in regex 
m/%s/">
-
-Information about Unicode behaviour has been added.
+B<Possible precedence problem on bitwise %c operator> reworded as
+L<Possible precedence problem on bitwise %s operator|perldiag/"Possible 
precedence problem on bitwise %s operator">.
 
 =item *
 
-<> should be quotes
-
-This warning has been changed to
-L<< <> at require-statement should be quotes|perldiag/"<> at require-statement 
should be quotes" >>
-to make the issue more identifiable.
+C<require> with no argument or undef used to warn about a Null filename; now
+it dies with C<Missing or undefined argument to require>.
 
 =item *
 
@@ -1615,24 +1563,14 @@ the filename.
 
 =item *
 
-L<Variable length lookbehind not implemented in regex 
mE<sol>%sE<sol>|perldiag/"Variable length lookbehind not implemented in regex 
m/%s/">
-
-Information about Unicode behaviour has been added.
-
-=item *
-
-<> should be quotes
-
-This warning has been changed to
-L<< <> at require-statement should be quotes|perldiag/"<> at require-statement 
should be quotes" >>
-to make the issue more identifiable.
+"Variable %s will not stay shared" has been changed to say "Subroutine"
+when it is actually a lexical sub that will not stay shared.
 
 =item *
 
-L<Unsuccessful %s on filename containing newline|perldiag/"Unsuccessful %s on 
filename containing newline">
+L<Variable length lookbehind not implemented in regex 
mE<sol>%sE<sol>|perldiag/"Variable length lookbehind not implemented in regex 
m/%s/">
 
-This warning is now only produced when the newline is at the end of
-the filename.
+Information about Unicode behaviour has been added.
 
 =back
 
@@ -1642,6 +1580,13 @@ the filename.
 
 =item *
 
+"Ambiguous use of -foo resolved as -&foo()"
+
+There is actually no ambiguity here, and this impedes the use of negated
+constants; e.g., C<-Inf>.
+
+=item *
+
 "Constant is not a FOO reference"
 
 Compile-time checking of constant dereferencing (e.g., C<< my_constant->() >>)
@@ -1649,13 +1594,6 @@ has been removed, since it was not taking overloading 
into account.
 L<[perl #69456]|https://rt.perl.org/Ticket/Display.html?id=69456>
 L<[perl #122607]|https://rt.perl.org/Ticket/Display.html?id=122607>
 
-=item *
-
-"Ambiguous use of -foo resolved as -&foo()"
-
-There is actually no ambiguity here, and this impedes the use of negated
-constants; e.g., C<-Inf>.
-
 =back
 
 =head1 Utility Changes
@@ -2039,7 +1977,6 @@ thus where the parent doesn't need to be updated 
accordingly.
 
 =back
 
-
 =item *
 
 Macros have been created to allow XS code to better manipulate the POSIX locale
@@ -2343,7 +2280,6 @@ UTF-8 variable names used in array indexes, unquoted 
UTF-8 HERE-document
 terminators and UTF-8 function names all now work correctly.
 L<[perl #124113]|https://rt.perl.org/Ticket/Display.html?id=124113>
 
-
 =item *
 
 Repeated global pattern matches in scalar context on large tainted strings were
@@ -3172,12 +3108,6 @@ argument, instead of the context the current sub was 
called in.
 
 =head1 Known Problems
 
-XXX Descriptions of platform agnostic bugs we know we can't fix go here.  Any
-tests that had to be C<TODO>ed for the release would be noted here.  Unfixed
-platform specific bugs also go here.
-
-[ List each fix as a =item entry ]
-
 =over 4
 
 =item *
@@ -3206,12 +3136,8 @@ C<pack>/C<unpack> with C<"U0"> format may not work 
properly.
 
 =back
 
-
 =item *
 
-XXX Check this list before the release of 5.22.0 for modules that have
-been fixed.
-
 The following modules are known to have test failures with this version of
 Perl.  Patches have been submitted, so there will hopefully be new releases
 soon:
@@ -3258,11 +3184,6 @@ L<Parse::Keyword> 0.08
 
 =back
 
-=head1 Obituary
-
-XXX If any significant core contributor has died, we've added a short obituary
-here.
-
 =head1 Acknowledgements
 
 XXX Generate this with:

--
Perl5 Master Repository

Reply via email to