[ 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.2
+perldelta - what is new for perl v5.25.4
=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.3 release and the 5.25.4
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.2, first read
+L<perl5253delta>, which describes differences between 5.25.2 and 5.25.3.
=head1 Notice
[ List each enhancement as a =head2 entry ]
-=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>.
-
=head1 Security
XXX Any security-related notices go here. In particular, any security
[ List each security issue as a =head2 entry ]
-=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
XXX For a release on a stable branch, this section aspires to be:
[ List each incompatible change as a =head2 entry ]
-=head2
-
-C<keys> return from an lvalue subroutine can no longer be assigned to in
-list context.
-
- sub foo : lvalue { keys(%INC) }
- (foo) = 3; # death
-
-This makes the lvalue sub case consistent with C<(keys %hash) = ...>, which
-is also an error. [perl #128187]
-
=head1 Deprecations
XXX Any deprecated features, syntax, modules etc. should be listed here.
=item *
-XXX
+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) = @_>.
=back
=item *
-L<Module::CoreList> has been upgraded from 5.20160520 to 5.20160620.
+L<NEXT> has been upgraded from version 0.65 to 0.67.
=back
=back
-=head3 L<perllocale>
-
-=over 4
-
-=item *
-
-Document NUL collation handling.
-
-=back
-
-=head3 L<perlmodlib>
-
-=over 4
-
-=item *
-
-Updated the mirror list
-
-=back
-
=head1 Diagnostics
The following additions or changes have been made to diagnostic output,
=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.
+XXX L<message|perldiag/"message">
=back
=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 Describe change here
=back
=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]
+XXX
=back
=item *
-Perl no longer panics when switching into some locales on machines with
-buggy C<strxfrm()> implementations in their libc. [perl #121734]
+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.
=back
=item *
-C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly
-warn when syntax warnings are enabled. [perl #127333]
+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 *
-socket() now leaves the error code returned by the system in C<$!> on
-failure. [perl #128316]
+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]
=back
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.25.1..HEAD
+ perl Porting/acknowledgements.pl v5.25.3..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