In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/ad543fb2e0c8dd0e2d2ad81f708b4532dbe71d03?hp=fc902710d11a44a4b50af356f9ab348ec730b162>
- Log ----------------------------------------------------------------- commit ad543fb2e0c8dd0e2d2ad81f708b4532dbe71d03 Author: Karl Williamson <[email protected]> Date: Wed May 17 23:10:08 2017 -0600 perldelta: This file is for 5.26, not 5.24 M pod/perldelta.pod commit cc54cad05e7c2a2d63591c413ecd0fa0d42e8477 Author: Karl Williamson <[email protected]> Date: Wed May 17 23:09:01 2017 -0600 perldelta: Rmv entry that applies just to a devel release This is not applicable to someone upgrading from any prior stable release. M pod/perldelta.pod commit ee8180b8c5e0aa1d8498288146010a6a1c495452 Author: Karl Williamson <[email protected]> Date: Wed May 17 23:07:10 2017 -0600 perldelta: Don't mention development release numbers We have agreed in previous years that this is distracting detail to someone reading the stable release notes. There is still one left, but I ran out of time tonight to figure out what to say. M pod/perldelta.pod commit 16beba24e92d2740a8869b5a94e6ac2157925527 Author: Karl Williamson <[email protected]> Date: Wed May 17 23:05:32 2017 -0600 perldelta: Add unescaped "{" to Notice On irc, we agreed that this is important enough to be highighted there. M pod/perldelta.pod commit 8d25d2f390516ba484803448c25a89599d95382c Author: Karl Williamson <[email protected]> Date: Wed May 17 23:02:33 2017 -0600 perldelta: Move some alleged 'enhancements' to 'incompatible changes' I reordered the latter section so the most important things in my view were earlier in it. I also extensively reworded the unescaped { section to hopefully better explain it. I think the enhancements section should be reordered by importance. For example I don't think /xx is the most important enhancement in 5.26. But I'll let others decide. M pod/perldelta.pod commit f6ac163502646bdda38bee8e7380b266a2677a68 Author: Karl Williamson <[email protected]> Date: Wed May 17 23:00:47 2017 -0600 perldelta: Improve wording about Unicode scx property M pod/perldelta.pod commit 25138bbd6ce8481671e39c6b82cb4b94d83a9956 Author: Karl Williamson <[email protected]> Date: Wed May 17 22:51:46 2017 -0600 perldelta: Move section adjacent to similar one These two sections about @INC and dot need to be combined into one, and should be in Security. I'll let someone else take a stab at that. M pod/perldelta.pod commit a3f3223ababd6599a29851d4023bb4f47b60d676 Author: Karl Williamson <[email protected]> Date: Wed May 17 22:47:40 2017 -0600 perldelta: Remove duplicate entry M pod/perldelta.pod ----------------------------------------------------------------------- Summary of changes: pod/perldelta.pod | 175 +++++++++++++++++++++++++++--------------------------- 1 file changed, 89 insertions(+), 86 deletions(-) diff --git a/pod/perldelta.pod b/pod/perldelta.pod index f86b6dff41..41b1359082 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -11,7 +11,7 @@ This document describes the differences between the 5.24.0 release and the =head1 Notice -This release includes two updates with widespread effects: +This release includes three updates with widespread effects: =over 4 @@ -25,6 +25,11 @@ L<< Removal of the current directory (C<.>) from C<@INC> >> for the full details C<do> now gives a mandatory warning when it fails to load a file which it would have loaded had C<.> been in C<@INC>. +=item * In regular expression patterns, a literal left brace C<"{"> +should be escaped + +See L</Unescaped literal C<"{"> characters in regular expression patterns are no longer permissible>. + =back =head1 Core Enhancements @@ -80,33 +85,6 @@ For example: prints "Hello there\n" with no leading whitespace. -=head2 '.' and @INC - -Since time immemorial Perl has, as a last resort, loaded libraries -from the current directory. For security reasons this is no longer the -case, the C<@INC> variable no longer contains C<.> as its last element -by default. - -If you want to disable this behavior at compile-time build perl with -C<-Udefault_inc_excludes_dot> (C<-Ddefault_inc_excludes_dot> being the -default now). - -If you'd like to add C<.> back to C<@INC> at runtime set -C<PERL_USE_UNSAFE_INC=1> in the environment before starting -perl. Setting it to 1 restores C<.> in the C<@INC> when perl otherwise -lacks it. - -Various toolchain modules will set C<PERL_USE_UNSAFE_INC=1> -themselves. E.g. L<Test::Harness> sets it since loading modules from a -relative path is a common idiom in test code. If you find that you -have C<.> in C<@INC> on a perl built with default settings it's likely -that your code is being invoked by a toolchain module of some sort. - -=head2 create a safer utf8_hop() called utf8_hop_safe() - -Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or after -the end of the supplied buffer. - =head2 @{^CAPTURE}, %{^CAPTURE}, and %{^CAPTURE_ALL} C<@{^CAPTURE}> exposes the capture buffers of the last match as an @@ -133,12 +111,13 @@ necessarily support Unicode 9.0. L<Unicode::Normalize> does work on 9.0. =head2 Use of C<\p{I<script>}> uses the improved Script_Extensions property Unicode 6.0 introduced an improved form of the Script (C<sc>) property, and -called it Script_Extensions (C<scx>). As of now, Perl uses this improved -version when a property is specified as just C<\p{I<script>}>. The meaning of -compound forms, like C<\p{sc=I<script>}> are unchanged. This should make -programs be more accurate when determining if a character is used in a given -script, but there is a slight chance of breakage for programs that very -specifically needed the old behavior. See L<perlunicode/Scripts>. +called it Script_Extensions (C<scx>). Perl now uses this improved +version when a property is specified as just C<\p{I<script>}>. This +should make programs be more accurate when determining if a character is +used in a given script, but there is a slight chance of breakage for +programs that very specifically needed the old behavior. The meaning of +compound forms, like C<\p{sc=I<script>}> are unchanged. See +L<perlunicode/Scripts>. =head2 Declaring a reference to a variable @@ -189,48 +168,34 @@ be called with ampersand syntax (C<&CORE::keys(\%hash>) and via reference (C<< my $k = \&CORE::keys; $k-E<gt>(\%hash) >>). Previously they could only be used when inlined. -=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 create a safer utf8_hop() called utf8_hop_safe() -=head2 Literal control character variable names are no longer permissible +Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or after +the end of the supplied buffer. -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. +=head1 Security -=head2 C<NBSP> is no longer permissible in C<\N{...}> +=head2 '.' and @INC -The name of a character may no longer contain non-breaking spaces. It -has been deprecated to do so since Perl v5.22. +Since time immemorial Perl has, as a last resort, loaded libraries +from the current directory. For security reasons this is no longer the +case. This is controlled by the C<@INC> variable, and it no longer +defaults to containing C<.> as its last element. -=head2 create a safer utf8_hop() called utf8_hop_safe() +If you want to disable this behavior at compile-time, build perl with +C<-Udefault_inc_excludes_dot> (C<-Ddefault_inc_excludes_dot> being the +default now). -Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or after -the end of the supplied buffer. +If you'd like to add C<.> back to C<@INC> at runtime set +C<PERL_USE_UNSAFE_INC=1> in the environment before starting +perl. Setting it to 1 restores C<.> in the C<@INC> when perl otherwise +lacks it. -=head1 Security +Various toolchain modules will set C<PERL_USE_UNSAFE_INC=1> +themselves. E.g. L<Test::Harness> sets it since loading modules from a +relative path is a common idiom in test code. If you find that you +have C<.> in C<@INC> on a perl built with default settings it's likely +that your code is being invoked by a toolchain module of some sort. =head2 Removal of the current directory (C<.>) from C<@INC> @@ -435,12 +400,26 @@ C<stderr> as for any other C<-D> switch. =head1 Incompatible Changes -=head2 C<${^ENCODING}> has been removed +=head2 Unescaped literal C<"{"> characters in regular expression +patterns are no longer permissible -Consequently, the L<encoding> pragma's default mode is no longer supported. If -you still need to write your source code in encodings other than UTF-8, use a -source filter such as L<Filter::Encoding> on CPAN or L<encoding>'s C<Filter> -option. +You have to now say something like C<"\{"> or C<"[{]"> to specify to +match a LEFT CURLY BRACKET; otherwise it is a fatal pattern compilation +error. This change will allow future extensions to the language. + +These have been deprecated since v5.16, with a deprecation message +raised for some uses starting in v5.22. Unfortunately, the code added +to raise the message had bugs, and did not catch all the relevant uses +of literal C<"{">. So, some uses failed to be warned about. Therefore, +enforcement of this ban for these uses is deferred until Perl 5.30, and +a deprecation message is now raised for them. + +Some uses of literal C<"{"> occur in contexts where we do not foresee +the meaning be anything but the literal, such as the very first +character in the pattern. To avoid forcing needless code changes, this +restriction is not enforced, nor are there current plans to enforce it, +in those areas. But is always correct to escape C<"{">, and the simple +rule to remember is to do so. =head2 C<scalar(%hash)> return signature changed @@ -465,6 +444,38 @@ to in list context. This makes the lvalue sub case consistent with C<(keys %hash) = ...> and C<(keys @_) = ...>, which are also errors. [perl #128187] +=head2 C<${^ENCODING}> has been removed + +Consequently, the L<encoding> pragma's default mode is no longer supported. If +you still need to write your source code in encodings other than UTF-8, use a +source filter such as L<Filter::Encoding> on CPAN or L<encoding>'s C<Filter> +option. + +=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 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 +5.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<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 =head2 String delimiters that aren't stand-alone graphemes are now deprecated @@ -726,14 +737,14 @@ L<Encode> has been upgraded from version 2.80 to 2.88. L<encoding> has been upgraded from version 2.17 to 2.19. -This module's default mode is no longer supported as of Perl 5.25.3. It now +This module's default mode is no longer supported. It now dies when imported, unless the C<Filter> option is being used. =item * L<encoding::warnings> has been upgraded from version 0.12 to 0.13. -This module is no longer supported as of Perl 5.25.3. It emits a warning to +This module is no longer supported. It emits a warning to that effect and then does nothing. =item * @@ -2501,13 +2512,6 @@ in some cases. [perl #129340] =item * -Perl 5.25.9 was fixed so that under C<use utf8>, the entire Perl program -is checked that the UTF-8 is wellformed. It turns out that several edge -cases were missed, and are now fixed. [perl #126310] was the original -ticket. - -=item * - Under C<use utf8>, the entire Perl program is now checked that the UTF-8 is wellformed. This resolves [perl #126310]. @@ -3058,8 +3062,7 @@ GitHub|https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb =item * -Parsing bad POSIX charclasses no longer leaks memory. This was fixed in Perl -5.25.2 +Parsing bad POSIX charclasses no longer leaks memory. L<[perl #128313]|https://rt.perl.org/Public/Bug/Display.html?id=128313> =item * @@ -3098,7 +3101,7 @@ approximately 230,000 lines of changes to 1,800 .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.24.1: +improvements that became Perl 5.26.0: Aaron Crane, Abigail, Ãvar Arnfjörð Bjarmason, Alex Vandiver, Andreas König, Andreas Voegele, Andrew Fresh, Andy Lester, Aristotle Pagaltzis, Chad -- Perl5 Master Repository
