This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add a change to perldelta
[perl5.git] / pod / perldelta.pod
index 0f688c5..be5e23d 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.23.9
+perldelta - what is new for perl v5.25.1
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.23.8 release and the 5.23.9
+This document describes differences between the 5.25.0 release and the 5.25.1
 release.
 
-If you are upgrading from an earlier release such as 5.23.7, first read
-L<perl5238delta>, which describes differences between 5.23.7 and 5.23.8.
+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.
+
+=head1 Notice
+
+XXX Any important notices here
 
 =head1 Core Enhancements
 
-=head2 perl will now croak when closing an in-place output file fails
+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.
 
-Until now, failure to close the output file for an in-place edit was not
-detected, meaning that the input file could be clobbered without the edit being
-successfully completed.  Now, when the output file cannot be closed
-successfully, an exception is raised.
+[ List each enhancement as a =head2 entry ]
 
 =head1 Security
 
-=head2 Remove duplicate environment variables from C<environ>
+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.
+
+[ List each security issue as a =head2 entry ]
+
+=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<qr//xx> is no longer permissible
+
+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.
+
+=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 Deprecations
+
+XXX Any deprecated features, syntax, modules etc. should be listed here.
+
+=head2 Module removals
 
-Previously, if an environment variable appeared more than once in
-C<environ[]>, C<%ENV> would contain the last entry for that name,
-while a typical C<getenv()> would return the first entry. We now
-make sure C<%ENV> contains the same as what C<getenv> returns.
+XXX Remove this section if inapplicable.
 
-Second, we remove duplicates from C<environ[]>, so if a setting
-with that name is set in C<%ENV> we won't pass an unsafe value
-to a child process.
+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.
 
-[CVE-2016-2381]
+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
+
+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.
+
+=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
 
 =item *
 
-The number of calls to C<add_cp_to_invlist> has been reduced. This
-optimizes the compilation of inverted character classes.
+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
 
@@ -73,12 +157,10 @@ XXX
 
 =item *
 
