diff options
author | Sawyer X <xsawyerx@cpan.org> | 2017-05-10 13:52:57 +0200 |
---|---|---|
committer | Sawyer X <xsawyerx@cpan.org> | 2017-05-10 13:52:57 +0200 |
commit | 18013bd117fb42703264c2bef220bb3539c8fe55 (patch) | |
tree | 7b129f586aea2d6810241bcb771a3055a513fae0 | |
parent | 0a541aca6cedf39f6295a2fd2528dbcf66a09521 (diff) | |
download | perl-18013bd117fb42703264c2bef220bb3539c8fe55.tar.gz |
Merge perl5251delta.pod
-rw-r--r-- | pod/perl5260delta.pod | 278 |
1 files changed, 272 insertions, 6 deletions
diff --git a/pod/perl5260delta.pod b/pod/perl5260delta.pod index 061998b6a1..f77208dfe5 100644 --- a/pod/perl5260delta.pod +++ b/pod/perl5260delta.pod @@ -9,6 +9,272 @@ perl5260delta - what is new for perl v5.26.0 This document describes the differences between the 5.24.0 release and the 5.26.0 release. +=head1 Core Enhancements + +=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 Performance Enhancements + +=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. + +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<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<threads> has been upgraded from version 2.07 to 2.08. Compatibility +with 5.8 has been restored. + +=back + +=head1 Documentation + +=head2 Changes to Existing Documentation + +=over 4 + +=item * + +Fixed link to Crosby paper on hash complexity attack in L<perlsec>. + +=back + +=head1 Diagnostics + +=head2 New Diagnostics + +=head3 New Errors + +=over 4 + +=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 + +=head2 Changes to Existing Diagnostics + +=over 4 + +=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 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<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 Internal Changes + +=over 4 + +=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. + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=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] + +=back + =head1 Known Problems =over 4 @@ -22,22 +288,22 @@ advice if needed. Below is a subset of these modules: =over 4 -=item L<Algorithm::Permute> +=item * L<Algorithm::Permute> -=item L<Coro> +=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<Data::Alias> -=item L<RPerl> +=item * L<RPerl> -=item L<Scope::Upper> +=item * L<Scope::Upper> -=item L<TryCatch> +=item * L<TryCatch> =back |