=head1 NAME
-perldelta - what is new for perl v5.25.2
+[ 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.8
=head1 DESCRIPTION
-This document describes differences between the 5.25.1 release and the 5.25.2
+This document describes differences between the 5.25.7 release and the 5.25.8
release.
-If you are upgrading from an earlier release such as 5.25.0, first read
-L<perl5251delta>, which describes differences between 5.25.0 and 5.25.1.
+If you are upgrading from an earlier release such as 5.25.6, first read
+L<perl5257delta>, which describes differences between 5.25.6 and 5.25.7.
+
+=head1 Notice
+
+XXX Any important notices here
=head1 Core Enhancements
-=head2 Perl can now do default collation in UTF-8 locales on platforms
-that support it
+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.
-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>
+[ List each enhancement as a =head2 entry ]
-=head2 Better locale collation of strings containing embedded C<NUL>
-characters
+=head2 New Hash Function For 64-bit Builds
-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>.
+We have switched to a hybrid hash function to better balance
+performance for short and long keys.
-=head2 Lexical subroutines are no longer experimental
+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.
-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.
+=head1 Security
-=head2 C<CORE> subroutines for hash and array functions callable via
-reference
+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.
-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.
+[ List each security issue as a =head2 entry ]
-=head1 Security
+=head1 Incompatible Changes
-=head2 C<-Di> switch is now required for PerlIO debugging output
+XXX For a release on a stable branch, this section aspires to be:
-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.
+ 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.
-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.
+[ List each incompatible change as a =head2 entry ]
-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.
+=head1 Deprecations
-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.
+XXX Any deprecated features, syntax, modules etc. should be listed here.
-=head1 Incompatible Changes
+=head2 Module removals
+
+XXX Remove this section if inapplicable.
+
+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.
+
+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.
+
+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.
+
+=over
+
+=item XXX
-=head2 C<keys> returned from an lvalue subroutine
+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.
-C<keys> returned from an lvalue subroutine can no longer be assigned
-to in list context.
+=back
+
+[ List each other deprecation as a =head2 entry ]
+
+=head1 Performance Enhancements
+
+XXX Changes which enhance performance without changing behaviour go here.
+There may well be none in a stable release.
+
+[ List each enhancement as a =item entry ]
+
+=over 4
- sub foo : lvalue { keys(%INC) }
- (foo) = 3; # death
- sub bar : lvalue { keys(@_) }
- (bar) = 3; # also an error
+=item * New Faster Hash Function on 64 bit builds
-This makes the lvalue sub case consistent with C<(keys %hash) = ...> and
-C<(keys @_) = ...>, which are also errors. [perl #128187]
+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<< <> >> should
+now typically be faster due to a better implementation of the code that
+searches for the next newline character.
+
+=back
=head1 Modules and Pragmata
=item *
-L<Module::CoreList> has been upgraded from 5.20160520 to 5.20160620.
+L<Pod::Simple> has been upgraded from version 3.32 to 3.35.
=back
=head1 Documentation
-=head2 Changes to Existing Documentation
+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>.
-=head3 L<perllocale>
+=head2 New Documentation
-=over 4
+XXX Changes which create B<new> files in F<pod/> go here.
-=item *
+=head3 L<XXX>
-Document NUL collation handling.
+XXX Description of the purpose of the new file here
-=back
+=head2 Changes to Existing Documentation
+
+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.
-=head3 L<perlmodlib>
+=head3 L<XXX>
=over 4
=item *
-Updated the mirror list.
+XXX Description of the change here
=back
including warnings and fatal error messages. For the complete list of
diagnostic messages, see L<perldiag>.
+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.
+
=head2 New Diagnostics
+XXX Newly added diagnostic messages go under here, separated into New Errors
+and New Warnings
+
=head3 New Errors
=over 4
=item *
-L<Version control conflict marker|perldiag/"Version control conflict marker">
+XXX L<message|perldiag/"message">
-(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.
+=back
-=item *
+=head3 New Warnings
-L<%s: command not found|perldiag/"%s: command not found">
+=over 4
-(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
+=item *
- #!/usr/bin/perl
+XXX L<message|perldiag/"message">
-=item *
+=back
-L<%s: command not found: %s|perldiag/"%s: command not found: %s">
+=head2 Changes to Existing Diagnostics
-(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
+XXX Changes (i.e. rewording) of diagnostic messages go here
- #!/usr/bin/perl
+=over 4
=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.
+XXX Describe change here
=back
-=head2 Changes to Existing Diagnostics
+=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>.
+
+[ 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. ]
+
+=head2 L<XXX>
=over 4
=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.
+XXX
=back
=head1 Configuration and Compilation
-=over 4
+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.
-=item *
+[ List changes as a =item entry ].
-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]
+=over 4
=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.
+XXX
=back
=head1 Testing
+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.
+
+[ List each test improvement as a =item entry ]
+
=over 4
=item *
-F<t/harness> now tries really hard not to run tests outside of the Perl
-source tree. [perl #124050]
+XXX
+
+=back
+
+=head1 Platform Support
+
+XXX Any changes to platform support should be listed in the sections below.
+
+[ Within the sections, list each platform as a =item entry with specific
+changes as paragraphs below it. ]
+
+=head2 New Platforms
+
+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.
+
+=over 4
+
+=item XXX-some-platform
+
+XXX
+
+=back
+
+=head2 Discontinued Platforms
+
+XXX List any platforms that this version of perl no longer compiles on.
+
+=over 4
+
+=item XXX-some-platform
+
+XXX
+
+=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 XXX-some-platform
+
+XXX
=back
=head1 Internal Changes
+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.
+
+[ List each change as a =item entry ]
+
=over 4
=item *
-Perl no longer panics when switching into some locales on machines with
-buggy C<strxfrm()> implementations in their libc. [perl #121734]
+A new API function, C<sv_set_undef(sv)>, has been added. This is
+equivalent to C<sv_setsv(sv, &PL_sv_undef)>, but is more efficient.
=back
=head1 Selected Bug Fixes
+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>.
+
+[ List each fix as a =item entry ]
+
=over 4
=item *
-C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly
-warn when syntax warnings are enabled. [perl #127333]
+XXX
-=item *
+=back
-socket() now leaves the error code returned by the system in C<$!> on
-failure. [perl #128316]
+=head1 Known Problems
-=item *
+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.
-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]
+[ List each fix as a =item entry ]
+
+=over 4
=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]
+XXX
+
+=back
-=item *
+=head1 Errata From Previous Releases
-Scalar C<keys %hash> can now be assigned to consistently in all scalar
-lvalue contexts. Previously it worked for some contexts but not others.
+=over 4
=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]
+XXX Add anything here that we forgot to add, or were mistaken about, in
+the perldelta of a previous release.
=back
+=head1 Obituary
+
+XXX If any significant core contributor has died, we've added a short obituary
+here.
+
=head1 Acknowledgements
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.25.1..HEAD
+ perl Porting/acknowledgements.pl v5.25.5..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
+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
L<http://www.perl.org/> , the Perl Home Page.
If you believe you have an unreported bug, please run the L<perlbug> program