diff options
author | Sawyer X <xsawyerx@cpan.org> | 2017-05-11 12:40:10 +0200 |
---|---|---|
committer | Sawyer X <xsawyerx@cpan.org> | 2017-05-11 12:42:01 +0200 |
commit | 2c8edc250e4a89982c8afe0e6a0789ce1d3b4f66 (patch) | |
tree | dde798431a9633989c72dba47b7881d219849cea | |
parent | 3e890f485f24167a822bd830877c4c826ce8316f (diff) | |
download | perl-2c8edc250e4a89982c8afe0e6a0789ce1d3b4f66.tar.gz |
For now it's just perldelta.pod
-rw-r--r-- | pod/perl5260delta.pod | 2588 | ||||
-rw-r--r-- | pod/perldelta.pod | 2486 |
2 files changed, 2332 insertions, 2742 deletions
diff --git a/pod/perl5260delta.pod b/pod/perl5260delta.pod deleted file mode 100644 index 9a5deafa0d..0000000000 --- a/pod/perl5260delta.pod +++ /dev/null @@ -1,2588 +0,0 @@ -=encoding utf8 - -=head1 NAME - -perl5260delta - what is new for perl v5.26.0 - -=head1 DESCRIPTION - -This document describes the differences between the 5.24.0 release and the -5.26.0 release. - -=head1 Core Enhancements - -=head2 New regular expression modifier C</xx> - -Specifying two C<x> characters to modify a regular expression pattern -does everything that a single one does, but additionally TAB and SPACE -characters within a bracketed character class are generally ignored and -can be added to improve readability, like -S<C</[ ^ A-Z d-f p-x ]/xx>>. Details are at -L<perlre/E<sol>x and E<sol>xx>. - -=head2 New Hash Function For 64-bit Builds - -We have switched to a hybrid hash function to better balance -performance for short and long keys. - -For short keys, 16 bytes and under, we use an optimised variant of -One At A Time Hard, and for longer keys we use Siphash 1-3. For very -long keys this is a big improvement in performance. For shorter keys -there is a modest improvement. - -=head2 Indented Here-documents - -This adds a new modifier '~' to here-docs that tells the parser -that it should look for /^\s*$DELIM\n/ as the closing delimiter. - -These syntaxes are all supported: - - <<~EOF; - <<~\EOF; - <<~'EOF'; - <<~"EOF"; - <<~`EOF`; - <<~ 'EOF'; - <<~ "EOF"; - <<~ `EOF`; - -The '~' modifier will strip, from each line in the here-doc, the -same whitespace that appears before the delimiter. - -Newlines will be copied as is, and lines that don't include the -proper beginning whitespace will cause perl to croak. - -For example: - - if (1) { - print <<~EOF; - Hello there - EOF - } - -prints "Hello there\n" with no leading whitespace. - -=head2 '.' and @INC - -Perl now provides a way to build perl without C<.> in @INC by default. If you -want this feature, you can build with -Ddefault_inc_excludes_dot - -Because the testing / make process for perl modules do not function well with -C<.> missing from @INC, Perl now supports the environment variable -PERL_USE_UNSAFE_INC=1 which makes Perl behave as it previously did, returning -C<.> to @INC in all child processes. - -WARNING: C<PERL_USE_UNSAFE_INC> has been provided during the perl 5.25 -development cycle and is not guaranteed to function in perl 5.26. - -=head2 create a safer utf8_hop() called utf8_hop_safe() - -Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or after -the end of the supplied buffer. - -=head2 @{^CAPTURE}, %{^CAPTURE}, and %{^CAPTURE_ALL} - -C<@{^CAPTURE}> exposes the capture buffers of the last match as an -array. So C<$1> is C<${^CAPTURE}[0]>. - -C<%{^CAPTURE}> is the equivalent to C<%+> (ie named captures) - -C<%{^CAPTURE_ALL}> is the equivalent to C<%-> (ie all named captures). - -=head2 Unicode 9.0 is now supported - -A list of changes is at L<http://www.unicode.org/versions/Unicode9.0.0/>. -Modules that are shipped with core Perl but not maintained by p5p do not -necessarily support Unicode 9.0. L<Unicode::Normalize> does work on 9.0. - -=head2 Use of C<\p{I<script>}> uses the improved Script_Extensions property - -Unicode 6.0 introduced an improved form of the Script (C<sc>) property, and -called it Script_Extensions (C<scx>). As of now, Perl uses this improved -version when a property is specified as just C<\p{I<script>}>. The meaning of -compound forms, like C<\p{sc=I<script>}> are unchanged. This should make -programs be more accurate when determining if a character is used in a given -script, but there is a slight chance of breakage for programs that very -specifically needed the old behavior. See L<perlunicode/Scripts>. - -=head2 Declaring a reference to a variable - -As an experimental feature, Perl now allows the referencing operator to come -after L<C<my()>|perlfunc/my>, L<C<state()>|perlfunc/state>, -L<C<our()>|perlfunc/our>, or L<C<local()>|perlfunc/local>. This syntax must -be enabled with C<use feature 'declared_refs'>. It is experimental, and will -warn by default unless C<no warnings 'experimental::refaliasing'> is in effect. -It is intended mainly for use in assignments to references. For example: - - use experimental 'refaliasing', 'declared_refs'; - my \$a = \$b; - -See L<perlref/Assigning to References> for slightly more detail. - -=head2 Perl can now do default collation in UTF-8 locales on platforms -that support it - -Some platforms natively do a reasonable job of collating and sorting in -UTF-8 locales. Perl now works with those. For portability and full -control, L<Unicode::Collate> is still recommended, but now you may -not need to do anything special to get good-enough results, depending on -your application. See -L<perllocale/Category C<LC_COLLATE>: Collation: Text Comparisons and Sorting>. - -=head2 Better locale collation of strings containing embedded C<NUL> -characters - -In locales that have multi-level character weights, these are now -ignored at the higher priority ones. There are still some gotchas in -some strings, though. See -L<perllocale/Collation of strings containing embedded C<NUL> characters>. - -=head2 Lexical subroutines are no longer experimental - -Using the C<lexical_subs> feature no longer emits a warning. Existing -code that disables the C<experimental::lexical_subs> warning category -that the feature previously used will continue to work. The -C<lexical_subs> feature has no effect; all Perl code can use lexical -subroutines, regardless of what feature declarations are in scope. - -=head2 C<CORE> subroutines for hash and array functions callable via -reference - -The hash and array functions in the C<CORE> namespace--C<keys>, C<each>, -C<values>, C<push>, C<pop>, C<shift>, C<unshift> and C<splice>--, can now -be called with ampersand syntax (C<&CORE::keys(\%hash>) and via reference -(C<< my $k = \&CORE::keys; $k->(\%hash) >>). Previously they could only be -used when inlined. - -=head2 POSIX::tmpnam() has been removed - -The fundamentally unsafe C<tmpnam()> interface was deprecated in -Perl 5.22.0 and has now been removed. In its place you can use -for example the L<File::Temp> interfaces. - -=head2 require ::Foo::Bar is now illegal. - -Formerly, C<require ::Foo::Bar> would try to read F</Foo/Bar.pm>. Now any -bareword require which starts with a double colon dies instead. - -=head2 Unescaped literal C<"{"> characters in regular expression -patterns are no longer permissible - -You have to now say something like C<"\{"> or C<"[{]"> to specify to -match a LEFT CURLY BRACKET. This will allow future extensions to the -language. This restriction is not enforced, nor are there current plans -to enforce it, if the C<"{"> is the first character in the pattern. - -These have been deprecated since v5.16, with a deprecation message -displayed starting in v5.22. - -=head2 Literal control character variable names are no longer permissible - -A variable name may no longer contain a literal control character under -any circumstances. These previously were allowed in single-character -names on ASCII platforms, but have been deprecated there since Perl -v5.20. This affects things like C<$I<\cT>>, where I<\cT> is a literal -control (such as a C<NAK> or C<NEGATIVE ACKNOWLEDGE> character) in the -source code. - -=head2 C<NBSP> is no longer permissible in C<\N{...}> - -The name of a character may no longer contain non-breaking spaces. It -has been deprecated to do so since Perl v5.22. - -=head1 Security - -=head2 Remove current dir (C<.>) from C<@INC> - -For security reasons, C<@INC> no longer contains the default directory -(C<.>). - -=head2 "Escaped" colons and relative paths in PATH - -On Unix systems, Perl treats any relative paths in the PATH environment -variable as tainted when starting a new process. Previously, it was -allowing a backslash to escape a colon (unlike the OS), consequently -allowing relative paths to be considered safe if the PATH was set to -something like C</\:.>. The check has been fixed to treat C<.> as tainted -in that example. - -=head2 C<-Di> switch is now required for PerlIO debugging output - -Previously PerlIO debugging output would be sent to the file specified -by the C<PERLIO_DEBUG> environment variable if perl wasn't running -setuid and the C<-T> or C<-t> switches hadn't been parsed yet. - -If perl performed output at a point where it hadn't yet parsed its -switches this could result in perl creating or overwriting the file -named by C<PERLIO_DEBUG> even when the C<-T> switch had been supplied. - -Perl now requires the C<-Di> switch to produce PerlIO debugging -output. By default this is written to C<stderr>, but can optionally -be redirected to a file by setting the C<PERLIO_DEBUG> environment -variable. - -If perl is running setuid or the C<-T> switch has supplied -C<PERLIO_DEBUG> is ignored and the debugging output is sent to -C<stderr> as for any other C<-D> switch. - -=head1 Incompatible Changes - -=head2 C<${^ENCODING}> has been removed - -Consequently, the L<encoding> pragma's default mode is no longer supported. If -you still need to write your source code in encodings other than UTF-8, use a -source filter such as L<Filter::Encoding> on CPAN or L<encoding>'s C<Filter> -option. - -=head2 C<scalar(%hash)> return signature changed - -The value returned for C<scalar(%hash)> will no longer show information about -the buckets allocated in the hash. It will simply return the count of used -keys. It is thus equivalent to C<0+keys(%hash)>. - -A form of backwards compatibility is provided via C<Hash::Util::bucket_ratio()> -which provides the same behavior as C<scalar(%hash)> provided prior to Perl -5.25. - -=head2 C<keys> returned from an lvalue subroutine - -C<keys> returned from an lvalue subroutine can no longer be assigned -to in list context. - - sub foo : lvalue { keys(%INC) } - (foo) = 3; # death - sub bar : lvalue { keys(@_) } - (bar) = 3; # also an error - -This makes the lvalue sub case consistent with C<(keys %hash) = ...> and -C<(keys @_) = ...>, which are also errors. [perl #128187] - -=head1 Deprecations - -=head2 String delimiters that aren't stand-alone graphemes are now deprecated - -In order for Perl to eventually allow string delimiters to be Unicode -grapheme clusters (which look like a single character, but may be -a sequence of several ones), we have to stop allowing a single char -delimiter that isn't a grapheme by itself. These are unlikely to exist -in actual code, as they would typically display as attached to the -character in front of them. - -=head1 Performance Enhancements - -=over 4 - -=item * - -A hash in boolean context is now sometimes faster, e.g. - - if (!%h) { ... } - -This was already special-cased, but some cases were missed, and even the -ones which weren't have been improved. - -=item * - -Several other ops may now also be faster in boolean context. - -=item * New Faster Hash Function on 64 bit builds - -We use a different hash function for short and long keys. This should -improve performance and security, especially for long keys. - -=item * readline is faster - -Reading from a file line-by-line with C<readline()> or C<< E<lt>E<gt> >> should -now typically be faster due to a better implementation of the code that -searches for the next newline character. - -=item * - -Reduce cost of SvVALID(). - -=item * - -C<$ref1 = $ref2> has been optimized. - -=item * - -Array and hash assignment are now faster, e.g. - - (..., @a) = (...); - (..., %h) = (...); - -especially when the RHS is empty. - -=item * - -Reduce the number of odd special cases for the C<SvSCREAM> flag. - -=item * - -Avoid sv_catpvn() in do_vop() when unneeded. - -=item * - -Enhancements in Regex concat COW implementation. - -=item * - -Speed up C<AV> and C<HV> clearing/undeffing. - -=item * - -Better optimise array and hash assignment - -=item * - -Converting a single-digit string to a number is now substantially faster. - -=item * - -The internal op implementing the C<split> builtin has been simplified and -sped up. Firstly, it no longer requires a subsidiary internal C<pushre> op -to do its work. Secondly, code of the form C<my @x = split(...)> is now -optimised in the same way as C<@x = split(...)>, and is therefore a few -percent faster. - -=item * - -The rather slow implementation for the experimental subroutine signatures -feature has been made much faster; it is now comparable in speed with the -old-style C<my ($a, $b, @c) = @_>. - -=item * - -Bareword constant strings are now permitted to take part in constant -folding. They were originally exempted from constant folding in August 1999, -during the development of Perl 5.6, to ensure that C<use strict "subs"> -would still apply to bareword constants. That has now been accomplished a -different way, so barewords, like other constants, now gain the performance -benefits of constant folding. - -This also means that void-context warnings on constant expressions of -barewords now report the folded constant operand, rather than the operation; -this matches the behaviour for non-bareword constants. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<attributes> has been upgraded from version 0.28 to 0.29. - -The deprecation message for the C<:unique> and C<:locked> attributes -now mention they will disappear in Perl 5.28. - -=item * - -L<B::Concise> has been upgraded from version 0.998 to 0.999. - -Its output is now more descriptive for C<op_private> flags. - -=item * - -L<B::Xref> has been upgraded from version 1.05 to 1.06. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<Data::Dumper> has been upgraded from version 2.162 to 2.167. - -The XS implementation now supports Deparse. - -This fixes a stack management bug. [perl #130487]. - -=item * - -L<Devel::SelfStubber> has been upgraded from version 1.05 to 1.06. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<diagnostics> has been upgraded from version 1.35 to 1.36. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<encoding> has been upgraded from version 2.17 to 2.17_01. - -This module's default mode is no longer supported as of Perl 5.25.3. It now -dies when imported, unless the C<Filter> option is being used. - -=item * - -L<encoding::warnings> has been upgraded from version 0.12 to 0.13. - -This module is no longer supported as of Perl 5.25.3. It emits a warning to -that effect and then does nothing. - -=item * - -L<Errno> has been upgraded from version 1.26 to 1.27. - -Document that using C<%!> loads Errno for you. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<ExtUtils::Embed> has been upgraded from version 1.33 to 1.34. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<feature> has been upgraded from version 1.45 to 1.46. - -Fixes the Unicode Bug in the range operator. - -=item * - -L<File::Glob> has been upgraded from version 1.27 to 1.28. - -Issue a deprecation message for C<File::Glob::glob()>. - -=item * - -L<Filter::Simple> has been upgraded from version 0.92 to 0.93. - -It no longer treats C<no MyFilter> immediately following C<use MyFilter> as -end-of-file. [perl #107726] - -=item * - -L<HTTP::Tiny> has been upgraded from version 0.064 to 0.070. - -Internal 599-series errors now include the redirect history. - -=item * - -L<I18N::LangTags> has been upgraded from version 0.41 to 0.42. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<lib> has been upgraded from version 0.63 to 0.64. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<Math::BigInt> has been upgraded from version 1.999726(_01) to 1.999727. - -There have also been some core customizations. - -=item * - -L<Net::Ping> has been upgraded from version 2.44 to 2.55. - -IPv6 addresses and C<AF_INET6> sockets are now supported, along with several -other enhancements. - -Remove sudo from 500_ping_icmp.t. - -Avoid stderr noise in tests - -Check for echo in new Net::Ping tests. - -=item * - -L<OS2::Process> has been upgraded from version 1.11 to 1.12. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<overload> has been upgraded from version 1.26 to 1.28. - -Its compilation speed has been improved slightly. - -=item * - -L<perl5db.pl> has been upgraded from version 1.50 to 1.51. - -Ignore F</dev/tty> on non-Unix systems. [perl #113960] - -=item * - -L<POSIX> has been upgraded from version 1.65 to 1.69. This remedies several -defects in making its symbols exportable. [perl #127821] -The C<POSIX::tmpnam()> interface has been removed, -see L</"POSIX::tmpnam() has been removed">. -Trying to import POSIX subs that have no real implementations -(like C<POSIX::atend()>) now fails at import time, instead of -waiting until runtime. - -=item * - -L<re> has been upgraded from version 0.33 to 0.34 - -This adds support for the new L<C<E<47>xx>|perlre/E<sol>x and E<sol>xx> -regular expression pattern modifier, and a change to the L<S<C<use re -'strict'>>|re/'strict' mode> experimental feature. When S<C<re -'strict'>> is enabled, a warning now will be generated for all -unescaped uses of the two characters C<}> and C<]> in regular -expression patterns (outside bracketed character classes) that are taken -literally. This brings them more in line with the C<)> character which -is always a metacharacter unless escaped. Being a metacharacter only -sometimes, depending on action at a distance, can lead to silently -having the pattern mean something quite different than was intended, -which the S<C<re 'strict'>> mode is intended to minimize. - -=item * - -L<Storable> has been upgraded from version 2.59 to 2.61. - -Fixes [perl #130098]. - -=item * - -L<Term::ReadLine> has been upgraded from version 1.15 to 1.16. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<Test> has been upgraded from version 1.29 to 1.30. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<Thread::Semaphore> has been upgraded from 2.12 to 2.13. - -Added the C<down_timed> method. - -=item * - -L<threads> has been upgraded from version 2.07 to 2.12. - -Compatibility with 5.8 has been restored. - -Fixes [perl #130469]. - -=item * - -L<threads::shared> has been upgraded from version 1.52 to 1.54. - -This fixes [cpan #119529], [perl #130457] - -=item * - -L<Time::HiRes> has been upgraded from version 1.9739 to 1.9740_03. - -It now builds on systems with C++11 compilers (such as G++ 6 and Clang++ -3.9). - -Now uses C<clockid_t>. - -=item * - -L<Unicode::UCD> has been upgraded from version 0.67 to 0.68. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<VMS::DCLsym> has been upgraded from version 1.07 to 1.08. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=item * - -L<XSLoader> has been upgraded from version 0.21 to 0.26. - -Fixed a security hole in which binary files could be loaded from a path -outside of L<C<@INC>|perlvar/@INC>. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] - -=back - -=head1 Documentation - -=head2 New Documentation - -=head3 L<perldeprecation> - -This file documents all upcoming deprecations, and some of the deprecations -which already have been removed. The purpose of this documentation is -two-fold: document what will disappear, and by which version, and serve -as a guide for people dealing with code which has features that no longer -work after an upgrade of their perl. - -=head2 Changes to Existing Documentation - -=head3 L<perlcall> - -=over 4 - -=item * - -Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30 - -This was changed to drop a leading C<v> in C<v5.30>, so it uses the same -style as other deprecation messages. - -=item * - -"\c%c" is more clearly written simply as "%s". - -It was decided to undeprecate the use of C<\c%c>, see L<http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html> - -=item * - -Removed redundant C<dSP> from an example. - -=back - -=head3 L<perlcommunity> - -=over 4 - -=item * - -All references to Usenet have been removed. - -=back - -=head3 L<perldata> - -=over 4 - -=item * - -Updated documentation of C<scalar(%hash)>. See L</scalar(%hash) return -signature changed> above. - -=item * - -Use of single character variables, with the variable name a non printable -character in the range C<\x80>-C<\xFF> is no longer allowed. Update the docs to -reflect this. - -=back - -=head3 L<perldelta> - -=over 4 - -=item * - -All references to Usenet have been removed. - -=back - -=head3 L<perldiag> - -=over 4 - -=item * - -Deprecations are to be marked with a D. -C<"%s() is deprecated on :utf8 handles"> use a deprecation message, and as -such, such be marked C<"(D deprecated)"> and not C<"(W deprecated)">. - -=back - -=head3 L<perlexperiment> - -=over 4 - -=item * - -Documented new feature: See L</Declaring a reference to a variable> above. - -=back - -=head3 L<perlfunc> - -=over 4 - -=item * - -Defined on aggregates is no longer allowed. Perlfunc was still reporting it as -deprecated, and that it will be deleted in the future. - -=item * - -Clarified documentation of L<C<seek()>|perlfunc/seek>, -L<C<tell()>|perlfunc/tell> and L<C<sysseek()>|perlfunc/sysseek>. -L<[perl #128607]|https://rt.perl.org/Public/Bug/Display.html?id=128607> - -=item * - -Removed obsolete documentation of L<C<study()>|perlfunc/study>. - -=back - -=head3 L<perlguts> - -=over 4 - -=item * - -Add C<pTHX_> to magic method examples. - -=back - -=head3 L<perlhack> - -=over 4 - -=item * - -Document Tab VS Space. - -=back - -=head3 L<perlinterp> - -=over 4 - -=item * - -L<perlinterp> has been expanded to give a more detailed example of how to -hunt around in the parser for how a given operator is handled. - -=back - -=head3 L<perllocale> - -=over 4 - -=item * - -Document C<NUL> collation handling. - -=item * - -Some locales aren't compatible with Perl. Note the potential bad -consequences of using them. - -=back - -=head3 L<perlmodinstall> - -=over 4 - -=item * - -All references to Usenet have been removed. - -=back - -=head3 L<perlmodlib> - -=over 4 - -=item * - -Updated the mirror list. - -=item * - -All references to Usenet have been removed. - -=back - -=head3 L<perlnewmod> - -=over 4 - -=item * - -All references to Usenet have been removed. - -=back - -=head3 L<perlobj> - -=over 4 - -=item * - -Added a section on calling methods using their fully qualified names. - -=item * - -Do not discourage manual @ISA. - -=back - -=head3 L<perlootut> - -=over 4 - -=item * - -Tidy the document. - -=item * - -Mention C<Moo> more. - -=back - -=head3 L<perlop> - -=over 4 - -=item * - -Clarify behavior single quote regexps. - -=back - -=head3 L<perlre> - -=over 4 - -=item * - -Several minor enhancements to the documentation. - -=back - -=head3 L<perlsec> - -=over 4 - -=item * - -Fixed link to Crosby paper on hash complexity attack. - -=back - -=head3 L<perlref> - -=over 4 - -=item * - -Documented new feature: See L</Declaring a reference to a variable> above. - -=back - -=head3 L<perltie> - -=over 4 - -=item * - -Updated documentation of C<scalar(%hash)>. See L</scalar(%hash) return -signature changed> above. - -=back - -=head3 L<perlunicode> - -=over 4 - -=item * - -Documented change to C<\p{I<script>}> to now use the improved Script_Extensions -property. See L</Use of \p{script} uses the improved Script_Extensions -property> above. - -=item * - -Updated the text to correspond with changes in Unicode UTS#18, concerning -regular expressions, and Perl compatibility with what it says. - -=back - -=head3 L<perlvar> - -=over 4 - -=item * - -Removed obsolete documentation of C<${^ENCODING}>. See L</${^ENCODING} has -been removed> above. - -=item * - -Document C<@ISA>. Was documented other places, not not in L<perlvar>. - -=back - -=head1 Diagnostics - -=head2 New Diagnostics - -=head3 New Errors - -=over 4 - -=item * - -Since C<.> is now removed from C<@INC> by default, C<do> will now trigger -a warning recommending to fix the C<do> statement: - -L<do "%s" failed, '.' is no longer in @INC|perldiag/do "%s" failed, '.' is no longer in @INC; did you mean do ".E<sol>%s"?> - -=item * - -Using the empty pattern (which re-executes the last successfully-matched -pattern) inside a code block in another regex, as in C</(?{ s!!new! })/>, has -always previously yielded a segfault. It now produces an error: L<Use of the -empty pattern inside of a regex code block is forbidden|perldiag/"Use of the -empty pattern inside of a regex code block is forbidden">. - -=item * - -L<The experimental declared_refs feature is not enabled|perldiag/"The experimental declared_refs feature is not enabled"> - -(F) To declare references to variables, as in C<my \%x>, you must first enable -the feature: - - no warnings "experimental::declared_refs"; - use feature "declared_refs"; - -=item * - -L<Version control conflict marker|perldiag/"Version control conflict marker"> - -(F) The parser found a line starting with C<E<lt><<<<<<>, -C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>. These may be left by a -version control system to mark conflicts after a failed merge operation. - -=item * - -L<%s: command not found|perldiag/"%s: command not found"> - -(A) You've accidentally run your script through B<bash> or another shell -instead of Perl. Check the #! line, or manually feed your script into -Perl yourself. The #! line at the top of your file could look like: - - #!/usr/bin/perl - -=item * - -L<%s: command not found: %s|perldiag/"%s: command not found: %s"> - -(A) You've accidentally run your script through B<zsh> or another shell -instead of Perl. Check the #! line, or manually feed your script into -Perl yourself. The #! line at the top of your file could look like: - - #!/usr/bin/perl - -=item * - -L<Unescaped left brace in regex is deprecated here, passed through in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Unescaped left brace in regex is deprecated here, passed through in regex; marked by S<<-- HERE> in m/%s/"> - -Unescaped left braces are already illegal in some contexts in regular -expression patterns, but, due to an oversight, no deprecation warning -was raised in other contexts where they are intended to become illegal. -This warning is now raised in these contexts. - -=item * - -L<Bareword in require contains "%s"|perldiag/"Bareword in require contains "%s""> - -=item * - -L<Bareword in require maps to empty filename|perldiag/"Bareword in require maps to empty filename"> - -=item * - -L<Bareword in require maps to disallowed filename "%s"|perldiag/"Bareword in require maps to disallowed filename "%s""> - -=item * - -L<Bareword in require must not start with a double-colon: "%s"|perldiag/"Bareword in require must not start with a double-colon: "%s""> - -=back - -=head3 New Warnings - -=over 4 - -=item * - -Since C<.> is removed from C<@INC>, C<do> will now trigger a warning -recommending on fixing the C<do> statement. - -L<do "%s" failed, '.' is no longer in @INC|perldiag/"do "%s" failed, '.' is no longer in @INC"> - -=item * - -L<Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl v5.30|perldiag/"Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl v5.30"> - -See L</Deprecations> - -=item * - -L<Declaring references is experimental|perldiag/"Declaring references is experimental"> - -(S experimental::declared_refs) This warning is emitted if you use a reference -constructor on the right-hand side of C<my()>, C<state()>, C<our()>, or -C<local()>. 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::declared_refs"; - use feature "declared_refs"; - $fooref = my \$foo; - -=item * - -L<C<${^ENCODING}> is no longer supported|perldiag/"${^ENCODING} is no longer supported"> - -(D deprecated) The special variable C<${^ENCODING}>, formerly used to implement -the C<encoding> pragma, is no longer supported as of Perl 5.26.0. - -=back - -=head2 Changes to Existing Diagnostics - -=over 4 - -=item * - -When a C<require> fails, we now do not provide C<@INC> when the C<require> -is for a file instead of a module. - -=item * - -When C<@INC> is not scanned for a C<require> call, we no longer display -C<@INC> to avoid confusion. - -=item * - -Attribute "locked" is deprecated, and will disappear in Perl 5.28 - -=item * - -Attribute "unique" is deprecated, and will disappear in Perl 5.28 - -=item * - -Constants from lexical variables potentially modified elsewhere are -deprecated. This will not be allowed in Perl 5.32 - -=item * - -Deprecated use of my() in false conditional. This will be a fatal error -in Perl 5.30 - -=item * - -dump() better written as CORE::dump(). dump() will no longer be available -in Perl 5.30 - -=item * - -${^ENCODING} is no longer supported. Its use will be fatal in Perl 5.28 - -=item * - -File::Glob::glob() will disappear in perl 5.30. Use File::Glob::bsd_glob() -instead. - -=item * - -%s() is deprecated on :utf8 handles. This will be a fatal error in Perl 5.30 - -=item * - -$* is no longer supported. Its use will be fatal in Perl 5.30 - -=item * - -$* is no longer supported. Its use will be fatal in Perl 5.30 - -=item * - -Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28 - -=item * - -Opening filehandle %s also as a directory. This will be a fatal -error in Perl 5.28 - -=item * - -Setting $/ to a reference to %s as a form of slurp is deprecated, -treating as undef. This will be fatal in Perl 5.28 - -=item * - -Unescaped left brace in regex is deprecated here (and will be fatal -in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in m/%s/ - -=item * - -Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28 - -=item * - -Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28 - -=item * - -Use of code point 0x%s is deprecated; the permissible max is 0x%s. -This will be fatal in Perl 5.28 - -=item * - -Use of comma-less variable list is deprecated. Its use will be fatal -in Perl 5.28 - -=item * - -Use of inherited AUTOLOAD for non-method %s() is deprecated. This -will be fatal in Perl 5.28 - -=item * - -Use of strings with code points over 0xFF as arguments to %s operator -is deprecated. This will be a fatal error in Perl 5.28 - -=item * - -Improve error for missing tie() package/method. This brings the error messages -in line with the ones used for normal method calls, despite not using -call_method(). - -=item * - -Make the sysread()/syswrite/() etc :utf8 handle warnings default. These -warnings were under 'deprecated' previously. - -=item * - -'do' errors now refer to 'do' (not 'require'). - -=item * - -Details as to the exact problem have been added to the diagnostics that -occur when malformed UTF-8 is encountered when trying to convert to a -code point. - -=item * - -Executing C<undef $x> where C<$x> is tied or magical no longer incorrectly -blames the variable for an uninitialized-value warning encountered by the -tied/magical code. - -=item * - -L<Unescaped left brace in regex is illegal here in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Unescaped left brace in regex is illegal here in regex; marked by S<<-- HERE> in m/%s/"> - -The word "here" has been added to the message that was raised in -v5.25.1. This is to indicate that there are contexts in which unescaped -left braces are not (yet) illegal. - -=item * - -Code like C<$x = $x . "a"> was incorrectly failing to yield a -L<use of uninitialized value|perldiag/"Use of uninitialized value%s"> -warning when C<$x> was a lexical variable with an undefined value. That has -now been fixed. [perl #127877] - -=item * - -When the error "Experimental push on scalar is now forbidden" is raised for -the hash functions C<keys>, C<each>, and C<values>, it is now followed by -the more helpful message, "Type of arg 1 to whatever must be hash or -array". [perl #127976] - -=item * - -C<undef *_; shift> or C<undef *_; pop> inside a subroutine, with no -argument to C<shift> or C<pop>, began crashing in Perl 5.14.0, but has now -been fixed. - -=item * - -C<< "string$scalar-E<gt>$*" >> now correctly prefers concat overloading to -string overloading if C<< $scalar-E<gt>$* >> returns an overloaded object, -bringing it into consistency with C<$$scalar>. - -=item * - -C<< /@0{0*-E<gt>@*/*0 >> and similar contortions used to crash, but no longer -do, but merely produce a syntax error. [perl #128171] - -=item * - -C<do> or C<require> with a reference or typeglob which, when stringified, -contains a null character started crashing in Perl 5.20.0, but has now been -fixed. [perl #128182] - -=back - -=head1 Utility Changes - -=head2 F<c2ph> and F<pstruct> - -=over 4 - -=item * - -These old utilities have long since superceded by L<h2xs>, and are -now gone from the distribution. - -=back - -=head2 F<Porting/pod_lib.pl> - -=over 4 - -=item * - -Removed spurious executable bit. - -=item * - -Account for possibility of DOS file endings. - -=back - -=head2 F<Porting/sync-with-cpan> - -=over 4 - -=item * - -Many improvements - -=back - -=head2 F<perf/benchmarks> - -=over 4 - -=item * - -Tidy file, rename some symbols. - -=back - -=head2 F<Porting/checkAUTHORS.pl> - -=over 4 - -=item * - -Replace obscure character range with \w. - -=back - -=head2 F<t/porting/regen.t> - -=over 4 - -=item * - -try to be more helpful when tests fail. - -=back - -=head2 F<utils/h2xs.PL> - -=over 4 - -=item * - -Avoid infinite loop for enums. - -=back - -=head2 L<perlbug> - -=over 4 - -=item * - -Long lines in the message body are now wrapped at 900 characters, to stay -well within the 1000-character limit imposed by SMTP mail transfer agents. -This is particularly likely to be important for the list of arguments to -C<Configure>, which can readily exceed the limit if, for example, it names -several non-default installation paths. This change also adds the first unit -tests for perlbug. [perl #128020] - -=back - -=head1 Configuration and Compilation - -=over 4 - -=item * - -C<DEFAULT_INC_EXCLUDES_DOT> has been turned on as default. - -=item * - -The C<dtrace> build process has further changes: - -=over - -=item * - -If the C<-xnolibs> is available, use that so a F<dtrace> perl can be -built within a FreeBSD jail. - -=item * - -On systems that build a dtrace object file (FreeBSD, Solaris and -SystemTap's dtrace emulation), copy the input objects to a separate -directory and process them there, and use those objects in the link, -since C<dtrace -G> also modifies these objects. - -=item * - -Add libelf to the build on FreeBSD 10.x, since dtrace adds references -to libelf symbols. - -=item * - -Generate a dummy dtrace_main.o if C<dtrace -G> fails to build it. A -default build on Solaris generates probes from the unused inline -functions, while they don't on FreeBSD, which causes C<dtrace -G> to -fail. - -=back - -[perl #130108] - -=item * - -You can now disable perl's use of the PERL_HASH_SEED and -PERL_PERTURB_KEYS environment variables by configuring perl with -C<-Accflags=NO_PERL_HASH_ENV>. - -=item * - -You can now disable perl's use of the PERL_HASH_SEED_DEBUG environment -variable by configuring perl with -C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>. - -=item * - -Zero out the alignment bytes when calculating the bytes for 80-bit C<NaN> -and C<Inf> to make builds more reproducible. [perl #130133] - -=item * - -Since 5.18 for testing purposes we have included support for -building perl with a variety of non-standard, and non-recommended -hash functions. Since we do not recommend the use of these functions -we have removed them and their corresponding build options. Specifically -this includes the following build options: - - PERL_HASH_FUNC_SDBM - PERL_HASH_FUNC_DJB2 - PERL_HASH_FUNC_SUPERFAST - PERL_HASH_FUNC_MURMUR3 - PERL_HASH_FUNC_ONE_AT_A_TIME - PERL_HASH_FUNC_ONE_AT_A_TIME_OLD - PERL_HASH_FUNC_MURMUR_HASH_64A - PERL_HASH_FUNC_MURMUR_HASH_64B - -=item * - -Remove "Warning: perl appears in your path" - -This install warning is more or less obsolete, since most platforms already -*will* have a /usr/bin/perl or similar provided by the OS. - -=item * - -Reduce verbosity of "make install.man" - -Previously, two progress messages were emitted for each manpage: one by -installman itself, and one by the function in install_lib.pl that it calls to -actually install the file. Disabling the second of those in each case saves -over 750 lines of unhelpful output. - -=item * - -Cleanup for clang -Weverything support. [perl 129961] - -=item * - -Configure: signbit scan was assuming too much, stop assuming negative 0. - -=item * - -Various compiler warnings have been silenced. - -=item * - -Several smaller changes have been made to remove impediments to compiling under -C++11. - -=item * - -Builds using C<USE_PAD_RESET> now work again; this configuration had -bit-rotted. - -=item * - -A probe for C<gai_strerror> was added to F<Configure> that checks if the -the gai_strerror() routine is available and can be used to -translate error codes returned by getaddrinfo() into human -readable strings. - -=item * - -F<Configure> now aborts if both "-Duselongdouble" and "-Dusequadmath" are -requested. -L<[perl #126203]|https://rt.perl.org/Public/Bug/Display.html?id=126203> - -=item * - -Fixed a bug in which F<Configure> could append "-quadmath" to the archname even -if it was already present. -L<[perl #128538]|https://rt.perl.org/Public/Bug/Display.html?id=128538> - -=item * - -Clang builds with "-DPERL_GLOBAL_STRUCT" or "-DPERL_GLOBAL_STRUCT_PRIVATE" have -been fixed (by disabling Thread Safety Analysis for these configurations). - -=item * - -F<make_ext.pl> no longer updates a module's F<pm_to_blib> file when no -files require updates. This could cause dependencies, F<perlmain.c> -in particular, to be rebuilt unnecessarily. [perl #126710] - -=item * - -The output of C<perl -V> has been reformatted so that each configuration -and compile-time option is now listed one per line, to improve -readability. - -=item * - -C<Configure> now builds C<miniperl> and C<generate_uudmap> if you -invoke it with C<-Dusecrosscompiler> but not C<-Dtargethost=somehost>. -This means you can supply your target platform C<config.sh>, generate -the headers and proceed to build your cross-target perl. [perl #127234] - -=item * - -Builds with C<-Accflags=-DPERL_TRACE_OPS> now only dump the operator -counts when the environment variable C<PERL_TRACE_OPS> to be set to a -non-zero integer. This allows C<make test> to pass on such a build. - -=item * - -When building with GCC 6 and link-time optimization (the C<-flto> option to -C<gcc>), C<Configure> was treating all probed symbols as present on the -system, regardless of whether they actually exist. This has been fixed. -[perl #128131] - -=item * - -The F<t/test.pl> library is used for internal testing of Perl itself, and -also copied by several CPAN modules. Some of those modules must work on -older versions of Perl, so F<t/test.pl> must in turn avoid newer Perl -features. Compatibility with Perl 5.8 was inadvertently removed some time -ago; it has now been restored. [perl #128052] - -=item * - -The build process no longer emits an extra blank line before building each -"simple" extension (those with only F<*.pm> and F<*.pod> files). - -=back - -=head1 Testing - -=over 4 - -=item * - -F<XS-APItest/t/utf8.t>: Several small fixes and enhancements. - -=item * - -Tests for locales were erroneously using locales incompatible with Perl. - -=item * - -Some parts of the test suite that try to exhaustively test edge cases in the -regex implementation have been restricted to running for a maximum of five -minutes. On slow systems they could otherwise take several hours, without -significantly improving our understanding of the correctness of the code -under test. - -In addition, some of those test cases have been split into more files, to -allow them to be run in parallel on suitable systems. - -=item * - -A new internal facility allows analysing the time taken by the individual -tests in Perl's own test suite; see F<Porting/harness-timer-report.pl>. - -=item * - -F<t/re/regexp_nonull.t> has been added to test that the regular expression -engine can handle scalars that do not have a null byte just past the end of -the string. - -=item * - -A new test script, F<t/op/decl-refs.t>, has been added to test the new feature, -"Declaring a reference to a variable". - -=item * - -A new test script, F<t/re/anyof.t>, has been added to test that the ANYOF nodes -generated by bracketed character classes are as expected. - -=item * - -F<t/harness> now tries really hard not to run tests outside of the Perl -source tree. [perl #124050] - -=back - -=head1 Platform Support - -=head2 New Platforms - -=over 4 - -=item NetBSD/VAX - -Perl now compiles under NetBSD on VAX machines. However, it's not -possible for that platform to implement floating-point infinities and -NaNs compatibly with most modern systems, which implement the IEEE-754 -floating point standard. The hexadecimal floating point (C<0x...p[+-]n> -literals, C<printf %a>) is not implemented, either. -The C<make test> passes 98% of tests. - -=over 4 - -=item * - -Test fixes and minor updates. - -=item * - -Account for lack of C<inf>, C<nan>, and C<-0.0> support. - -=back - -=back - -=head2 Platform-Specific Notes - -=over 4 - -=item Darwin - -don't treat -Dprefix=/usr as special, instead require an extra option --Ddarwin_distribution to produce the same results. - -=item POSIX - -Finish removing POSIX deprecated functions. - -=item OS X - -OS X El Capitan doesn't implement the clock_gettime() or clock_getres() APIs, -emulate them as necessary. - -=item macOS - -Deprecated syscall(2) on macOS 10.12. - -=item EBCDIC - -Several tests have been updated to work (or be skipped) on EBCDIC platforms. - -=item HP-UX - -L<Net::Ping> UDP test is skipped on HP-UX. - -=item Hurd - -The hints for Hurd have been improved enabling malloc wrap and reporting the -GNU libc used (previously it was an empty string when reported). - -=item VAX - -VAX floating point formats are now supported. - -=item VMS - -=over 4 - -=item * - -The path separator for the C<PERL5LIB> and C<PERLLIB> environment entries is -now a colon (C<:>) when running under a Unix shell. There is no change when -running under DCL (it's still C<|>). - -=item * - -Remove some VMS-specific hacks from C<showlex.t>. These were added 15 years -ago, and are no longer necessary for any VMS version now supported. - -=item * - -Move C<_pDEPTH> and C<_aDEPTH> after F<config.h> otherwise DEBUGGING -may not be defined yet. - -=item * - -VAXC has not been a possibility for a good long while, and the versions of the -DEC/Compaq/HP/VSI C compiler that report themselves as "DEC" in a listing file -are 15 years or more out-of-date and can be safely desupported. - -=back - -=item Windows - -=over 4 - -=item * - -Support for compiling perl on Windows using Microsoft Visual Studio 2015 -(containing Visual C++ 14.0) has been added. - -This version of VC++ includes a completely rewritten C run-time library, some -of the changes in which mean that work done to resolve a socket close() bug in -perl #120091 and perl #118059 is not workable in its current state with this -version of VC++. Therefore, we have effectively reverted that bug fix for -VS2015 onwards on the basis that being able to build with VS2015 onwards is -more important than keeping the bug fix. We may revisit this in the future to -attempt to fix the bug again in a way that is compatible with VS2015. - -These changes do not affect compilation with GCC or with Visual Studio versions -up to and including VS2013, i.e. the bug fix is retained (unchanged) for those -compilers. - -Note that you may experience compatibility problems if you mix a perl built -with GCC or VS E<lt>= VS2013 with XS modules built with VS2015, or if you mix a -perl built with VS2015 with XS modules built with GCC or VS E<lt>= VS2013. -Some incompatibility may arise because of the bug fix that has been reverted -for VS2015 builds of perl, but there may well be incompatibility anyway because -of the rewritten CRT in VS2015 (e.g. see discussion at -http://stackoverflow.com/questions/30412951). - -=back - -=item Win32 - -=over 4 - -=item * - -Tweaks for Win32 VC vs GCC detection makefile code. This fixes issue that CCHOME -depends on CCTYPE, which in auto detect mode is set after CCHOME, so CCHOME uses -the uninit CCTYPE var. Also fix else vs .ELSE in makefile.mk - -=item * - -fp definitions have been updated. - -=back - -=item VMS And Win32 - -Fix some breakage, add 'undef' value for default_inc_excludes_dot in build -scripts. - -=item Linux - -Drop support for Linux a.out Linux has used ELF for over twenty years. - -=item OpenBSD 6 - -OpenBSD 6 still does not support returning pid, gid or uid with SA_SIGINFO. -Make sure this is accounted for. - -=item FreeBSD - -t/uni/overload.t: Skip hanging test on FreeBSD. - -=back - -=head1 Internal Changes - -=over 4 - -=item * - -The C<op_class()> API function has been added. This is like the existing -C<OP_CLASS()> macro, but can more accurately determine what struct an op -has been allocated as. For example C<OP_CLASS()> might return -C<OA_BASEOP_OR_UNOP> indicating that ops of this type are usually -allocated as an C<OP> or C<UNOP>; while C<op_class()> will return -C<OPclass_BASEOP> or C<OPclass_UNOP> as appropriate. - -=item * - -The output format of the C<op_dump()> function (as used by C<perl -Dx>) -has changed: it now displays an "ASCII-art" tree structure, and shows more -low-level details about each op, such as its address and class. - -=item * - -New versions of macros like C<isALPHA_utf8> and C<toLOWER_utf8> have -been added, each with the -suffix C<_safe>, like C<isSPACE_utf8_safe>. These take an extra -parameter, giving an upper limit of how far into the string it is safe -to read. Using the old versions could cause attempts to read beyond the -end of the input buffer if the UTF-8 is not well-formed, and their use -now raises a deprecation warning. Details are at -L<perlapi/Character classification>. - -=item * - -Calling macros like C<isALPHA_utf8> on malformed UTF-8 have issued a -deprecation warning since Perl v5.18. They now die. -Similarly, macros like C<toLOWER_utf8> on malformed UTF-8 now die. - -=item * - -Calling the functions C<utf8n_to_uvchr> and its derivatives, while -passing a string length of 0 is now asserted against in DEBUGGING -builds, and otherwise returns the Unicode REPLACEMENT CHARACTER. If -you have nothing to decode, you shouldn't call the decode function. - -=item * - -The functions C<utf8n_to_uvchr> and its derivatives now return the -Unicode REPLACEMENT CHARACTER if called with UTF-8 that has the overlong -malformation, and that malformation is allowed by the input parameters. -This malformation is where the UTF-8 looks valid syntactically, but -there is a shorter sequence that yields the same code point. This has -been forbidden since Unicode version 3.1. - -=item * - -The functions C<utf8n_to_uvchr> and its derivatives now accept an input -flag to allow the overflow malformation. This malformation is when the -UTF-8 may be syntactically valid, but the code point it represents is -not capable of being represented in the word length on the platform. -What "allowed" means in this case is that the function doesn't return an -error, and advances the parse pointer to beyond the UTF-8 in question, -but it returns the Unicode REPLACEMENT CHARACTER as the value of the -code point (since the real value is not representable). - -=item * - -The C<PADOFFSET> type has changed from being unsigned to signed, and -several pad-related variables such as C<PL_padix> have changed from being -of type C<I32> to type C<PADOFFSET>. - -=item * - -The function C<L<perlapi/utf8n_to_uvchr>> has been changed to not -abandon searching for other malformations when the first one is -encountered. A call to it thus can generate multiple diagnostics, -instead of just one. - -=item * - -A new function, C<L<perlapi/utf8n_to_uvchr_error>>, has been added for -use by modules that need to know the details of UTF-8 malformations -beyond pass/fail. Previously, the only ways to know why a sequence was -ill-formed was to capture and parse the generated diagnostics, or to do -your own analysis. - -=item * - -Several new functions for handling Unicode have been added to the API: -C<L<perlapi/is_strict_utf8_string>>, -C<L<perlapi/is_c9strict_utf8_string>>, -C<L<perlapi/is_utf8_string_flags>>, -C<L<perlapi/is_strict_utf8_string_loc>>, -C<L<perlapi/is_strict_utf8_string_loclen>>, -C<L<perlapi/is_c9strict_utf8_string_loc>>, -C<L<perlapi/is_c9strict_utf8_string_loclen>>, -C<L<perlapi/is_utf8_string_loc_flags>>, -C<L<perlapi/is_utf8_string_loclen_flags>>, -C<L<perlapi/is_utf8_fixed_width_buf_flags>>, -C<L<perlapi/is_utf8_fixed_width_buf_loc_flags>>, -C<L<perlapi/is_utf8_fixed_width_buf_loclen_flags>>. - -These functions are all extensions of the C<is_utf8_string_*()> functions, -that apply various restrictions to the UTF-8 recognized as valid. - -=item * - -A new API function C<sv_setvpv_bufsize()> allows simultaneously setting the -length and allocated size of the buffer in an C<SV>, growing the buffer if -necessary. - -=item * - -A new API macro C<SvPVCLEAR()> sets its C<SV> argument to an empty string, -like Perl-space C<$x = ''>, but with several optimisations. - -=item * - -All parts of the internals now agree that the C<sassign> op is a C<BINOP>; -previously it was listed as a C<BASEOP> in F<regen/opcodes>, which meant -that several parts of the internals had to be special-cased to accommodate -it. This oddity's original motivation was to handle code like C<$x ||= 1>; -that is now handled in a simpler way. - -=item * - -Several new internal C macros have been added that take a string literal as -arguments, alongside existing routines that take the equivalent value as two -arguments, a character pointer and a length. The advantage of this is that -the length of the string is calculated automatically, rather than having to -be done manually. These routines are now used where appropriate across the -entire codebase. - -=item * - -The code in F<gv.c> that determines whether a variable has a special meaning -to Perl has been simplified. - -=item * - -The C<DEBUGGING>-mode output for regex compilation and execution has been -enhanced. - -=item * - -Several macros and functions have been added to the public API for -dealing with Unicode and UTF-8-encoded strings. See -L<perlapi/Unicode Support>. - -=item * - -Use C<my_strlcat()> in C<locale.c>. While C<strcat()> is safe in this context, -some compilers were optimizing this to C<strcpy()> causing a porting test to -fail that looks for unsafe code. Rather than fighting this, we just use -C<my_strlcat()> instead. - -=item * - -Three new ops, C<OP_ARGELEM>, C<OP_ARGDEFELEM> and C<OP_ARGCHECK> have -been added. These are intended principally to implement the individual -elements of a subroutine signature, plus any overall checking required. - -=item * - -Perl no longer panics when switching into some locales on machines with -buggy C<strxfrm()> implementations in their libc. [perl #121734] - -=item * - -Perl is now built with the C<PERL_OP_PARENT> compiler define enabled by -default. To disable it, use the C<PERL_NO_OP_PARENT> compiler define. -This flag alters how the C<op_sibling> field is used in C<OP> structures, -and has been available optionally since perl 5.22.0. - -See L<perl5220delta/"Internal Changes"> for more details of what this -build option does. - -=item * - -The meanings of some internal SV flags have been changed - -OPpRUNTIME, SVpbm_VALID, SVpbm_TAIL, SvTAIL_on, SvTAIL_off, SVrepl_EVAL, -SvEVALED - -=item * - -Change C<hv_fetch(…, "…", …, …)> to C<hv_fetchs(…, "…", …)> - -The dual-life dists all use Devel::PPPort, so they can use this function even -though it was only added in 5.10. - -=back - -=head1 Selected Bug Fixes - -=over 4 - -=item * - -C< $-{$name} > would leak an C<AV> on each access if the regular -expression had no named captures. The same applies to access to any -hash tied with L<Tie::Hash::NamedCapture> and C<< all =E<gt> 1 >>. [perl -#130822] - -=item * - -Attempting to use the deprecated variable C<$#> as the object in an -indirect object method call could cause a heap use after free or -buffer overflow. [perl #129274] - -=item * - -When checking for an indirect object method call in some rare cases -the parser could reallocate the line buffer but then continue to use -pointers to the old buffer. [perl #129190] - -=item * - -Supplying a glob as the format argument to L<perlfunc/formline> would -cause an assertion failure. [perl #130722] - -=item * - -Code like C< $value1 =~ qr/.../ ~~ $value2 > would have the match -converted into a qr// operator, leaving extra elements on the stack to -confuse any surrounding expression. [perl #130705] - -=item * - -Since 5.24.0 in some obscure cases, a regex which included code blocks -from multiple sources (e.g. via embedded via qr// objects) could end up -with the wrong current pad and crash or give weird results. [perl #129881] - -=item * - -Occasionally C<local()>s in a code block within a patterns weren't being -undone when the pattern matching backtracked over the code block. -[perl #126697] - -=item * - -Using C<substr()> to modify a magic variable could access freed memory -in some cases. [perl #129340] - -=item * - -Perl 5.25.9 was fixed so that under C<use utf8>, the entire Perl program -is checked that the UTF-8 is wellformed. It turns out that several edge -cases were missed, and are now fixed. [perl #126310] was the original -ticket. - -=item * - -Under C<use utf8>, the entire Perl program is now checked that the UTF-8 -is wellformed. This resolves [perl #126310]. - -=item * - -The range operator C<..> on strings now handles its arguments correctly when in -the scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" >> -feature. The previous behaviour was sufficiently unexpected that we believe no -correct program could have made use of it. - -=item * - -The S<split> operator did not ensure enough space was allocated for -its return value in scalar context. It could then write a single -pointer immediately beyond the end of the memory block allocated for -the stack. [perl #130262] - -=item * - -Using a large code point with the C<W> pack template character with -the current output position aligned at just the right point could -cause a write a single zero byte immediately beyond the end of an -allocated buffer. [perl #129149] - -=item * - -Supplying the form picture argument as part of the form argument list -where the picture specifies modifying the argument could cause an -access to the new freed compiled form. [perl #129125] - -=item * - -Fix a problem with sort's build-in compare, where it would not sort -correctly with 64-bit integers, and non-long doubles. [perl #130335] - -=item * - -Fix issues with /(?{ ... E<lt>E<lt>EOF })/ that broke Method-Signatures. [perl #130398] - -=item * - -Fix a macro which caused syntax error on an EBCDIC build. - -=item * - -Prevent tests from getting hung up on 'NonStop' option. [perl #130445] - -=item * - -Fixed an assertion failure with C<chop> and C<chomp>, which -could be triggered by C<chop(@x =~ tr/1/1/)>. [perl #130198]. - -=item * - -Fixed a comment skipping error under C</x>; it could stop skipping a -byte early, which could be in the middle of a UTF-8 character. -[perl #130495]. - -=item * - -F<perldb> now ignores F</dev/tty> on non-Unix systems. [perl #113960]; - -=item * - -Fix assertion failure for C<{}-E<gt>$x> when C<$x> isn't defined. [perl #130496]. - -=item * - -DragonFly BSD now has support for setproctitle(). [perl #130068]. - -=item * - -Fix an assertion error which could be triggered when lookahead string -in patterns exceeded a minimum length. [perl #130522]. - -=item * - -Only warn once per literal about a misplaced C<_>. [perl #70878]. - -=item * - -Ensure range-start is set after error in C<tr///>. [perl #129342]. - -=item * - -Don't read past start of string for unmatched backref; otherwise, -we may have heap buffer overflow. [perl #129377]. - -=item * - -Properly recognize mathematical digit ranges starting at U+1D7E. -C<use re 'strict'> is supposed to warn if you use a range whose start -and end digit aren't from the same group of 10. It didn't do that -for five groups of mathematical digits starting at U+1D7E. - -=item * - -A sub containing a "forward" declaration with the same name (e.g., -C<sub c { sub c; }>) could sometimes crash or loop infinitely. [perl -#129090] - -=item * - -A crash in executing a regex with a floating UTF-8 substring against a -target string that also used UTF-8 has been fixed. [perl #129350] - -=item * - -Previously, a shebang line like C<#!perl -i u> could be erroneously -interpreted as requesting the C<-u> option. This has been fixed. [perl -#129336] - -=item * - -The regex engine was previously producing incorrect results in some rare -situations when backtracking past a trie that matches only one thing; this -showed up as capture buffers (C<$1>, C<$2>, etc) erroneously containing data -from regex execution paths that weren't actually executed for the final -match. [perl #129897] - -=item * - -Certain regexes making use of the experimental C<regex_sets> feature could -trigger an assertion failure. This has been fixed. [perl #129322] - -=item * - -Invalid assignments to a reference constructor (e.g., C<\eval=time>) could -sometimes crash in addition to giving a syntax error. [perl #125679] - -=item * - -The parser could sometimes crash if a bareword came after C<evalbytes>. -[perl #129196] - -=item * - -Autoloading via a method call would warn erroneously ("Use of inherited -AUTOLOAD for non-method") if there was a stub present in the package into -which the invocant had been blessed. The warning is no longer emitted in -such circumstances. [perl #47047] - -=item * - -A sub containing with a "forward" declaration with the same name (e.g., -C<sub c { sub c; }>) could sometimes crash or loop infinitely. [perl -#129090] - -=item * - -The use of C<splice> on arrays with nonexistent elements could cause other -operators to crash. [perl #129164] - -=item * - -Fixed case where C<re_untuit_start> will overshoot the length of a utf8 -string. [perl #129012] - -=item * - -Handle C<CXt_SUBST> better in C<Perl_deb_stack_all>, previously it wasn't -checking that the I<current> C<cx> is the right type, and instead was always -checking the base C<cx> (effectively a noop). [perl #129029] - -=item * - -Fixed two possible use-after-free bugs in C<Perl_yylex>. C<Perl_yylex> -maintains up to two pointers into the parser buffer, one of which can -become stale under the right conditions. [perl #129069] - -=item * - -Fixed a crash with C<s///l> where it thought it was dealing with UTF-8 -when it wasn't. [perl #129038] - -=item * - -Fixed place where regex was not setting the syntax error correctly. -[perl #129122] - -=item * - -The C<&.> operator (and the C<&> operator, when it treats its arguments as -strings) were failing to append a trailing null byte if at least one string -was marked as utf8 internally. Many code paths (system calls, regexp -compilation) still expect there to be a null byte in the string buffer -just past the end of the logical string. An assertion failure was the -result. [perl #129287] - -=item * - -Check C<pack_sockaddr_un()>'s return value because C<pack_sockaddr_un()> -silently truncates the supplied path if it won't fit into the C<sun_path> -member of C<sockaddr_un>. This may change in the future, but for now -check the path in theC<sockaddr> matches the desired path, and skip if -it doesn't. [perl #128095] - -=item * - -Make sure C<PL_oldoldbufptr> is preserved in C<scan_heredoc()>. In some -cases this is used in building error messages. [perl #128988] - -=item * - -Check for null PL_curcop in IN_LC() [perl #129106] - -=item * - -Fixed the parser error handling for an 'C<:attr(foo>' that does not have -an ending 'C<)>'. - -=item * - -Fix C<Perl_delimcpy()> to handle a backslash as last char, this -actually fixed two bugs, [perl #129064] and [perl #129176]. - -=item * - -[perl #129267] rework gv_fetchmethod_pvn_flags separator parsing to -prevent possible string overrun with invalid len in gv.c - -=item * - -Problems with in-place array sorts: code like C<@a = sort { ... } @a>, -where the source and destination of the sort are the same plain array, are -optimised to do less copying around. Two side-effects of this optimisation -were that the contents of C<@a> as visible to to sort routine were -partially sorted, and under some circumstances accessing C<@a> during the -sort could crash the interpreter. Both these issues have been fixed, and -Sort functions see the original value of C<@a>. - -=item * - -Non-ASCII string delimiters are now reported correctly in error messages -for unterminated strings. [perl #128701] - -=item * - -C<pack("p", ...)> used to emit its warning ("Attempt to pack pointer to -temporary value") erroneously in some cases, but has been fixed. - -=item * - -C<@DB::args> is now exempt from "used once" warnings. The warnings only -occurred under B<-w>, because F<warnings.pm> itself uses C<@DB::args> -multiple times. - -=item * - -The use of built-in arrays or hash slices in a double-quoted string no -longer issues a warning ("Possible unintended interpolation...") if the -variable has not been mentioned before. This affected code like -C<qq|@DB::args|> and C<qq|@SIG{'CHLD', 'HUP'}|>. (The special variables -C<@-> and C<@+> were already exempt from the warning.) - -=item * - -C<gethostent> and similar functions now perform a null check internally, to -avoid crashing with torsocks. This was a regression from 5.22. [perl -#128740] - -=item * - -C<defined *{'!'}>, C<defined *{'['}>, and C<defined *{'-'}> no longer leak -memory if the typeglob in question has never been accessed before. - -=item * - -In 5.25.4 fchown() was changed not to accept negative one as an argument -because in some platforms that is an error. However, in some other platforms -that is an acceptable argument. This change has been reverted [perl #128967]. - -=item * - -Mentioning the same constant twice in a row (which is a syntax error) no -longer fails an assertion under debugging builds. This was a regression -from 5.20. [perl #126482] - -=item * - -Many issues relating to C<printf "%a"> of hexadecimal floating point -were fixed. In addition, the "subnormals" (formerly known as "denormals") -floating point anumbers are now supported both with the plain IEEE 754 -floating point numbers (64-bit or 128-bit) and the x86 80-bit -"extended precision". Note that subnormal hexadecimal floating -point literals will give a warning about "exponent underflow". -[perl #128843, #128889, #128890, #128893, #128909, #128919] - -=item * - -A regression in 5.24 with C<tr/\N{U+...}/foo/> when the code point was between -128 and 255 has been fixed. [perl #128734]. - -=item * - -A regression from the previous development release, 5.23.3, where -compiling a regular expression could crash the interpreter has been -fixed. [perl #128686]. - -=item * - -Use of a string delimiter whose code point is above 2**31 now works -correctly on platforms that allow this. Previously, certain characters, -due to truncation, would be confused with other delimiter characters -with special meaning (such as C<?> in C<m?...?>), resulting -in inconsistent behaviour. Note that this is non-portable, -and is based on Perl's extension to UTF-8, and is probably not -displayable nor enterable by any editor. [perl #128738] - -=item * - -C<@{x> followed by a newline where C<x> represents a control or non-ASCII -character no longer produces a garbled syntax error message or a crash. -[perl #128951] - -=item * - -An assertion failure with C<%: = 0> has been fixed. -L<[perl #128238]|https://rt.perl.org/Public/Bug/Display.html?id=128238> - -=item * - -In Perl 5.18, the parsing of C<"$foo::$bar"> was accidentally changed, such -that it would be treated as C<$foo."::".$bar>. The previous behavior, which -was to parse it as C<$foo:: . $bar>, has been restored. -L<[perl #128478]|https://rt.perl.org/Public/Bug/Display.html?id=128478> - -=item * - -Since Perl 5.20, line numbers have been off by one when perl is invoked with -the B<-x> switch. This has been fixed. -L<[perl #128508]|https://rt.perl.org/Public/Bug/Display.html?id=128508> - -=item * - -Vivifying a subroutine stub in a deleted stash (e.g., C<delete $My::{"Foo::"}; -\&My::Foo::foo>) no longer crashes. It had begun crashing in Perl 5.18. -L<[perl #128532]|https://rt.perl.org/Public/Bug/Display.html?id=128532> - -=item * - -Some obscure cases of subroutines and file handles being freed at the same time -could result in crashes, but have been fixed. The crash was introduced in Perl -5.22. -L<[perl #128597]|https://rt.perl.org/Public/Bug/Display.html?id=128597> - -=item * - -Code that looks for a variable name associated with an uninitialized value -could cause an assertion in cases where magic is involved, such as -C<$ISA[0][0]>. This has now been fixed. -L<[perl #128253]|https://rt.perl.org/Public/Bug/Display.html?id=128253> - -=item * - -A crash caused by code generating the warning "Subroutine STASH::NAME -redefined" in cases such as C<sub P::f{} undef *P::; *P::f =sub{};> has been -fixed. In these cases, where the STASH is missing, the warning will now appear -as "Subroutine NAME redefined". -L<[perl #128257]|https://rt.perl.org/Public/Bug/Display.html?id=128257> - -=item * - -Fixed an assertion triggered by some code that handles deprecated behavior in -formats, e.g. in cases like this: - - format STDOUT = - @ - 0"$x" - -L<[perl #128255]|https://rt.perl.org/Public/Bug/Display.html?id=128255> - -=item * - -A possible divide by zero in string transformation code on Windows has been -avoided, fixing a crash when collating an empty string. -L<[perl #128618]|https://rt.perl.org/Public/Bug/Display.html?id=128618> - -=item * - -Some regular expression parsing glitches could lead to assertion failures with -regular expressions such as C</(?<=/> and C</(?<!/>. This has now been fixed. -L<[perl #128170]|https://rt.perl.org/Public/Bug/Display.html?id=128170> - -=item * - -C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly -warn when syntax warnings are enabled. [perl #127333] - -=item * - -socket() now leaves the error code returned by the system in C<$!> on -failure. [perl #128316] - -=item * - -Assignment variants of any bitwise ops under the C<bitwise> feature would -crash if the left-hand side was an array or hash. [perl #128204] - -=item * - -C<require> followed by a single colon (as in C<foo() ? require : ...> is -now parsed correctly as C<require> with implicit $_, rather than -C<require "">. [perl #128307] - -=item * - -Scalar C<keys %hash> can now be assigned to consistently in all scalar -lvalue contexts. Previously it worked for some contexts but not others. - -=item * - -List assignment to C<vec> or C<substr> with an array or hash for its first -argument used to result in crashes or "Can't coerce" error messages at run -time, unlike scalar assignment, which would give an error at compile time. -List assignment now gives a compile-time error, too. [perl #128260] - -=item * - -Expressions containing an C<&&> or C<||> operator (or their synonyms C<and> -and C<or>) were being compiled incorrectly in some cases. If the left-hand -side consisted of either a negated bareword constant or a negated C<do {}> -block containing a constant expression, and the right-hand side consisted of -a negated non-foldable expression, one of the negations was effectively -ignored. The same was true of C<if> and C<unless> statement modifiers, -though with the left-hand and right-hand sides swapped. This long-standing -bug has now been fixed. [perl #127952] - -=item * - -C<reset> with an argument no longer crashes when encountering stash entries -other than globs. [perl #128106] - -=item * - -Assignment of hashes to, and deletion of, typeglobs named C<*::::::> no -longer causes crashes. [perl #128086] - -=item * - -Handle SvIMMORTALs in LHS of list assign. [perl #129991] - -=item * - -[perl #130010] a5540cf breaks texinfo - -This involved user-defined Unicode properties. - -=item * - -Fix error message for unclosed C<\N{> in regcomp. - -An unclosed C<\N{> could give the wrong error message -C<"\N{NAME} must be resolved by the lexer">. - -=item * - -List assignment in list context where the LHS contained aggregates and -where there were not enough RHS elements, used to skip scalar lvalues. -Previously, C<(($a,$b,@c,$d) = (1))> in list context returned C<($a)>; now -it returns C<($a,$b,$d)>. C<(($a,$b,$c) = (1))> is unchanged: it still -returns C<($a,$b,$c)>. This can be seen in the following: - - sub inc { $_++ for @_ } - inc(($a,$b,@c,$d) = (10)) - -Formerly, the values of C<($a,$b,$d)> would be left as C<(11,undef,undef)>; -now they are C<(11,1,1)>. - -=item * - -[perl 129903] - -The basic problem is that code like this: /(?{ s!!! })/ can trigger infinite -recursion on the C stack (not the normal perl stack) when the last successful -pattern in scope is itself. Since the C stack overflows this manifests as an -untrappable error/segfault, which then kills perl. - -We avoid the segfault by simply forbidding the use of the empty pattern when it -would resolve to the currently executing pattern. - -=item * - -[perl 128997] Avoid reading beyond the end of the line buffer when there's a -short UTF-8 character at the end. - -=item * - -[perl 129950] fix firstchar bitmap under utf8 with prefix optimisation. - -=item * - -[perl 129954] Carp/t/arg_string.t: be liberal in f/p formats. - -=item * - -[perl 129928] make do "a\0b" fail silently instead of throwing. - -=item * - -[perl 129130] make chdir allocate the stack it needs. - -=back - -=head1 Known Problems - -=over 4 - -=item * - -Some modules have been broken by the L<context stack rework|/Internal Changes>. -These modules were relying on non-guaranteed implementation details in perl. -Their maintainers have been informed, and should contact perl5-porters for -advice if needed. Below is a subset of these modules: - -=over 4 - -=item * L<Algorithm::Permute> - -=item * L<Coro> - -L<Coro> and perl v5.22.0 were already incompatible due to a change in the perl, -and the reworking on the perl context stack creates a further incompatibility. -perl5-porters has L<discussed the issue on the mailing -list|http://www.nntp.perl.org/group/perl.perl5.porters/2016/05/msg236174.html>. - -=item * L<Data::Alias> - -=item * L<RPerl> - -=item * L<Scope::Upper> - -=item * L<TryCatch> - -=back - -=item * - -The module L<lexical::underscore> no longer works on perl v5.24.0, because perl -no longer has a lexical C<$_>! - -=item * - -C<mod_perl> has been patched for compatibility for v5.22.0 and later but no -release has been made. The relevant patch (and other changes) can be found in -their source code repository, L<mirrored at -GitHub|https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb63375da6e>. - -=back - -=head1 Errata From Previous Releases - -=over 4 - -=item * - -Parsing bad POSIX charclasses no longer leaks memory. This was fixed in Perl -5.25.2 -L<[perl #128313]|https://rt.perl.org/Public/Bug/Display.html?id=128313> - -=item * - -Fixed issues with recursive regexes. The behavior was fixed in Perl 5.24.0. -L<[perl #126182]|https://rt.perl.org/Public/Bug/Display.html?id=126182> - -=back - -=head1 Obituary - -Jon Portnoy (AVENJ), a prolific Perl author and admired Gentoo community -member, has passed away on August 10, 2016. He will be remembered and -missed by all those with which he came in contact and enriched with his -intellect, wit, and spirit. - -It is with great sadness we also note Kip Hampton's passing.. Probably -best known as the author of the Perl & XML column on XML.com, he was a -core contributor to AxKit, an XML server platform that became an Apache -Foundation project. He was a frequent speaker in the early days at -OSCON, and most recently at YAPC::NA in Madison. He was frequently on -irc.perl.org as `ubu`, generally in the #axkit-dahut community, the -group responsible for YAPC::NA Asheville in 2011. - -Kip and his constant contributions to the community will be greatly -missed. - -=head1 Acknowledgements - -XXX Generate this with: - - perl Porting/acknowledgements.pl v5.24.0..HEAD - -=head1 Reporting Bugs - -If you find what you think is a bug, you might check the articles recently -posted to the comp.lang.perl.misc newsgroup and the perl bug database at -L<https://rt.perl.org/> . There may also be information at -L<http://www.perl.org/> , the Perl Home Page. - -If you believe you have an unreported bug, please run the L<perlbug> program -included with your release. Be sure to trim your bug down to a tiny but -sufficient test case. Your bug report, along with the output of C<perl -V>, -will be sent off to perlbug@perl.org to be analysed by the Perl porting team. - -If the bug you are reporting has security implications which make it -inappropriate to send to a publicly archived mailing list, then see -L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> -for details of how to report the issue. - -=head1 SEE ALSO - -The F<Changes> file for an explanation of how to view exhaustive details on -what changed. - -The F<INSTALL> file for how to build Perl. - -The F<README> file for general stuff. - -The F<Artistic> and F<Copying> files for copyright information. - -=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index d0c5bf6af5..e279710383 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,179 +2,924 @@ =head1 NAME -[ this is a template for a new perldelta file. Any text flagged as XXX needs -to be processed before release. ] - -perldelta - what is new for perl v5.25.13 +perldelta - what is new for perl v5.26.0 =head1 DESCRIPTION -This document describes differences between the 5.25.12 release and the 5.25.13 -release. +This document describes the differences between the 5.24.0 release and the +5.26.0 release. -If you are upgrading from an earlier release such as 5.25.11, first read -L<perl52512delta>, which describes differences between 5.25.11 and 5.25.12. +=head1 Core Enhancements -=head1 Notice +=head2 New regular expression modifier C</xx> -XXX Any important notices here +Specifying two C<x> characters to modify a regular expression pattern +does everything that a single one does, but additionally TAB and SPACE +characters within a bracketed character class are generally ignored and +can be added to improve readability, like +S<C</[ ^ A-Z d-f p-x ]/xx>>. Details are at +L<perlre/E<sol>x and E<sol>xx>. -=head1 Core Enhancements +=head2 New Hash Function For 64-bit Builds + +We have switched to a hybrid hash function to better balance +performance for short and long keys. + +For short keys, 16 bytes and under, we use an optimised variant of +One At A Time Hard, and for longer keys we use Siphash 1-3. For very +long keys this is a big improvement in performance. For shorter keys +there is a modest improvement. + +=head2 Indented Here-documents + +This adds a new modifier '~' to here-docs that tells the parser +that it should look for /^\s*$DELIM\n/ as the closing delimiter. + +These syntaxes are all supported: + + <<~EOF; + <<~\EOF; + <<~'EOF'; + <<~"EOF"; + <<~`EOF`; + <<~ 'EOF'; + <<~ "EOF"; + <<~ `EOF`; + +The '~' modifier will strip, from each line in the here-doc, the +same whitespace that appears before the delimiter. + +Newlines will be copied as is, and lines that don't include the +proper beginning whitespace will cause perl to croak. + +For example: + + if (1) { + print <<~EOF; + Hello there + EOF + } + +prints "Hello there\n" with no leading whitespace. + +=head2 '.' and @INC + +Perl now provides a way to build perl without C<.> in @INC by default. If you +want this feature, you can build with -Ddefault_inc_excludes_dot + +Because the testing / make process for perl modules do not function well with +C<.> missing from @INC, Perl now supports the environment variable +PERL_USE_UNSAFE_INC=1 which makes Perl behave as it previously did, returning +C<.> to @INC in all child processes. + +WARNING: C<PERL_USE_UNSAFE_INC> has been provided during the perl 5.25 +development cycle and is not guaranteed to function in perl 5.26. + +=head2 create a safer utf8_hop() called utf8_hop_safe() + +Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or after +the end of the supplied buffer. + +=head2 @{^CAPTURE}, %{^CAPTURE}, and %{^CAPTURE_ALL} + +C<@{^CAPTURE}> exposes the capture buffers of the last match as an +array. So C<$1> is C<${^CAPTURE}[0]>. + +C<%{^CAPTURE}> is the equivalent to C<%+> (ie named captures) + +C<%{^CAPTURE_ALL}> is the equivalent to C<%-> (ie all named captures). + +=head2 Unicode 9.0 is now supported + +A list of changes is at L<http://www.unicode.org/versions/Unicode9.0.0/>. +Modules that are shipped with core Perl but not maintained by p5p do not +necessarily support Unicode 9.0. L<Unicode::Normalize> does work on 9.0. + +=head2 Use of C<\p{I<script>}> uses the improved Script_Extensions property + +Unicode 6.0 introduced an improved form of the Script (C<sc>) property, and +called it Script_Extensions (C<scx>). As of now, Perl uses this improved +version when a property is specified as just C<\p{I<script>}>. The meaning of +compound forms, like C<\p{sc=I<script>}> are unchanged. This should make +programs be more accurate when determining if a character is used in a given +script, but there is a slight chance of breakage for programs that very +specifically needed the old behavior. See L<perlunicode/Scripts>. + +=head2 Declaring a reference to a variable + +As an experimental feature, Perl now allows the referencing operator to come +after L<C<my()>|perlfunc/my>, L<C<state()>|perlfunc/state>, +L<C<our()>|perlfunc/our>, or L<C<local()>|perlfunc/local>. This syntax must +be enabled with C<use feature 'declared_refs'>. It is experimental, and will +warn by default unless C<no warnings 'experimental::refaliasing'> is in effect. +It is intended mainly for use in assignments to references. For example: + + use experimental 'refaliasing', 'declared_refs'; + my \$a = \$b; + +See L<perlref/Assigning to References> for slightly more detail. + +=head2 Perl can now do default collation in UTF-8 locales on platforms +that support it + +Some platforms natively do a reasonable job of collating and sorting in +UTF-8 locales. Perl now works with those. For portability and full +control, L<Unicode::Collate> is still recommended, but now you may +not need to do anything special to get good-enough results, depending on +your application. See +L<perllocale/Category C<LC_COLLATE>: Collation: Text Comparisons and Sorting>. + +=head2 Better locale collation of strings containing embedded C<NUL> +characters + +In locales that have multi-level character weights, these are now +ignored at the higher priority ones. There are still some gotchas in +some strings, though. See +L<perllocale/Collation of strings containing embedded C<NUL> characters>. + +=head2 Lexical subroutines are no longer experimental + +Using the C<lexical_subs> feature no longer emits a warning. Existing +code that disables the C<experimental::lexical_subs> warning category +that the feature previously used will continue to work. The +C<lexical_subs> feature has no effect; all Perl code can use lexical +subroutines, regardless of what feature declarations are in scope. -XXX New core language features go here. Summarize user-visible core language -enhancements. Particularly prominent performance optimisations could go -here, but most should go in the L</Performance Enhancements> section. +=head2 C<CORE> subroutines for hash and array functions callable via +reference -[ List each enhancement as a =head2 entry ] +The hash and array functions in the C<CORE> namespace--C<keys>, C<each>, +C<values>, C<push>, C<pop>, C<shift>, C<unshift> and C<splice>--, can now +be called with ampersand syntax (C<&CORE::keys(\%hash>) and via reference +(C<< my $k = \&CORE::keys; $k->(\%hash) >>). Previously they could only be +used when inlined. + +=head2 POSIX::tmpnam() has been removed + +The fundamentally unsafe C<tmpnam()> interface was deprecated in +Perl 5.22.0 and has now been removed. In its place you can use +for example the L<File::Temp> interfaces. + +=head2 require ::Foo::Bar is now illegal. + +Formerly, C<require ::Foo::Bar> would try to read F</Foo/Bar.pm>. Now any +bareword require which starts with a double colon dies instead. + +=head2 Unescaped literal C<"{"> characters in regular expression +patterns are no longer permissible + +You have to now say something like C<"\{"> or C<"[{]"> to specify to +match a LEFT CURLY BRACKET. This will allow future extensions to the +language. This restriction is not enforced, nor are there current plans +to enforce it, if the C<"{"> is the first character in the pattern. + +These have been deprecated since v5.16, with a deprecation message +displayed starting in v5.22. + +=head2 Literal control character variable names are no longer permissible + +A variable name may no longer contain a literal control character under +any circumstances. These previously were allowed in single-character +names on ASCII platforms, but have been deprecated there since Perl +v5.20. This affects things like C<$I<\cT>>, where I<\cT> is a literal +control (such as a C<NAK> or C<NEGATIVE ACKNOWLEDGE> character) in the +source code. + +=head2 C<NBSP> is no longer permissible in C<\N{...}> + +The name of a character may no longer contain non-breaking spaces. It +has been deprecated to do so since Perl v5.22. =head1 Security -XXX Any security-related notices go here. In particular, any security -vulnerabilities closed should be noted here rather than in the -L</Selected Bug Fixes> section. +=head2 Remove current dir (C<.>) from C<@INC> + +For security reasons, C<@INC> no longer contains the default directory +(C<.>). + +=head2 "Escaped" colons and relative paths in PATH + +On Unix systems, Perl treats any relative paths in the PATH environment +variable as tainted when starting a new process. Previously, it was +allowing a backslash to escape a colon (unlike the OS), consequently +allowing relative paths to be considered safe if the PATH was set to +something like C</\:.>. The check has been fixed to treat C<.> as tainted +in that example. + +=head2 C<-Di> switch is now required for PerlIO debugging output -[ List each security issue as a =head2 entry ] +Previously PerlIO debugging output would be sent to the file specified +by the C<PERLIO_DEBUG> environment variable if perl wasn't running +setuid and the C<-T> or C<-t> switches hadn't been parsed yet. + +If perl performed output at a point where it hadn't yet parsed its +switches this could result in perl creating or overwriting the file +named by C<PERLIO_DEBUG> even when the C<-T> switch had been supplied. + +Perl now requires the C<-Di> switch to produce PerlIO debugging +output. By default this is written to C<stderr>, but can optionally +be redirected to a file by setting the C<PERLIO_DEBUG> environment +variable. + +If perl is running setuid or the C<-T> switch has supplied +C<PERLIO_DEBUG> is ignored and the debugging output is sent to +C<stderr> as for any other C<-D> switch. =head1 Incompatible Changes -XXX For a release on a stable branch, this section aspires to be: +=head2 C<${^ENCODING}> has been removed + +Consequently, the L<encoding> pragma's default mode is no longer supported. If +you still need to write your source code in encodings other than UTF-8, use a +source filter such as L<Filter::Encoding> on CPAN or L<encoding>'s C<Filter> +option. - There are no changes intentionally incompatible with 5.XXX.XXX - If any exist, they are bugs, and we request that you submit a - report. See L</Reporting Bugs> below. +=head2 C<scalar(%hash)> return signature changed -[ List each incompatible change as a =head2 entry ] +The value returned for C<scalar(%hash)> will no longer show information about +the buckets allocated in the hash. It will simply return the count of used +keys. It is thus equivalent to C<0+keys(%hash)>. + +A form of backwards compatibility is provided via C<Hash::Util::bucket_ratio()> +which provides the same behavior as C<scalar(%hash)> provided prior to Perl +5.25. + +=head2 C<keys> returned from an lvalue subroutine + +C<keys> returned from an lvalue subroutine can no longer be assigned +to in list context. + + sub foo : lvalue { keys(%INC) } + (foo) = 3; # death + sub bar : lvalue { keys(@_) } + (bar) = 3; # also an error + +This makes the lvalue sub case consistent with C<(keys %hash) = ...> and +C<(keys @_) = ...>, which are also errors. [perl #128187] =head1 Deprecations -XXX Any deprecated features, syntax, modules etc. should be listed here. +=head2 String delimiters that aren't stand-alone graphemes are now deprecated -=head2 Module removals +In order for Perl to eventually allow string delimiters to be Unicode +grapheme clusters (which look like a single character, but may be +a sequence of several ones), we have to stop allowing a single char +delimiter that isn't a grapheme by itself. These are unlikely to exist +in actual code, as they would typically display as attached to the +character in front of them. -XXX Remove this section if inapplicable. +=head1 Performance Enhancements -The following modules will be removed from the core distribution in a -future release, and will at that time need to be installed from CPAN. -Distributions on CPAN which require these modules will need to list them as -prerequisites. +=over 4 -The core versions of these modules will now issue C<"deprecated">-category -warnings to alert you to this fact. To silence these deprecation warnings, -install the modules in question from CPAN. +=item * -Note that these are (with rare exceptions) fine modules that you are encouraged -to continue to use. Their disinclusion from core primarily hinges on their -necessity to bootstrapping a fully functional, CPAN-capable Perl installation, -not usually on concerns over their design. +A hash in boolean context is now sometimes faster, e.g. -=over + if (!%h) { ... } + +This was already special-cased, but some cases were missed, and even the +ones which weren't have been improved. + +=item * + +Several other ops may now also be faster in boolean context. + +=item * New Faster Hash Function on 64 bit builds + +We use a different hash function for short and long keys. This should +improve performance and security, especially for long keys. + +=item * readline is faster + +Reading from a file line-by-line with C<readline()> or C<< E<lt>E<gt> >> should +now typically be faster due to a better implementation of the code that +searches for the next newline character. + +=item * + +Reduce cost of SvVALID(). + +=item * + +C<$ref1 = $ref2> has been optimized. + +=item * + +Array and hash assignment are now faster, e.g. + + (..., @a) = (...); + (..., %h) = (...); + +especially when the RHS is empty. + +=item * + +Reduce the number of odd special cases for the C<SvSCREAM> flag. + +=item * + +Avoid sv_catpvn() in do_vop() when unneeded. + +=item * + +Enhancements in Regex concat COW implementation. -=item XXX +=item * + +Speed up C<AV> and C<HV> clearing/undeffing. + +=item * + +Better optimise array and hash assignment + +=item * + +Converting a single-digit string to a number is now substantially faster. + +=item * -XXX Note that deprecated modules should be listed here even if they are listed -as an updated module in the L</Modules and Pragmata> section. +The internal op implementing the C<split> builtin has been simplified and +sped up. Firstly, it no longer requires a subsidiary internal C<pushre> op +to do its work. Secondly, code of the form C<my @x = split(...)> is now +optimised in the same way as C<@x = split(...)>, and is therefore a few +percent faster. + +=item * + +The rather slow implementation for the experimental subroutine signatures +feature has been made much faster; it is now comparable in speed with the +old-style C<my ($a, $b, @c) = @_>. + +=item * + +Bareword constant strings are now permitted to take part in constant +folding. They were originally exempted from constant folding in August 1999, +during the development of Perl 5.6, to ensure that C<use strict "subs"> +would still apply to bareword constants. That has now been accomplished a +different way, so barewords, like other constants, now gain the performance +benefits of constant folding. + +This also means that void-context warnings on constant expressions of +barewords now report the folded constant operand, rather than the operation; +this matches the behaviour for non-bareword constants. =back -[ List each other deprecation as a =head2 entry ] +=head1 Modules and Pragmata -=head1 Performance Enhancements +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L<attributes> has been upgraded from version 0.28 to 0.29. + +The deprecation message for the C<:unique> and C<:locked> attributes +now mention they will disappear in Perl 5.28. + +=item * + +L<B::Concise> has been upgraded from version 0.998 to 0.999. + +Its output is now more descriptive for C<op_private> flags. + +=item * + +L<B::Xref> has been upgraded from version 1.05 to 1.06. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<Data::Dumper> has been upgraded from version 2.162 to 2.167. + +The XS implementation now supports Deparse. -XXX Changes which enhance performance without changing behaviour go here. -There may well be none in a stable release. +This fixes a stack management bug. [perl #130487]. + +=item * + +L<Devel::SelfStubber> has been upgraded from version 1.05 to 1.06. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<diagnostics> has been upgraded from version 1.35 to 1.36. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<encoding> has been upgraded from version 2.17 to 2.17_01. + +This module's default mode is no longer supported as of Perl 5.25.3. It now +dies when imported, unless the C<Filter> option is being used. + +=item * + +L<encoding::warnings> has been upgraded from version 0.12 to 0.13. + +This module is no longer supported as of Perl 5.25.3. It emits a warning to +that effect and then does nothing. + +=item * -[ List each enhancement as a =item entry ] +L<Errno> has been upgraded from version 1.26 to 1.27. + +Document that using C<%!> loads Errno for you. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<ExtUtils::Embed> has been upgraded from version 1.33 to 1.34. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<feature> has been upgraded from version 1.45 to 1.46. + +Fixes the Unicode Bug in the range operator. + +=item * + +L<File::Glob> has been upgraded from version 1.27 to 1.28. + +Issue a deprecation message for C<File::Glob::glob()>. + +=item * + +L<Filter::Simple> has been upgraded from version 0.92 to 0.93. + +It no longer treats C<no MyFilter> immediately following C<use MyFilter> as +end-of-file. [perl #107726] + +=item * + +L<HTTP::Tiny> has been upgraded from version 0.064 to 0.070. + +Internal 599-series errors now include the redirect history. + +=item * + +L<I18N::LangTags> has been upgraded from version 0.41 to 0.42. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<lib> has been upgraded from version 0.63 to 0.64. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<Math::BigInt> has been upgraded from version 1.999726(_01) to 1.999727. + +There have also been some core customizations. + +=item * + +L<Net::Ping> has been upgraded from version 2.44 to 2.55. + +IPv6 addresses and C<AF_INET6> sockets are now supported, along with several +other enhancements. + +Remove sudo from 500_ping_icmp.t. + +Avoid stderr noise in tests + +Check for echo in new Net::Ping tests. + +=item * + +L<OS2::Process> has been upgraded from version 1.11 to 1.12. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<overload> has been upgraded from version 1.26 to 1.28. + +Its compilation speed has been improved slightly. + +=item * + +L<perl5db.pl> has been upgraded from version 1.50 to 1.51. + +Ignore F</dev/tty> on non-Unix systems. [perl #113960] + +=item * + +L<POSIX> has been upgraded from version 1.65 to 1.69. This remedies several +defects in making its symbols exportable. [perl #127821] +The C<POSIX::tmpnam()> interface has been removed, +see L</"POSIX::tmpnam() has been removed">. +Trying to import POSIX subs that have no real implementations +(like C<POSIX::atend()>) now fails at import time, instead of +waiting until runtime. + +=item * + +L<re> has been upgraded from version 0.33 to 0.34 + +This adds support for the new L<C<E<47>xx>|perlre/E<sol>x and E<sol>xx> +regular expression pattern modifier, and a change to the L<S<C<use re +'strict'>>|re/'strict' mode> experimental feature. When S<C<re +'strict'>> is enabled, a warning now will be generated for all +unescaped uses of the two characters C<}> and C<]> in regular +expression patterns (outside bracketed character classes) that are taken +literally. This brings them more in line with the C<)> character which +is always a metacharacter unless escaped. Being a metacharacter only +sometimes, depending on action at a distance, can lead to silently +having the pattern mean something quite different than was intended, +which the S<C<re 'strict'>> mode is intended to minimize. + +=item * + +L<Storable> has been upgraded from version 2.59 to 2.61. + +Fixes [perl #130098]. + +=item * + +L<Term::ReadLine> has been upgraded from version 1.15 to 1.16. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<Test> has been upgraded from version 1.29 to 1.30. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<Thread::Semaphore> has been upgraded from 2.12 to 2.13. + +Added the C<down_timed> method. + +=item * + +L<threads> has been upgraded from version 2.07 to 2.12. + +Compatibility with 5.8 has been restored. + +Fixes [perl #130469]. + +=item * + +L<threads::shared> has been upgraded from version 1.52 to 1.54. + +This fixes [cpan #119529], [perl #130457] + +=item * + +L<Time::HiRes> has been upgraded from version 1.9739 to 1.9740_03. + +It now builds on systems with C++11 compilers (such as G++ 6 and Clang++ +3.9). + +Now uses C<clockid_t>. + +=item * + +L<Unicode::UCD> has been upgraded from version 0.67 to 0.68. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<VMS::DCLsym> has been upgraded from version 1.07 to 1.08. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=item * + +L<XSLoader> has been upgraded from version 0.21 to 0.26. + +Fixed a security hole in which binary files could be loaded from a path +outside of L<C<@INC>|perlvar/@INC>. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. [perl #130122] + +=back + +=head1 Documentation + +=head2 New Documentation + +=head3 L<perldeprecation> + +This file documents all upcoming deprecations, and some of the deprecations +which already have been removed. The purpose of this documentation is +two-fold: document what will disappear, and by which version, and serve +as a guide for people dealing with code which has features that no longer +work after an upgrade of their perl. + +=head2 Changes to Existing Documentation + +=head3 L<perlcall> =over 4 =item * -XXX +Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30 + +This was changed to drop a leading C<v> in C<v5.30>, so it uses the same +style as other deprecation messages. + +=item * + +"\c%c" is more clearly written simply as "%s". + +It was decided to undeprecate the use of C<\c%c>, see L<http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html> + +=item * + +Removed redundant C<dSP> from an example. =back -=head1 Modules and Pragmata +=head3 L<perlcommunity> -XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/> -go here. If Module::CoreList is updated, generate an initial draft of the -following sections using F<Porting/corelist-perldelta.pl>. A paragraph summary -for important changes should then be added by hand. In an ideal world, -dual-life modules would have a F<Changes> file that could be cribbed. +=over 4 -[ Within each section, list entries as a =item entry ] +=item * -=head2 New Modules and Pragmata +All references to Usenet have been removed. + +=back + +=head3 L<perldata> =over 4 =item * -XXX +Updated documentation of C<scalar(%hash)>. See L</scalar(%hash) return +signature changed> above. + +=item * + +Use of single character variables, with the variable name a non printable +character in the range C<\x80>-C<\xFF> is no longer allowed. Update the docs to +reflect this. =back -=head2 Updated Modules and Pragmata +=head3 L<perldelta> =over 4 =item * -L<XXX> has been upgraded from version A.xx to B.yy. +All references to Usenet have been removed. =back -=head2 Removed Modules and Pragmata +=head3 L<perldiag> =over 4 =item * -XXX +Deprecations are to be marked with a D. +C<"%s() is deprecated on :utf8 handles"> use a deprecation message, and as +such, such be marked C<"(D deprecated)"> and not C<"(W deprecated)">. =back -=head1 Documentation +=head3 L<perlexperiment> -XXX Changes to files in F<pod/> go here. Consider grouping entries by -file and be sure to link to the appropriate page, e.g. L<perlfunc>. +=over 4 -=head2 New Documentation +=item * -XXX Changes which create B<new> files in F<pod/> go here. +Documented new feature: See L</Declaring a reference to a variable> above. -=head3 L<XXX> +=back -XXX Description of the purpose of the new file here +=head3 L<perlfunc> -=head2 Changes to Existing Documentation +=over 4 + +=item * + +Defined on aggregates is no longer allowed. Perlfunc was still reporting it as +deprecated, and that it will be deleted in the future. + +=item * + +Clarified documentation of L<C<seek()>|perlfunc/seek>, +L<C<tell()>|perlfunc/tell> and L<C<sysseek()>|perlfunc/sysseek>. +L<[perl #128607]|https://rt.perl.org/Public/Bug/Display.html?id=128607> + +=item * + +Removed obsolete documentation of L<C<study()>|perlfunc/study>. + +=back + +=head3 L<perlguts> + +=over 4 + +=item * + +Add C<pTHX_> to magic method examples. -XXX Changes which significantly change existing files in F<pod/> go here. -However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics> -section. +=back -=head3 L<XXX> +=head3 L<perlhack> =over 4 =item * -XXX Description of the change here +Document Tab VS Space. =back -=head1 Diagnostics +=head3 L<perlinterp> -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L<perldiag>. +=over 4 -XXX New or changed warnings emitted by the core's C<C> code go here. Also -include any changes in L<perldiag> that reconcile it to the C<C> code. +=item * -=head2 New Diagnostics +L<perlinterp> has been expanded to give a more detailed example of how to +hunt around in the parser for how a given operator is handled. + +=back + +=head3 L<perllocale> + +=over 4 + +=item * + +Document C<NUL> collation handling. + +=item * + +Some locales aren't compatible with Perl. Note the potential bad +consequences of using them. + +=back + +=head3 L<perlmodinstall> + +=over 4 + +=item * + +All references to Usenet have been removed. + +=back + +=head3 L<perlmodlib> + +=over 4 + +=item * + +Updated the mirror list. + +=item * + +All references to Usenet have been removed. + +=back + +=head3 L<perlnewmod> + +=over 4 + +=item * + +All references to Usenet have been removed. + +=back + +=head3 L<perlobj> + +=over 4 + +=item * + +Added a section on calling methods using their fully qualified names. + +=item * + +Do not discourage manual @ISA. + +=back + +=head3 L<perlootut> + +=over 4 + +=item * + +Tidy the document. + +=item * + +Mention C<Moo> more. + +=back + +=head3 L<perlop> -XXX Newly added diagnostic messages go under here, separated into New Errors -and New Warnings +=over 4 + +=item * + +Clarify behavior single quote regexps. + +=back + +=head3 L<perlre> + +=over 4 + +=item * + +Several minor enhancements to the documentation. + +=back + +=head3 L<perlsec> + +=over 4 + +=item * + +Fixed link to Crosby paper on hash complexity attack. + +=back + +=head3 L<perlref> + +=over 4 + +=item * + +Documented new feature: See L</Declaring a reference to a variable> above. + +=back + +=head3 L<perltie> + +=over 4 + +=item * + +Updated documentation of C<scalar(%hash)>. See L</scalar(%hash) return +signature changed> above. + +=back + +=head3 L<perlunicode> + +=over 4 + +=item * + +Documented change to C<\p{I<script>}> to now use the improved Script_Extensions +property. See L</Use of \p{script} uses the improved Script_Extensions +property> above. + +=item * + +Updated the text to correspond with changes in Unicode UTS#18, concerning +regular expressions, and Perl compatibility with what it says. + +=back + +=head3 L<perlvar> + +=over 4 + +=item * + +Removed obsolete documentation of C<${^ENCODING}>. See L</${^ENCODING} has +been removed> above. + +=item * + +Document C<@ISA>. Was documented other places, not not in L<perlvar>. + +=back + +=head1 Diagnostics + +=head2 New Diagnostics =head3 New Errors @@ -182,7 +927,81 @@ and New Warnings =item * -XXX L<message|perldiag/"message"> +Since C<.> is now removed from C<@INC> by default, C<do> will now trigger +a warning recommending to fix the C<do> statement: + +L<do "%s" failed, '.' is no longer in @INC|perldiag/do "%s" failed, '.' is no longer in @INC; did you mean do ".E<sol>%s"?> + +=item * + +Using the empty pattern (which re-executes the last successfully-matched +pattern) inside a code block in another regex, as in C</(?{ s!!new! })/>, has +always previously yielded a segfault. It now produces an error: L<Use of the +empty pattern inside of a regex code block is forbidden|perldiag/"Use of the +empty pattern inside of a regex code block is forbidden">. + +=item * + +L<The experimental declared_refs feature is not enabled|perldiag/"The experimental declared_refs feature is not enabled"> + +(F) To declare references to variables, as in C<my \%x>, you must first enable +the feature: + + no warnings "experimental::declared_refs"; + use feature "declared_refs"; + +=item * + +L<Version control conflict marker|perldiag/"Version control conflict marker"> + +(F) The parser found a line starting with C<E<lt><<<<<<>, +C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>. These may be left by a +version control system to mark conflicts after a failed merge operation. + +=item * + +L<%s: command not found|perldiag/"%s: command not found"> + +(A) You've accidentally run your script through B<bash> or another shell +instead of Perl. Check the #! line, or manually feed your script into +Perl yourself. The #! line at the top of your file could look like: + + #!/usr/bin/perl + +=item * + +L<%s: command not found: %s|perldiag/"%s: command not found: %s"> + +(A) You've accidentally run your script through B<zsh> or another shell +instead of Perl. Check the #! line, or manually feed your script into +Perl yourself. The #! line at the top of your file could look like: + + #!/usr/bin/perl + +=item * + +L<Unescaped left brace in regex is deprecated here, passed through in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Unescaped left brace in regex is deprecated here, passed through in regex; marked by S<<-- HERE> in m/%s/"> + +Unescaped left braces are already illegal in some contexts in regular +expression patterns, but, due to an oversight, no deprecation warning +was raised in other contexts where they are intended to become illegal. +This warning is now raised in these contexts. + +=item * + +L<Bareword in require contains "%s"|perldiag/"Bareword in require contains "%s""> + +=item * + +L<Bareword in require maps to empty filename|perldiag/"Bareword in require maps to empty filename"> + +=item * + +L<Bareword in require maps to disallowed filename "%s"|perldiag/"Bareword in require maps to disallowed filename "%s""> + +=item * + +L<Bareword in require must not start with a double-colon: "%s"|perldiag/"Bareword in require must not start with a double-colon: "%s""> =back @@ -192,169 +1011,1508 @@ XXX L<message|perldiag/"message"> =item * -XXX L<message|perldiag/"message"> +Since C<.> is removed from C<@INC>, C<do> will now trigger a warning +recommending on fixing the C<do> statement. + +L<do "%s" failed, '.' is no longer in @INC|perldiag/"do "%s" failed, '.' is no longer in @INC"> + +=item * + +L<Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl v5.30|perldiag/"Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl v5.30"> + +See L</Deprecations> + +=item * + +L<Declaring references is experimental|perldiag/"Declaring references is experimental"> + +(S experimental::declared_refs) This warning is emitted if you use a reference +constructor on the right-hand side of C<my()>, C<state()>, C<our()>, or +C<local()>. 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::declared_refs"; + use feature "declared_refs"; + $fooref = my \$foo; + +=item * + +L<C<${^ENCODING}> is no longer supported|perldiag/"${^ENCODING} is no longer supported"> + +(D deprecated) The special variable C<${^ENCODING}>, formerly used to implement +the C<encoding> pragma, is no longer supported as of Perl 5.26.0. =back =head2 Changes to Existing Diagnostics -XXX Changes (i.e. rewording) of diagnostic messages go here - =over 4 =item * -XXX Describe change here +When a C<require> fails, we now do not provide C<@INC> when the C<require> +is for a file instead of a module. + +=item * + +When C<@INC> is not scanned for a C<require> call, we no longer display +C<@INC> to avoid confusion. + +=item * + +Attribute "locked" is deprecated, and will disappear in Perl 5.28 + +=item * + +Attribute "unique" is deprecated, and will disappear in Perl 5.28 + +=item * + +Constants from lexical variables potentially modified elsewhere are +deprecated. This will not be allowed in Perl 5.32 + +=item * + +Deprecated use of my() in false conditional. This will be a fatal error +in Perl 5.30 + +=item * + +dump() better written as CORE::dump(). dump() will no longer be available +in Perl 5.30 + +=item * + +${^ENCODING} is no longer supported. Its use will be fatal in Perl 5.28 + +=item * + +File::Glob::glob() will disappear in perl 5.30. Use File::Glob::bsd_glob() +instead. + +=item * + +%s() is deprecated on :utf8 handles. This will be a fatal error in Perl 5.30 + +=item * + +$* is no longer supported. Its use will be fatal in Perl 5.30 + +=item * + +$* is no longer supported. Its use will be fatal in Perl 5.30 + +=item * + +Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28 + +=item * + +Opening filehandle %s also as a directory. This will be a fatal +error in Perl 5.28 + +=item * + +Setting $/ to a reference to %s as a form of slurp is deprecated, +treating as undef. This will be fatal in Perl 5.28 + +=item * + +Unescaped left brace in regex is deprecated here (and will be fatal +in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in m/%s/ + +=item * + +Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28 + +=item * + +Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28 + +=item * + +Use of code point 0x%s is deprecated; the permissible max is 0x%s. +This will be fatal in Perl 5.28 + +=item * + +Use of comma-less variable list is deprecated. Its use will be fatal +in Perl 5.28 + +=item * + +Use of inherited AUTOLOAD for non-method %s() is deprecated. This +will be fatal in Perl 5.28 + +=item * + +Use of strings with code points over 0xFF as arguments to %s operator +is deprecated. This will be a fatal error in Perl 5.28 + +=item * + +Improve error for missing tie() package/method. This brings the error messages +in line with the ones used for normal method calls, despite not using +call_method(). + +=item * + +Make the sysread()/syswrite/() etc :utf8 handle warnings default. These +warnings were under 'deprecated' previously. + +=item * + +'do' errors now refer to 'do' (not 'require'). + +=item * + +Details as to the exact problem have been added to the diagnostics that +occur when malformed UTF-8 is encountered when trying to convert to a +code point. + +=item * + +Executing C<undef $x> where C<$x> is tied or magical no longer incorrectly +blames the variable for an uninitialized-value warning encountered by the +tied/magical code. + +=item * + +L<Unescaped left brace in regex is illegal here in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Unescaped left brace in regex is illegal here in regex; marked by S<<-- HERE> in m/%s/"> + +The word "here" has been added to the message that was raised in +v5.25.1. This is to indicate that there are contexts in which unescaped +left braces are not (yet) illegal. + +=item * + +Code like C<$x = $x . "a"> was incorrectly failing to yield a +L<use of uninitialized value|perldiag/"Use of uninitialized value%s"> +warning when C<$x> was a lexical variable with an undefined value. That has +now been fixed. [perl #127877] + +=item * + +When the error "Experimental push on scalar is now forbidden" is raised for +the hash functions C<keys>, C<each>, and C<values>, it is now followed by +the more helpful message, "Type of arg 1 to whatever must be hash or +array". [perl #127976] + +=item * + +C<undef *_; shift> or C<undef *_; pop> inside a subroutine, with no +argument to C<shift> or C<pop>, began crashing in Perl 5.14.0, but has now +been fixed. + +=item * + +C<< "string$scalar-E<gt>$*" >> now correctly prefers concat overloading to +string overloading if C<< $scalar-E<gt>$* >> returns an overloaded object, +bringing it into consistency with C<$$scalar>. + +=item * + +C<< /@0{0*-E<gt>@*/*0 >> and similar contortions used to crash, but no longer +do, but merely produce a syntax error. [perl #128171] + +=item * + +C<do> or C<require> with a reference or typeglob which, when stringified, +contains a null character started crashing in Perl 5.20.0, but has now been +fixed. [perl #128182] =back =head1 Utility Changes -XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here. -Most of these are built within the directory F<utils>. +=head2 F<c2ph> and F<pstruct> + +=over 4 -[ List utility changes as a =head2 entry for each utility and =item -entries for each change -Use L<XXX> with program names to get proper documentation linking. ] +=item * + +These old utilities have long since superceded by L<h2xs>, and are +now gone from the distribution. + +=back -=head2 L<XXX> +=head2 F<Porting/pod_lib.pl> =over 4 =item * -XXX +Removed spurious executable bit. + +=item * + +Account for possibility of DOS file endings. =back -=head1 Configuration and Compilation +=head2 F<Porting/sync-with-cpan> + +=over 4 + +=item * -XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools -go here. Any other changes to the Perl build process should be listed here. -However, any platform-specific changes should be listed in the -L</Platform Support> section, instead. +Many improvements + +=back -[ List changes as a =item entry ]. +=head2 F<perf/benchmarks> =over 4 =item * -XXX +Tidy file, rename some symbols. =back -=head1 Testing +=head2 F<Porting/checkAUTHORS.pl> -XXX Any significant changes to the testing of a freshly built perl should be -listed here. Changes which create B<new> files in F<t/> go here as do any -large changes to the testing harness (e.g. when parallel testing was added). -Changes to existing files in F<t/> aren't worth summarizing, although the bugs -that they represent may be covered elsewhere. +=over 4 -[ List each test improvement as a =item entry ] +=item * + +Replace obscure character range with \w. + +=back + +=head2 F<t/porting/regen.t> =over 4 =item * -XXX +try to be more helpful when tests fail. =back -=head1 Platform Support +=head2 F<utils/h2xs.PL> + +=over 4 -XXX Any changes to platform support should be listed in the sections below. +=item * -[ Within the sections, list each platform as a =item entry with specific -changes as paragraphs below it. ] +Avoid infinite loop for enums. -=head2 New Platforms +=back -XXX List any platforms that this version of perl compiles on, that previous -versions did not. These will either be enabled by new files in the F<hints/> -directories, or new subdirectories and F<README> files at the top level of the -source tree. +=head2 L<perlbug> =over 4 -=item XXX-some-platform +=item * -XXX +Long lines in the message body are now wrapped at 900 characters, to stay +well within the 1000-character limit imposed by SMTP mail transfer agents. +This is particularly likely to be important for the list of arguments to +C<Configure>, which can readily exceed the limit if, for example, it names +several non-default installation paths. This change also adds the first unit +tests for perlbug. [perl #128020] =back -=head2 Discontinued Platforms +=head1 Configuration and Compilation + +=over 4 + +=item * + +C<DEFAULT_INC_EXCLUDES_DOT> has been turned on as default. + +=item * + +The C<dtrace> build process has further changes: + +=over + +=item * + +If the C<-xnolibs> is available, use that so a F<dtrace> perl can be +built within a FreeBSD jail. + +=item * + +On systems that build a dtrace object file (FreeBSD, Solaris and +SystemTap's dtrace emulation), copy the input objects to a separate +directory and process them there, and use those objects in the link, +since C<dtrace -G> also modifies these objects. + +=item * + +Add libelf to the build on FreeBSD 10.x, since dtrace adds references +to libelf symbols. + +=item * + +Generate a dummy dtrace_main.o if C<dtrace -G> fails to build it. A +default build on Solaris generates probes from the unused inline +functions, while they don't on FreeBSD, which causes C<dtrace -G> to +fail. + +=back + +[perl #130108] + +=item * + +You can now disable perl's use of the PERL_HASH_SEED and +PERL_PERTURB_KEYS environment variables by configuring perl with +C<-Accflags=NO_PERL_HASH_ENV>. + +=item * + +You can now disable perl's use of the PERL_HASH_SEED_DEBUG environment +variable by configuring perl with +C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>. + +=item * + +Zero out the alignment bytes when calculating the bytes for 80-bit C<NaN> +and C<Inf> to make builds more reproducible. [perl #130133] + +=item * + +Since 5.18 for testing purposes we have included support for +building perl with a variety of non-standard, and non-recommended +hash functions. Since we do not recommend the use of these functions +we have removed them and their corresponding build options. Specifically +this includes the following build options: + + PERL_HASH_FUNC_SDBM + PERL_HASH_FUNC_DJB2 + PERL_HASH_FUNC_SUPERFAST + PERL_HASH_FUNC_MURMUR3 + PERL_HASH_FUNC_ONE_AT_A_TIME + PERL_HASH_FUNC_ONE_AT_A_TIME_OLD + PERL_HASH_FUNC_MURMUR_HASH_64A + PERL_HASH_FUNC_MURMUR_HASH_64B + +=item * + +Remove "Warning: perl appears in your path" + +This install warning is more or less obsolete, since most platforms already +*will* have a /usr/bin/perl or similar provided by the OS. + +=item * + +Reduce verbosity of "make install.man" + +Previously, two progress messages were emitted for each manpage: one by +installman itself, and one by the function in install_lib.pl that it calls to +actually install the file. Disabling the second of those in each case saves +over 750 lines of unhelpful output. + +=item * + +Cleanup for clang -Weverything support. [perl 129961] + +=item * + +Configure: signbit scan was assuming too much, stop assuming negative 0. + +=item * + +Various compiler warnings have been silenced. + +=item * + +Several smaller changes have been made to remove impediments to compiling under +C++11. + +=item * + +Builds using C<USE_PAD_RESET> now work again; this configuration had +bit-rotted. + +=item * + +A probe for C<gai_strerror> was added to F<Configure> that checks if the +the gai_strerror() routine is available and can be used to +translate error codes returned by getaddrinfo() into human +readable strings. + +=item * + +F<Configure> now aborts if both "-Duselongdouble" and "-Dusequadmath" are +requested. +L<[perl #126203]|https://rt.perl.org/Public/Bug/Display.html?id=126203> + +=item * + +Fixed a bug in which F<Configure> could append "-quadmath" to the archname even +if it was already present. +L<[perl #128538]|https://rt.perl.org/Public/Bug/Display.html?id=128538> -XXX List any platforms that this version of perl no longer compiles on. +=item * + +Clang builds with "-DPERL_GLOBAL_STRUCT" or "-DPERL_GLOBAL_STRUCT_PRIVATE" have +been fixed (by disabling Thread Safety Analysis for these configurations). + +=item * + +F<make_ext.pl> no longer updates a module's F<pm_to_blib> file when no +files require updates. This could cause dependencies, F<perlmain.c> +in particular, to be rebuilt unnecessarily. [perl #126710] + +=item * + +The output of C<perl -V> has been reformatted so that each configuration +and compile-time option is now listed one per line, to improve +readability. + +=item * + +C<Configure> now builds C<miniperl> and C<generate_uudmap> if you +invoke it with C<-Dusecrosscompiler> but not C<-Dtargethost=somehost>. +This means you can supply your target platform C<config.sh>, generate +the headers and proceed to build your cross-target perl. [perl #127234] + +=item * + +Builds with C<-Accflags=-DPERL_TRACE_OPS> now only dump the operator +counts when the environment variable C<PERL_TRACE_OPS> to be set to a +non-zero integer. This allows C<make test> to pass on such a build. + +=item * + +When building with GCC 6 and link-time optimization (the C<-flto> option to +C<gcc>), C<Configure> was treating all probed symbols as present on the +system, regardless of whether they actually exist. This has been fixed. +[perl #128131] + +=item * + +The F<t/test.pl> library is used for internal testing of Perl itself, and +also copied by several CPAN modules. Some of those modules must work on +older versions of Perl, so F<t/test.pl> must in turn avoid newer Perl +features. Compatibility with Perl 5.8 was inadvertently removed some time +ago; it has now been restored. [perl #128052] + +=item * + +The build process no longer emits an extra blank line before building each +"simple" extension (those with only F<*.pm> and F<*.pod> files). + +=back + +=head1 Testing =over 4 -=item XXX-some-platform +=item * + +F<XS-APItest/t/utf8.t>: Several small fixes and enhancements. + +=item * + +Tests for locales were erroneously using locales incompatible with Perl. + +=item * + +Some parts of the test suite that try to exhaustively test edge cases in the +regex implementation have been restricted to running for a maximum of five +minutes. On slow systems they could otherwise take several hours, without +significantly improving our understanding of the correctness of the code +under test. + +In addition, some of those test cases have been split into more files, to +allow them to be run in parallel on suitable systems. + +=item * -XXX +A new internal facility allows analysing the time taken by the individual +tests in Perl's own test suite; see F<Porting/harness-timer-report.pl>. + +=item * + +F<t/re/regexp_nonull.t> has been added to test that the regular expression +engine can handle scalars that do not have a null byte just past the end of +the string. + +=item * + +A new test script, F<t/op/decl-refs.t>, has been added to test the new feature, +"Declaring a reference to a variable". + +=item * + +A new test script, F<t/re/anyof.t>, has been added to test that the ANYOF nodes +generated by bracketed character classes are as expected. + +=item * + +F<t/harness> now tries really hard not to run tests outside of the Perl +source tree. [perl #124050] + +=back + +=head1 Platform Support + +=head2 New Platforms + +=over 4 + +=item NetBSD/VAX + +Perl now compiles under NetBSD on VAX machines. However, it's not +possible for that platform to implement floating-point infinities and +NaNs compatibly with most modern systems, which implement the IEEE-754 +floating point standard. The hexadecimal floating point (C<0x...p[+-]n> +literals, C<printf %a>) is not implemented, either. +The C<make test> passes 98% of tests. + +=over 4 + +=item * + +Test fixes and minor updates. + +=item * + +Account for lack of C<inf>, C<nan>, and C<-0.0> support. + +=back =back =head2 Platform-Specific Notes -XXX List any changes for specific platforms. This could include configuration -and compilation changes or changes in portability/compatibility. However, -changes within modules for platforms should generally be listed in the -L</Modules and Pragmata> section. +=over 4 + +=item Darwin + +don't treat -Dprefix=/usr as special, instead require an extra option +-Ddarwin_distribution to produce the same results. + +=item POSIX + +Finish removing POSIX deprecated functions. + +=item OS X + +OS X El Capitan doesn't implement the clock_gettime() or clock_getres() APIs, +emulate them as necessary. + +=item macOS + +Deprecated syscall(2) on macOS 10.12. + +=item EBCDIC + +Several tests have been updated to work (or be skipped) on EBCDIC platforms. + +=item HP-UX + +L<Net::Ping> UDP test is skipped on HP-UX. + +=item Hurd + +The hints for Hurd have been improved enabling malloc wrap and reporting the +GNU libc used (previously it was an empty string when reported). + +=item VAX + +VAX floating point formats are now supported. + +=item VMS =over 4 -=item XXX-some-platform +=item * + +The path separator for the C<PERL5LIB> and C<PERLLIB> environment entries is +now a colon (C<:>) when running under a Unix shell. There is no change when +running under DCL (it's still C<|>). -XXX +=item * + +Remove some VMS-specific hacks from C<showlex.t>. These were added 15 years +ago, and are no longer necessary for any VMS version now supported. + +=item * + +Move C<_pDEPTH> and C<_aDEPTH> after F<config.h> otherwise DEBUGGING +may not be defined yet. + +=item * + +VAXC has not been a possibility for a good long while, and the versions of the +DEC/Compaq/HP/VSI C compiler that report themselves as "DEC" in a listing file +are 15 years or more out-of-date and can be safely desupported. =back -=head1 Internal Changes +=item Windows -XXX Changes which affect the interface available to C<XS> code go here. Other -significant internal changes for future core maintainers should be noted as -well. +=over 4 + +=item * -[ List each change as a =item entry ] +Support for compiling perl on Windows using Microsoft Visual Studio 2015 +(containing Visual C++ 14.0) has been added. + +This version of VC++ includes a completely rewritten C run-time library, some +of the changes in which mean that work done to resolve a socket close() bug in +perl #120091 and perl #118059 is not workable in its current state with this +version of VC++. Therefore, we have effectively reverted that bug fix for +VS2015 onwards on the basis that being able to build with VS2015 onwards is +more important than keeping the bug fix. We may revisit this in the future to +attempt to fix the bug again in a way that is compatible with VS2015. + +These changes do not affect compilation with GCC or with Visual Studio versions +up to and including VS2013, i.e. the bug fix is retained (unchanged) for those +compilers. + +Note that you may experience compatibility problems if you mix a perl built +with GCC or VS E<lt>= VS2013 with XS modules built with VS2015, or if you mix a +perl built with VS2015 with XS modules built with GCC or VS E<lt>= VS2013. +Some incompatibility may arise because of the bug fix that has been reverted +for VS2015 builds of perl, but there may well be incompatibility anyway because +of the rewritten CRT in VS2015 (e.g. see discussion at +http://stackoverflow.com/questions/30412951). + +=back + +=item Win32 =over 4 =item * -XXX +Tweaks for Win32 VC vs GCC detection makefile code. This fixes issue that CCHOME +depends on CCTYPE, which in auto detect mode is set after CCHOME, so CCHOME uses +the uninit CCTYPE var. Also fix else vs .ELSE in makefile.mk + +=item * + +fp definitions have been updated. =back -=head1 Selected Bug Fixes +=item VMS And Win32 + +Fix some breakage, add 'undef' value for default_inc_excludes_dot in build +scripts. + +=item Linux + +Drop support for Linux a.out Linux has used ELF for over twenty years. + +=item OpenBSD 6 -XXX Important bug fixes in the core language are summarized here. Bug fixes in -files in F<ext/> and F<lib/> are best summarized in L</Modules and Pragmata>. +OpenBSD 6 still does not support returning pid, gid or uid with SA_SIGINFO. +Make sure this is accounted for. -[ List each fix as a =item entry ] +=item FreeBSD + +t/uni/overload.t: Skip hanging test on FreeBSD. + +=back + +=head1 Internal Changes =over 4 =item * -XXX +The C<op_class()> API function has been added. This is like the existing +C<OP_CLASS()> macro, but can more accurately determine what struct an op +has been allocated as. For example C<OP_CLASS()> might return +C<OA_BASEOP_OR_UNOP> indicating that ops of this type are usually +allocated as an C<OP> or C<UNOP>; while C<op_class()> will return +C<OPclass_BASEOP> or C<OPclass_UNOP> as appropriate. + +=item * + +The output format of the C<op_dump()> function (as used by C<perl -Dx>) +has changed: it now displays an "ASCII-art" tree structure, and shows more +low-level details about each op, such as its address and class. + +=item * + +New versions of macros like C<isALPHA_utf8> and C<toLOWER_utf8> have +been added, each with the +suffix C<_safe>, like C<isSPACE_utf8_safe>. These take an extra +parameter, giving an upper limit of how far into the string it is safe +to read. Using the old versions could cause attempts to read beyond the +end of the input buffer if the UTF-8 is not well-formed, and their use +now raises a deprecation warning. Details are at +L<perlapi/Character classification>. + +=item * + +Calling macros like C<isALPHA_utf8> on malformed UTF-8 have issued a +deprecation warning since Perl v5.18. They now die. +Similarly, macros like C<toLOWER_utf8> on malformed UTF-8 now die. + +=item * + +Calling the functions C<utf8n_to_uvchr> and its derivatives, while +passing a string length of 0 is now asserted against in DEBUGGING +builds, and otherwise returns the Unicode REPLACEMENT CHARACTER. If +you have nothing to decode, you shouldn't call the decode function. + +=item * + +The functions C<utf8n_to_uvchr> and its derivatives now return the +Unicode REPLACEMENT CHARACTER if called with UTF-8 that has the overlong +malformation, and that malformation is allowed by the input parameters. +This malformation is where the UTF-8 looks valid syntactically, but +there is a shorter sequence that yields the same code point. This has +been forbidden since Unicode version 3.1. + +=item * + +The functions C<utf8n_to_uvchr> and its derivatives now accept an input +flag to allow the overflow malformation. This malformation is when the +UTF-8 may be syntactically valid, but the code point it represents is +not capable of being represented in the word length on the platform. +What "allowed" means in this case is that the function doesn't return an +error, and advances the parse pointer to beyond the UTF-8 in question, +but it returns the Unicode REPLACEMENT CHARACTER as the value of the +code point (since the real value is not representable). + +=item * + +The C<PADOFFSET> type has changed from being unsigned to signed, and +several pad-related variables such as C<PL_padix> have changed from being +of type C<I32> to type C<PADOFFSET>. + +=item * + +The function C<L<perlapi/utf8n_to_uvchr>> has been changed to not +abandon searching for other malformations when the first one is +encountered. A call to it thus can generate multiple diagnostics, +instead of just one. + +=item * + +A new function, C<L<perlapi/utf8n_to_uvchr_error>>, has been added for +use by modules that need to know the details of UTF-8 malformations +beyond pass/fail. Previously, the only ways to know why a sequence was +ill-formed was to capture and parse the generated diagnostics, or to do +your own analysis. + +=item * + +Several new functions for handling Unicode have been added to the API: +C<L<perlapi/is_strict_utf8_string>>, +C<L<perlapi/is_c9strict_utf8_string>>, +C<L<perlapi/is_utf8_string_flags>>, +C<L<perlapi/is_strict_utf8_string_loc>>, +C<L<perlapi/is_strict_utf8_string_loclen>>, +C<L<perlapi/is_c9strict_utf8_string_loc>>, +C<L<perlapi/is_c9strict_utf8_string_loclen>>, +C<L<perlapi/is_utf8_string_loc_flags>>, +C<L<perlapi/is_utf8_string_loclen_flags>>, +C<L<perlapi/is_utf8_fixed_width_buf_flags>>, +C<L<perlapi/is_utf8_fixed_width_buf_loc_flags>>, +C<L<perlapi/is_utf8_fixed_width_buf_loclen_flags>>. + +These functions are all extensions of the C<is_utf8_string_*()> functions, +that apply various restrictions to the UTF-8 recognized as valid. + +=item * + +A new API function C<sv_setvpv_bufsize()> allows simultaneously setting the +length and allocated size of the buffer in an C<SV>, growing the buffer if +necessary. + +=item * + +A new API macro C<SvPVCLEAR()> sets its C<SV> argument to an empty string, +like Perl-space C<$x = ''>, but with several optimisations. + +=item * + +All parts of the internals now agree that the C<sassign> op is a C<BINOP>; +previously it was listed as a C<BASEOP> in F<regen/opcodes>, which meant +that several parts of the internals had to be special-cased to accommodate +it. This oddity's original motivation was to handle code like C<$x ||= 1>; +that is now handled in a simpler way. + +=item * + +Several new internal C macros have been added that take a string literal as +arguments, alongside existing routines that take the equivalent value as two +arguments, a character pointer and a length. The advantage of this is that +the length of the string is calculated automatically, rather than having to +be done manually. These routines are now used where appropriate across the +entire codebase. + +=item * + +The code in F<gv.c> that determines whether a variable has a special meaning +to Perl has been simplified. + +=item * + +The C<DEBUGGING>-mode output for regex compilation and execution has been +enhanced. + +=item * + +Several macros and functions have been added to the public API for +dealing with Unicode and UTF-8-encoded strings. See +L<perlapi/Unicode Support>. + +=item * + +Use C<my_strlcat()> in C<locale.c>. While C<strcat()> is safe in this context, +some compilers were optimizing this to C<strcpy()> causing a porting test to +fail that looks for unsafe code. Rather than fighting this, we just use +C<my_strlcat()> instead. + +=item * + +Three new ops, C<OP_ARGELEM>, C<OP_ARGDEFELEM> and C<OP_ARGCHECK> have +been added. These are intended principally to implement the individual +elements of a subroutine signature, plus any overall checking required. + +=item * + +Perl no longer panics when switching into some locales on machines with +buggy C<strxfrm()> implementations in their libc. [perl #121734] + +=item * + +Perl is now built with the C<PERL_OP_PARENT> compiler define enabled by +default. To disable it, use the C<PERL_NO_OP_PARENT> compiler define. +This flag alters how the C<op_sibling> field is used in C<OP> structures, +and has been available optionally since perl 5.22.0. + +See L<perl5220delta/"Internal Changes"> for more details of what this +build option does. + +=item * + +The meanings of some internal SV flags have been changed + +OPpRUNTIME, SVpbm_VALID, SVpbm_TAIL, SvTAIL_on, SvTAIL_off, SVrepl_EVAL, +SvEVALED + +=item * + +Change C<hv_fetch(…, "…", …, …)> to C<hv_fetchs(…, "…", …)> + +The dual-life dists all use Devel::PPPort, so they can use this function even +though it was only added in 5.10. + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=item * + +C< $-{$name} > would leak an C<AV> on each access if the regular +expression had no named captures. The same applies to access to any +hash tied with L<Tie::Hash::NamedCapture> and C<< all =E<gt> 1 >>. [perl +#130822] + +=item * + +Attempting to use the deprecated variable C<$#> as the object in an +indirect object method call could cause a heap use after free or +buffer overflow. [perl #129274] + +=item * + +When checking for an indirect object method call in some rare cases +the parser could reallocate the line buffer but then continue to use +pointers to the old buffer. [perl #129190] + +=item * + +Supplying a glob as the format argument to L<perlfunc/formline> would +cause an assertion failure. [perl #130722] + +=item * + +Code like C< $value1 =~ qr/.../ ~~ $value2 > would have the match +converted into a qr// operator, leaving extra elements on the stack to +confuse any surrounding expression. [perl #130705] + +=item * + +Since 5.24.0 in some obscure cases, a regex which included code blocks +from multiple sources (e.g. via embedded via qr// objects) could end up +with the wrong current pad and crash or give weird results. [perl #129881] + +=item * + +Occasionally C<local()>s in a code block within a patterns weren't being +undone when the pattern matching backtracked over the code block. +[perl #126697] + +=item * + +Using C<substr()> to modify a magic variable could access freed memory +in some cases. [perl #129340] + +=item * + +Perl 5.25.9 was fixed so that under C<use utf8>, the entire Perl program +is checked that the UTF-8 is wellformed. It turns out that several edge +cases were missed, and are now fixed. [perl #126310] was the original +ticket. + +=item * + +Under C<use utf8>, the entire Perl program is now checked that the UTF-8 +is wellformed. This resolves [perl #126310]. + +=item * + +The range operator C<..> on strings now handles its arguments correctly when in +the scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" >> +feature. The previous behaviour was sufficiently unexpected that we believe no +correct program could have made use of it. + +=item * + +The S<split> operator did not ensure enough space was allocated for +its return value in scalar context. It could then write a single +pointer immediately beyond the end of the memory block allocated for +the stack. [perl #130262] + +=item * + +Using a large code point with the C<W> pack template character with +the current output position aligned at just the right point could +cause a write a single zero byte immediately beyond the end of an +allocated buffer. [perl #129149] + +=item * + +Supplying the form picture argument as part of the form argument list +where the picture specifies modifying the argument could cause an +access to the new freed compiled form. [perl #129125] + +=item * + +Fix a problem with sort's build-in compare, where it would not sort +correctly with 64-bit integers, and non-long doubles. [perl #130335] + +=item * + +Fix issues with /(?{ ... E<lt>E<lt>EOF })/ that broke Method-Signatures. [perl #130398] + +=item * + +Fix a macro which caused syntax error on an EBCDIC build. + +=item * + +Prevent tests from getting hung up on 'NonStop' option. [perl #130445] + +=item * + +Fixed an assertion failure with C<chop> and C<chomp>, which +could be triggered by C<chop(@x =~ tr/1/1/)>. [perl #130198]. + +=item * + +Fixed a comment skipping error under C</x>; it could stop skipping a +byte early, which could be in the middle of a UTF-8 character. +[perl #130495]. + +=item * + +F<perldb> now ignores F</dev/tty> on non-Unix systems. [perl #113960]; + +=item * + +Fix assertion failure for C<{}-E<gt>$x> when C<$x> isn't defined. [perl #130496]. + +=item * + +DragonFly BSD now has support for setproctitle(). [perl #130068]. + +=item * + +Fix an assertion error which could be triggered when lookahead string +in patterns exceeded a minimum length. [perl #130522]. + +=item * + +Only warn once per literal about a misplaced C<_>. [perl #70878]. + +=item * + +Ensure range-start is set after error in C<tr///>. [perl #129342]. + +=item * + +Don't read past start of string for unmatched backref; otherwise, +we may have heap buffer overflow. [perl #129377]. + +=item * + +Properly recognize mathematical digit ranges starting at U+1D7E. +C<use re 'strict'> is supposed to warn if you use a range whose start +and end digit aren't from the same group of 10. It didn't do that +for five groups of mathematical digits starting at U+1D7E. + +=item * + +A sub containing a "forward" declaration with the same name (e.g., +C<sub c { sub c; }>) could sometimes crash or loop infinitely. [perl +#129090] + +=item * + +A crash in executing a regex with a floating UTF-8 substring against a +target string that also used UTF-8 has been fixed. [perl #129350] + +=item * + +Previously, a shebang line like C<#!perl -i u> could be erroneously +interpreted as requesting the C<-u> option. This has been fixed. [perl +#129336] + +=item * + +The regex engine was previously producing incorrect results in some rare +situations when backtracking past a trie that matches only one thing; this +showed up as capture buffers (C<$1>, C<$2>, etc) erroneously containing data +from regex execution paths that weren't actually executed for the final +match. [perl #129897] + +=item * + +Certain regexes making use of the experimental C<regex_sets> feature could +trigger an assertion failure. This has been fixed. [perl #129322] + +=item * + +Invalid assignments to a reference constructor (e.g., C<\eval=time>) could +sometimes crash in addition to giving a syntax error. [perl #125679] + +=item * + +The parser could sometimes crash if a bareword came after C<evalbytes>. +[perl #129196] + +=item * + +Autoloading via a method call would warn erroneously ("Use of inherited +AUTOLOAD for non-method") if there was a stub present in the package into +which the invocant had been blessed. The warning is no longer emitted in +such circumstances. [perl #47047] + +=item * + +A sub containing with a "forward" declaration with the same name (e.g., +C<sub c { sub c; }>) could sometimes crash or loop infinitely. [perl +#129090] + +=item * + +The use of C<splice> on arrays with nonexistent elements could cause other +operators to crash. [perl #129164] + +=item * + +Fixed case where C<re_untuit_start> will overshoot the length of a utf8 +string. [perl #129012] + +=item * + +Handle C<CXt_SUBST> better in C<Perl_deb_stack_all>, previously it wasn't +checking that the I<current> C<cx> is the right type, and instead was always +checking the base C<cx> (effectively a noop). [perl #129029] + +=item * + +Fixed two possible use-after-free bugs in C<Perl_yylex>. C<Perl_yylex> +maintains up to two pointers into the parser buffer, one of which can +become stale under the right conditions. [perl #129069] + +=item * + +Fixed a crash with C<s///l> where it thought it was dealing with UTF-8 +when it wasn't. [perl #129038] + +=item * + +Fixed place where regex was not setting the syntax error correctly. +[perl #129122] + +=item * + +The C<&.> operator (and the C<&> operator, when it treats its arguments as +strings) were failing to append a trailing null byte if at least one string +was marked as utf8 internally. Many code paths (system calls, regexp +compilation) still expect there to be a null byte in the string buffer +just past the end of the logical string. An assertion failure was the +result. [perl #129287] + +=item * + +Check C<pack_sockaddr_un()>'s return value because C<pack_sockaddr_un()> +silently truncates the supplied path if it won't fit into the C<sun_path> +member of C<sockaddr_un>. This may change in the future, but for now +check the path in theC<sockaddr> matches the desired path, and skip if +it doesn't. [perl #128095] + +=item * + +Make sure C<PL_oldoldbufptr> is preserved in C<scan_heredoc()>. In some +cases this is used in building error messages. [perl #128988] + +=item * + +Check for null PL_curcop in IN_LC() [perl #129106] + +=item * + +Fixed the parser error handling for an 'C<:attr(foo>' that does not have +an ending 'C<)>'. + +=item * + +Fix C<Perl_delimcpy()> to handle a backslash as last char, this +actually fixed two bugs, [perl #129064] and [perl #129176]. + +=item * + +[perl #129267] rework gv_fetchmethod_pvn_flags separator parsing to +prevent possible string overrun with invalid len in gv.c + +=item * + +Problems with in-place array sorts: code like C<@a = sort { ... } @a>, +where the source and destination of the sort are the same plain array, are +optimised to do less copying around. Two side-effects of this optimisation +were that the contents of C<@a> as visible to to sort routine were +partially sorted, and under some circumstances accessing C<@a> during the +sort could crash the interpreter. Both these issues have been fixed, and +Sort functions see the original value of C<@a>. + +=item * + +Non-ASCII string delimiters are now reported correctly in error messages +for unterminated strings. [perl #128701] + +=item * + +C<pack("p", ...)> used to emit its warning ("Attempt to pack pointer to +temporary value") erroneously in some cases, but has been fixed. + +=item * + +C<@DB::args> is now exempt from "used once" warnings. The warnings only +occurred under B<-w>, because F<warnings.pm> itself uses C<@DB::args> +multiple times. + +=item * + +The use of built-in arrays or hash slices in a double-quoted string no +longer issues a warning ("Possible unintended interpolation...") if the +variable has not been mentioned before. This affected code like +C<qq|@DB::args|> and C<qq|@SIG{'CHLD', 'HUP'}|>. (The special variables +C<@-> and C<@+> were already exempt from the warning.) + +=item * + +C<gethostent> and similar functions now perform a null check internally, to +avoid crashing with torsocks. This was a regression from 5.22. [perl +#128740] + +=item * + +C<defined *{'!'}>, C<defined *{'['}>, and C<defined *{'-'}> no longer leak +memory if the typeglob in question has never been accessed before. + +=item * + +In 5.25.4 fchown() was changed not to accept negative one as an argument +because in some platforms that is an error. However, in some other platforms +that is an acceptable argument. This change has been reverted [perl #128967]. + +=item * + +Mentioning the same constant twice in a row (which is a syntax error) no +longer fails an assertion under debugging builds. This was a regression +from 5.20. [perl #126482] + +=item * + +Many issues relating to C<printf "%a"> of hexadecimal floating point +were fixed. In addition, the "subnormals" (formerly known as "denormals") +floating point anumbers are now supported both with the plain IEEE 754 +floating point numbers (64-bit or 128-bit) and the x86 80-bit +"extended precision". Note that subnormal hexadecimal floating +point literals will give a warning about "exponent underflow". +[perl #128843, #128889, #128890, #128893, #128909, #128919] + +=item * + +A regression in 5.24 with C<tr/\N{U+...}/foo/> when the code point was between +128 and 255 has been fixed. [perl #128734]. + +=item * + +A regression from the previous development release, 5.23.3, where +compiling a regular expression could crash the interpreter has been +fixed. [perl #128686]. + +=item * + +Use of a string delimiter whose code point is above 2**31 now works +correctly on platforms that allow this. Previously, certain characters, +due to truncation, would be confused with other delimiter characters +with special meaning (such as C<?> in C<m?...?>), resulting +in inconsistent behaviour. Note that this is non-portable, +and is based on Perl's extension to UTF-8, and is probably not +displayable nor enterable by any editor. [perl #128738] + +=item * + +C<@{x> followed by a newline where C<x> represents a control or non-ASCII +character no longer produces a garbled syntax error message or a crash. +[perl #128951] + +=item * + +An assertion failure with C<%: = 0> has been fixed. +L<[perl #128238]|https://rt.perl.org/Public/Bug/Display.html?id=128238> + +=item * + +In Perl 5.18, the parsing of C<"$foo::$bar"> was accidentally changed, such +that it would be treated as C<$foo."::".$bar>. The previous behavior, which +was to parse it as C<$foo:: . $bar>, has been restored. +L<[perl #128478]|https://rt.perl.org/Public/Bug/Display.html?id=128478> + +=item * + +Since Perl 5.20, line numbers have been off by one when perl is invoked with +the B<-x> switch. This has been fixed. +L<[perl #128508]|https://rt.perl.org/Public/Bug/Display.html?id=128508> + +=item * + +Vivifying a subroutine stub in a deleted stash (e.g., C<delete $My::{"Foo::"}; +\&My::Foo::foo>) no longer crashes. It had begun crashing in Perl 5.18. +L<[perl #128532]|https://rt.perl.org/Public/Bug/Display.html?id=128532> + +=item * + +Some obscure cases of subroutines and file handles being freed at the same time +could result in crashes, but have been fixed. The crash was introduced in Perl +5.22. +L<[perl #128597]|https://rt.perl.org/Public/Bug/Display.html?id=128597> + +=item * + +Code that looks for a variable name associated with an uninitialized value +could cause an assertion in cases where magic is involved, such as +C<$ISA[0][0]>. This has now been fixed. +L<[perl #128253]|https://rt.perl.org/Public/Bug/Display.html?id=128253> + +=item * + +A crash caused by code generating the warning "Subroutine STASH::NAME +redefined" in cases such as C<sub P::f{} undef *P::; *P::f =sub{};> has been +fixed. In these cases, where the STASH is missing, the warning will now appear +as "Subroutine NAME redefined". +L<[perl #128257]|https://rt.perl.org/Public/Bug/Display.html?id=128257> + +=item * + +Fixed an assertion triggered by some code that handles deprecated behavior in +formats, e.g. in cases like this: + + format STDOUT = + @ + 0"$x" + +L<[perl #128255]|https://rt.perl.org/Public/Bug/Display.html?id=128255> + +=item * + +A possible divide by zero in string transformation code on Windows has been +avoided, fixing a crash when collating an empty string. +L<[perl #128618]|https://rt.perl.org/Public/Bug/Display.html?id=128618> + +=item * + +Some regular expression parsing glitches could lead to assertion failures with +regular expressions such as C</(?<=/> and C</(?<!/>. This has now been fixed. +L<[perl #128170]|https://rt.perl.org/Public/Bug/Display.html?id=128170> + +=item * + +C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly +warn when syntax warnings are enabled. [perl #127333] + +=item * + +socket() now leaves the error code returned by the system in C<$!> on +failure. [perl #128316] + +=item * + +Assignment variants of any bitwise ops under the C<bitwise> feature would +crash if the left-hand side was an array or hash. [perl #128204] + +=item * + +C<require> followed by a single colon (as in C<foo() ? require : ...> is +now parsed correctly as C<require> with implicit $_, rather than +C<require "">. [perl #128307] + +=item * + +Scalar C<keys %hash> can now be assigned to consistently in all scalar +lvalue contexts. Previously it worked for some contexts but not others. + +=item * + +List assignment to C<vec> or C<substr> with an array or hash for its first +argument used to result in crashes or "Can't coerce" error messages at run +time, unlike scalar assignment, which would give an error at compile time. +List assignment now gives a compile-time error, too. [perl #128260] + +=item * + +Expressions containing an C<&&> or C<||> operator (or their synonyms C<and> +and C<or>) were being compiled incorrectly in some cases. If the left-hand +side consisted of either a negated bareword constant or a negated C<do {}> +block containing a constant expression, and the right-hand side consisted of +a negated non-foldable expression, one of the negations was effectively +ignored. The same was true of C<if> and C<unless> statement modifiers, +though with the left-hand and right-hand sides swapped. This long-standing +bug has now been fixed. [perl #127952] + +=item * + +C<reset> with an argument no longer crashes when encountering stash entries +other than globs. [perl #128106] + +=item * + +Assignment of hashes to, and deletion of, typeglobs named C<*::::::> no +longer causes crashes. [perl #128086] + +=item * + +Handle SvIMMORTALs in LHS of list assign. [perl #129991] + +=item * + +[perl #130010] a5540cf breaks texinfo + +This involved user-defined Unicode properties. + +=item * + +Fix error message for unclosed C<\N{> in regcomp. + +An unclosed C<\N{> could give the wrong error message +C<"\N{NAME} must be resolved by the lexer">. + +=item * + +List assignment in list context where the LHS contained aggregates and +where there were not enough RHS elements, used to skip scalar lvalues. +Previously, C<(($a,$b,@c,$d) = (1))> in list context returned C<($a)>; now +it returns C<($a,$b,$d)>. C<(($a,$b,$c) = (1))> is unchanged: it still +returns C<($a,$b,$c)>. This can be seen in the following: + + sub inc { $_++ for @_ } + inc(($a,$b,@c,$d) = (10)) + +Formerly, the values of C<($a,$b,$d)> would be left as C<(11,undef,undef)>; +now they are C<(11,1,1)>. + +=item * + +[perl 129903] + +The basic problem is that code like this: /(?{ s!!! })/ can trigger infinite +recursion on the C stack (not the normal perl stack) when the last successful +pattern in scope is itself. Since the C stack overflows this manifests as an +untrappable error/segfault, which then kills perl. + +We avoid the segfault by simply forbidding the use of the empty pattern when it +would resolve to the currently executing pattern. + +=item * + +[perl 128997] Avoid reading beyond the end of the line buffer when there's a +short UTF-8 character at the end. + +=item * + +[perl 129950] fix firstchar bitmap under utf8 with prefix optimisation. + +=item * + +[perl 129954] Carp/t/arg_string.t: be liberal in f/p formats. + +=item * + +[perl 129928] make do "a\0b" fail silently instead of throwing. + +=item * + +[perl 129130] make chdir allocate the stack it needs. =back =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. +=over 4 -[ List each fix as a =item entry ] +=item * + +Some modules have been broken by the L<context stack rework|/Internal Changes>. +These modules were relying on non-guaranteed implementation details in perl. +Their maintainers have been informed, and should contact perl5-porters for +advice if needed. Below is a subset of these modules: =over 4 +=item * L<Algorithm::Permute> + +=item * L<Coro> + +L<Coro> and perl v5.22.0 were already incompatible due to a change in the perl, +and the reworking on the perl context stack creates a further incompatibility. +perl5-porters has L<discussed the issue on the mailing +list|http://www.nntp.perl.org/group/perl.perl5.porters/2016/05/msg236174.html>. + +=item * L<Data::Alias> + +=item * L<RPerl> + +=item * L<Scope::Upper> + +=item * L<TryCatch> + +=back + =item * -XXX +The module L<lexical::underscore> no longer works on perl v5.24.0, because perl +no longer has a lexical C<$_>! + +=item * + +C<mod_perl> has been patched for compatibility for v5.22.0 and later but no +release has been made. The relevant patch (and other changes) can be found in +their source code repository, L<mirrored at +GitHub|https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb63375da6e>. =back @@ -364,26 +2522,46 @@ XXX =item * -XXX Add anything here that we forgot to add, or were mistaken about, in -the perldelta of a previous release. +Parsing bad POSIX charclasses no longer leaks memory. This was fixed in Perl +5.25.2 +L<[perl #128313]|https://rt.perl.org/Public/Bug/Display.html?id=128313> + +=item * + +Fixed issues with recursive regexes. The behavior was fixed in Perl 5.24.0. +L<[perl #126182]|https://rt.perl.org/Public/Bug/Display.html?id=126182> =back =head1 Obituary -XXX If any significant core contributor has died, we've added a short obituary -here. +Jon Portnoy (AVENJ), a prolific Perl author and admired Gentoo community +member, has passed away on August 10, 2016. He will be remembered and +missed by all those with which he came in contact and enriched with his +intellect, wit, and spirit. + +It is with great sadness we also note Kip Hampton's passing.. Probably +best known as the author of the Perl & XML column on XML.com, he was a +core contributor to AxKit, an XML server platform that became an Apache +Foundation project. He was a frequent speaker in the early days at +OSCON, and most recently at YAPC::NA in Madison. He was frequently on +irc.perl.org as `ubu`, generally in the #axkit-dahut community, the +group responsible for YAPC::NA Asheville in 2011. + +Kip and his constant contributions to the community will be greatly +missed. =head1 Acknowledgements XXX Generate this with: - perl Porting/acknowledgements.pl v5.25.5..HEAD + perl Porting/acknowledgements.pl v5.24.0..HEAD =head1 Reporting Bugs -If you find what you think is a bug, you might check the perl bug database -at L<https://rt.perl.org/> . There may also be information at +If you find what you think is a bug, you might check the articles recently +posted to the comp.lang.perl.misc newsgroup and the perl bug database at +L<https://rt.perl.org/> . There may also be information at L<http://www.perl.org/> , the Perl Home Page. If you believe you have an unreported bug, please run the L<perlbug> program |