This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update perlhist
[perl5.git] / pod / perldelta.pod
index eee8529..0846821 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.25.1
+perldelta - what is new for perl v5.25.4
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.25.0 release and the 5.25.1
+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.24.0, first read
-L<perl5250delta>, which describes differences between 5.24.0 and 5.25.0.
+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 Core Enhancements
-
-=head2 POSIX::tmpnam() has been removed
+=head1 Performance Enhancements
 
-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.
+=over 4
 
-=head2 require ::Foo::Bar is now illegal.
+=item *
 
-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.
+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) = @_>.
 
-=head2 Unescaped literal C<"{"> characters in regular expression
-patterns are no longer permissible
+=back
 
-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.
+=head1 Documentation
 
-These have been deprecated since v5.16, with a deprecation message
-displayed starting in v5.22.
+=head2 Changes to Existing Documentation
 
-=head2 Literal control character variable names are no longer permissible
+=head3 L<perlcall>
 
-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.
+=over 4
 
-=head2 C<qr//xx> is no longer permissible
+=item *
 
-Using more than one C</x> regular expression pattern modifier on a
-single pattern is now forbidden.  This is to allow a future enhancement
-to the language.  This usage has been deprecated since v5.22.
+Removed redundant C<dSP> from an example.
 
-=head2 C<NBSP> is no longer permissible in C<\N{...}>
+=back
 
-The name of a character may no longer contain non-breaking spaces.  It
-has been deprecated to do so since Perl v5.22.
+=head1 Modules and Pragmata
 
-=head1 Performance Enhancements
+=head2 Updated Modules and Pragmata
 
 =over 4
 
 =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.
+L<Archive::Tar> has been upgraded from version 2.08 to 2.10.
 
-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.
+=item *
 
-=back
+L<arybase> has been upgraded from version 0.11 to 0.12.
 
-=head1 Modules and Pragmata
+=item *
 
-=head2 Updated Modules and Pragmata
+L<B> has been upgraded from version 1.62 to 1.63.
 
-=over 4
+=item *
+
+L<B::Concise> has been upgraded from version 0.996 to 0.998.
 
 =item *
 
-L<Archive::Tar> has been upgraded from version 2.04 to 2.08.
+L<B::Deparse> has been upgraded from version 1.37 to 1.38.
 
 =item *
 
-L<Carp> has been upgraded from version 1.40 to 1.41.
+L<base> has been upgraded from version 2.23 to 2.24.
 
 =item *
 
-L<charnames> has been upgraded from version 1.43 to 1.44.
+L<bignum> has been upgraded from version 0.43 to 0.43_01.
 
 =item *
 
-L<Config::Perl::V> has been upgraded from version 0.25 to 0.26.
+L<Carp> has been upgraded from version 1.41 to 1.42.
 
 =item *
 
-L<DB_File> has been upgraded from version 1.835 to 1.838.
+L<Config::Perl::V> has been upgraded from version 0.26 to 0.27.
 
 =item *
 
-L<Digest::MD5> has been upgraded from version 2.54 to 2.55.
+L<CPAN> has been upgraded from version 2.14 to 2.14_01.
 
 =item *
 
-L<IPC::Cmd> has been upgraded from version 0.92 to 0.94.
+L<CPAN::Meta> has been upgraded from version 2.150005 to 2.150010.
 
 =item *
 
-L<IPC::SysV> has been upgraded from version 2.06_01 to 2.07.
+L<Digest> has been upgraded from version 1.17 to 1.17_01.
 
 =item *
 
-L<List::Util> has been upgraded from version 1.42_02 to 1.45_01.
+L<Digest::SHA> has been upgraded from version 5.95 to 5.96.
 
 =item *
 
-L<Locale::Codes> has been upgraded from version 3.37 to 3.38.
+L<Encode> has been upgraded from version 2.84 to 2.86.
 
 =item *
 
-L<Locale::Maketext> has been upgraded from version 1.26 to 1.27.
+L<encoding> has been upgraded from version 2.17_01 to 2.18.
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 5.20160507 to 5.20160520.
+L<Errno> has been upgraded from version 1.25 to 1.26.
 
 =item *
 