-L<XXX> has been upgraded from version A.xx to B.yy.
-
-=item *
-
-L<Module::CoreList> has been upgraded from version 5.20160121 to
-5.20160221.
+L<POSIX> has been upgraded from version 1.66 to 1.69. This remedies several
+defects in making its symbols exportable. [perl #127821]  Furthermore,
+the C<POSIX::tmpnam()> interface has been removed,
+see L</"POSIX::tmpnam() has been removed">.
 
 =back
 
@@ -94,212 +176,360 @@ XXX
 
 =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>.
+
+=head2 New Documentation
+
+XXX Changes which create B<new> files in F<pod/> go here.
+
+=head3 L<XXX>
 
-=head3 L<perlfunc>
+XXX Description of the purpose of the new file here
+
+=head2 Changes to Existing Documentation
 
 =over 4
 
 =item *
 
-The L<perlfunc> manual page got a cleanup: there's more consistency now
-(in POD usage, grammar, code examples), better practices in code examples
-(use of C<my>, removal of bareword filehandles, dropped usage of C<&>
-when calling subroutines, ...), etc.
+Fixed link to Crosby paper on hash complexity attack in L<perlsec>.
 
 =back
 
-=head1 Configuration and Compilation
+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<XXX>
 
 =over 4
 
 =item *
 
-Dtrace builds now build successfully on systems with a newer dtrace
-that require an input object file that uses the probes in the F<.d>
-file.
+XXX Description of the change here
+
+=back
+
+=head1 Diagnostics
+
+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>.
+
+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.
 
-Previously the probe would fail and cause a build failure. [perl
-#122287]
+=head2 New Diagnostics
+
+XXX Newly added diagnostic messages go under here, separated into New Errors
+and New Warnings
+
+=head3 New Errors
+
+=over 4
 
 =item *
 
-F<installman> no longer warns if a module doesn't contain documentation,
-as this isn't actually an error. Now missing documentation will only
-be reported when using the B<--verbose> switch, and if it does, the
-missing documentation will be reported on C<STDOUT> instead of C<STDERR>.
+L<Bareword in require contains "%s"|perldiag/"Bareword in require contains "%s"">
 
 =item *
 
-The B<u> option to the C<ar> command was removed. This was redundant
-anyway, and on some systems, it caused a warning.
+L<Bareword in require maps to empty filename|perldiag/"Bareword in require maps to empty filename">
 
 =item *
 
-Added F<Configure> probes for C<newlocale>, C<freelocale>, and C<uselocale>.
+L<Bareword in require maps to disallowed filename "%s"|perldiag/"Bareword in require maps to disallowed filename "%s"">
 
 =item *
 
-Fix up dtrace compile/link for Solaris. [perl #127543]
+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
 
-=head1 Platform Support
+=head3 New Warnings
 
-=head2 Platform-Specific Notes
+=over 4
+
+=item *
+
+XXX L<message|perldiag/"message">
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+XXX Changes (i.e. rewording) of diagnostic messages go here
 
 =over 4
 
-=item Win32
+=item *
 
-=over
+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 *
 
-Building a 64-bit perl with a 64-bit GCC but a 32-bit gmake would
-result in an invalid C<$Config{archname}> for the resulting perl.
-[perl #127584]
+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 *
 
-Errors set by Winsock functions are now put directly into C<$^E>, and the
-relevant C<WSAE*> error codes are now exported from the L<Errno> and L<POSIX>
-modules for testing this against.
+C<< "string$scalar->$*" >> now correctly prefers concat overloading to
+string overlading if C<< $scalar->$* >> returns an overloaded object,
+bringing it into consistency with C<$$scalar>.
 
-The previous behaviour of putting the errors (converted to POSIX-style C<E*>
-error codes since Perl 5.20.0) into C<$!> was buggy due to the non-equivalence
-of like-named Winsock and POSIX error constants, a relationship between which
-has unfortunately been established in one way or another since Perl 5.8.0.
+=item *
 
-The new behaviour provides a much more robust solution for checking Winsock
-errors in portable software without accidentally matching POSIX tests that were
-intended for other OSes and may have different meanings for Winsock.
+C<< /@0{0*->@*/*0 >> and similar contortions used to crash, but no longer
+do, but merely produce a syntax error. [perl #128171]
 
-The old behaviour is currently retained, warts and all, for backwards
-compatibility, but users are encouraged to change any code that tests C<$!>
-against C<E*> constants for Winsock errors to instead test C<$^E> against
-C<WSAE*> constants.  After a suitable deprecation period, the old behaviour may
-be removed, leaving C<$!> unchanged after Winsock function calls, to avoid any
-possible confusion over which error variable to check.
+=item *
 
-=back
+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 Selected Bug Fixes
+=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<perlbug>
 
 =over 4
 
 =item *
 
-It now works properly to specify a user-defined property, such as
+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]
 
- qr/\p{mypkg1::IsMyProperty}/i
+=back
 
-with C</i> caseless matching, an explicit package name, and
-I<IsMyProperty> not defined at the time of the pattern compilation.
+=head1 Configuration and Compilation
 
-=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.
 
-Perl's memcpy(), memmove(), memset() and memcmp() fallbacks are now
-more compatible with the originals.  [perl #127619]
+[ List changes as a =item entry ].
+
+=over 4
 
 =item *
 
-The peak memory usage when compiling some regular expression patterns is
-now significantly smaller. [perl #127392]
+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 *
 
-A case has been fixed in which malformed UTF-8 in the source of a Perl
-script caused an assertion failure instead of an error message. [perl
-#127262]
+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 *
 
-Fixed a buffer overrun issue in F<Socked.xs> which was reported by Coverity.
-[CPAN #111707]
+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 * 
+=item *
 
-Fixed a possible division by 0 error in C<Scalar::List::Utils::product>
-(reported by Coverity). [CPAN #105415]
+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 *
 
-Fixed the issue where a C<< s///r >>) with B<< -DPERL_NO_COW >> attempts
-to modify the source SV, resulting in the program dying. [perl #127635]
+The build process no longer emits an extra blank line before building each
+"simple" extension (those with only F<*.pm> and F<*.pod> files).
 
-=item *
+=back
 
-Fixed a spurious warning about posix character classes. [perl #127581]
+=head1 Testing
 
-=item *
+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 ]
 
-Fixed an obscure case where a pattern could fail to match. This only 
-occurred when matching characters from the set of C1 controls, when
-the target matched string was in UTF-8, and only on EBCDIC platforms.
+=over 4
 
 =item *
 
-Fixed over eager warnings for C<< /[.foo.]/ >>.
+XXX
 
-This prevents Perl from warning about constructs like C<< /[.].*[.]/ >>.
-[perl #127582, #127604]
+=back
 
-=item *
+=head1 Platform Support
 
-Narrow the filename check in F<strict.pm> and F<warnings.pm>. Previously,
-it assumed that if the filename (without the F<.pmc?> extension) differed
-from the package name, if was a misspelled use statement (i.e. C<use Strict>
-instead of C<use strict>). We now check whether there's really a 
-miscapitalization happening, and not another issue.
+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. ]
 
-Turn an assertion into a more user friendly failure when parsing
-regexes. [perl #127599]
+=head2 New Platforms
 
-=item *
+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 ]
 
-Correctly raise an error when trying to compile patterns with 
-unterminated character classes while there are trailing backslashes.
-[perl #126141].
+=over 4
 
 =item *
 
-Added a guard against malformed UTF-8. [perl #127262]
+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.
+
+=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 *
 
-Only test C<semctl> if we have everything needed to use it. In a FreeBSD
-the C<semctl> entry point may exist, but it can be disabled by policy.
-[perl #127533]
+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 *
 
-Handle C<NOTHING> regops and C<EXACTFU_SS> regops in C<make_trie> properly.
-[perl #126206]
+C<reset> with an argument no longer crashes when encountering stash entries
+other than globs. [perl #128106]
 
 =item *
 
-Fix a Solaris optimiser bug which prevented certain regular expression
-to be compiled. [perl #127455]
+Assignment of hashes to, and deletion of, typeglobs named C<*::::::> no
+longer causes crashes. [perl #128086]
+
+=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.
+
+[ List each fix as a =item entry ]
+
+=over 4
 
 =item *
 
-Improved the detection of infinite recursion in regular expressions.
-Previously, perl would in certain cases slowly consume resources until
-finally running out of memory. [perl #126182]
+XXX
+
+=back
 
+=head1 Errata From Previous Releases
+
+=over 4
+
+=item *
+
+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:
+Generate this with:
 
-  perl Porting/acknowledgements.pl v5.23.8..HEAD
+  perl Porting/acknowledgements.pl v5.25.1..HEAD
 
 =head1 Reporting Bugs
 
@@ -313,15 +543,10 @@ 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 please send it
-to perl5-security-report@perl.org.  This points to a closed subscription
-unarchived mailing list, which includes all the core committers, who will be
-able to help assess the impact of issues, figure out a resolution, and help
-co-ordinate the release of patches to mitigate or fix the problem across all
-platforms on which Perl is supported.  Please only use this address for
-security issues in the Perl core, not for modules independently distributed on
-CPAN.
+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