-L<Module::Metadata> has been upgraded from version 1.000031 to 1.000032.
+L<ExtUtils::MakeMaker> has been upgraded from version 7.18 to 7.24.
 
 =item *
 
-L<perlfaq> has been upgraded from version 5.021010 to 5.021011.
+L<File::Fetch> has been upgraded from version 0.48 to 0.52.
 
 =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.
+L<File::Spec> has been upgraded from version 3.64 to 3.65.
 
 =item *
 
-L<re> has been upgraded from version 0.32 to 0.33.
+L<Hash::Util> has been upgraded from version 0.20 to 0.21.
 
 =item *
 
-L<Scalar::Util> has been upgraded from version 1.42_02 to 1.45_01.
+L<HTTP::Tiny> has been upgraded from version 0.058 to 0.064.
 
 =item *
 
-L<Sys::Syslog> has been upgraded from version 0.33 to 0.34.
+L<I18N::LangTags> has been upgraded from version 0.40 to 0.41.
 
 =item *
 
-L<Term::ANSIColor> has been upgraded from version 4.04 to 4.05.
+L<IO> has been upgraded from version 1.36 to 1.37.
 
 =item *
 
-L<Test::Simple> has been upgraded from version 1.001014 to 1.302015.
+L<IO-Compress> has been upgraded from version 2.069 to 2.069_01.
 
 =item *
 
-L<threads> has been upgraded from version 2.07 to 2.08. Compatibility
-with 5.8 has been restored.
+L<IO::Socket::IP> has been upgraded from version 0.37 to 0.38.
 
 =item *
 
-L<threads::shared> has been upgraded from version 1.51 to 1.52.
-Compatibility with 5.8 has been restored.
+L<IPC::Cmd> has been upgraded from version 0.94 to 0.96.
 
-=back
+=item *
 
-=head1 Documentation
+L<JSON::PP> has been upgraded from version 2.27400 to 2.27400_01.
 
-=head2 Changes to Existing Documentation
+=item *
 
-=over 4
+L<Locale::Maketext> has been upgraded from version 1.27 to 1.28.
 
 =item *
 
-Fixed link to Crosby paper on hash complexity attack in L<perlsec>.
+L<Locale::Maketext::Simple> has been upgraded from version 0.21 to 0.21_01.
 
-=back
+=item *
 
-=head1 Diagnostics
+L<Memoize> has been upgraded from version 1.03 to 1.03_01.
 
-=head2 New Diagnostics
+=item *
 
-=head3 New Errors
+L<Module::CoreList> has been upgraded from version 5.20160720 to 5.20160820.
 
-=over 4
+=item *
+
+L<Module::Load::Conditional> has been upgraded from version 0.64 to 0.68.
 
 =item *
 
-L<Bareword in require contains "%s"|perldiag/"Bareword in require contains "%s"">
+L<Module::Metadata> has been upgraded from version 1.000032 to 1.000033.
 
 =item *
 
-L<Bareword in require maps to empty filename|perldiag/"Bareword in require maps to empty filename">
+L<Net::Ping> has been upgraded from version 2.43 to 2.44.
 
 =item *
 
-L<Bareword in require maps to disallowed filename "%s"|perldiag/"Bareword in require maps to disallowed filename "%s"">
+L<NEXT> has been upgraded from version 0.65 to 0.67.
 
 =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"">
+L<Opcode> has been upgraded from version 1.35 to 1.37.
 
-=back
+=item *
 
-=head2 Changes to Existing Diagnostics
+L<Pod::Html> has been upgraded from version 1.22 to 1.2201.
 
-=over 4
+=item *
+
+L<Pod::Perldoc> has been upgraded from version 3.25_02 to 3.27.
 
 =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]
+L<POSIX> has been upgraded from version 1.70 to 1.71.
 
 =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]
+L<Storable> has been upgraded from version 2.56 to 2.57.
 
 =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.
+L<Sys::Syslog> has been upgraded from version 0.34 to 0.34_01.
 
 =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>.
+L<Test> has been upgraded from version 1.28 to 1.29.
 
 =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]
+L<Test::Harness> has been upgraded from version 3.36 to 3.36_01.
 
 =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]
+L<Test::Simple> has been upgraded from version 1.302045 to 1.302052.
+
+=item *
+
+L<Tie::Hash::NamedCapture> has been upgraded from version 0.09 to 0.10.
+
+=item *
+
+L<Time::Local> has been upgraded from version 1.2300 to 1.24.
 
 =back
 
-=head1 Utility Changes
+=head1 Configuration and Compilation
+
+=over 4
+
+=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.
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=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).
 
-=head2 L<perlbug>
+=back
+
+=head1 Internal Changes
 
 =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]
+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
 
-=head1 Configuration and Compilation
+=head1 Selected Bug Fixes
 
 =over 4
 
 =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]
+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 *
 
-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.
+Non-ASCII string delimiters are now reported correctly in error messages
+for unterminated strings.  [perl #128701]
 
 =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]
+C<pack("p", ...)> used to emit its warning ("Attempt to pack pointer to
+temporary value") erroneously in some cases, but has been fixed.
 
 =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]
+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 build process no longer emits an extra blank line before building each
-"simple" extension (those with only F<*.pm> and F<*.pod> files).
+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.)
 
-=back
+=item *
 
-=head1 Internal Changes
+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]
 
-=over 4
+=item *
+
+C<defined *{'!'}>, C<defined *{'['}>, and C<defined *{'-'}> no longer leak
+memory if the typeglob in question has never been accessed before.
 
 =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.
+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].
 
-See L<perl5220delta/"Internal Changes"> for more details of what this
-build option does.
+=item *
 
-=back
+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]
 
-=head1 Selected Bug Fixes
+=item *
 
-=over 4
+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 *
 
-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]
+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 *
 
-C<reset> with an argument no longer crashes when encountering stash entries
-other than globs. [perl #128106]
+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 *
 
-Assignment of hashes to, and deletion of, typeglobs named C<*::::::> no
-longer causes crashes. [perl #128086]
+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]
 
 =back
 
 =head1 Acknowledgements
 
-Perl 5.25.1 represents approximately 2 weeks of development since Perl 5.25.0
-and contains approximately 46,000 lines of changes across 630 files from 24
+Perl 5.25.4 represents approximately 4 weeks of development since Perl 5.25.3
+and contains approximately 18,000 lines of changes across 820 files from 23
 authors.
 
 Excluding auto-generated files, documentation and release tools, there were
-approximately 40,000 lines of changes to 510 .pm, .t, .c and .h files.
+approximately 9,200 lines of changes to 660 .pm, .t, .c and .h files.
 
 Perl continues to flourish into its third decade thanks to a vibrant community
 of users and developers. The following people are known to have contributed the
-improvements that became Perl 5.25.1:
+improvements that became Perl 5.25.4:
 
-Aaron Crane, Andreas Voegele, Chad Granum, Chris 'BinGOs' Williams, Craig A.
-Berry, David Mitchell, Doug Bell, Father Chrysostomos, H.Merijn Brand, Hugo van
-der Sanden, Jarkko Hietaniemi, Jerry D. Hedden, Jim Cromie, John Lightsey,
-Karen Etheridge, Karl Williamson, Lukas Mai, Maxwell Carey, Nicholas Clark,
-Niko Tyni, Ricardo Signes, Sawyer X, Tony Cook, Yves Orton.
+Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari MannsÃ¥ker, Dan
+Collins, Daniel Dragan, David Mitchell, Father Chrysostomos, H.Merijn Brand,
+James E Keenan, Jarkko Hietaniemi, Karen Etheridge, Karl Williamson, Lukas Mai,
+Neil Bowers, Nicolas R., Pino Toscano, Rafael Garcia-Suarez, Richard Levitte,
+Shlomi Fish, Smylers, Steve Hay, Tony Cook, Yves Orton.
 
 The list above is almost certainly incomplete as it is automatically generated
 from version control history. In particular, it does not include the names of
@@ -392,9 +401,8 @@ the F<AUTHORS> file in the Perl source distribution.
 
 =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