X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/2f4cbc090a480b0d02b4e74258b553c7998e45eb..496db20a8409859d443bad96455ea5af468b8369:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 9bef257..b7d21d8 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,344 +2,2961 @@ =head1 NAME -[ 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.26.0 -perldelta - what is new for perl v5.25.7 +=head1 DESCRIPTION + +This document describes the differences between the 5.24.0 release and the +5.26.0 release. + +=head1 Notice + +This release includes two updates with widespread effects: + +=over 4 + +=item * C<.> no longer in C<@INC> + +The current modules, and for the execution of scripts. See the section +L< from @INC>> for the full details. + +=item * C may now warn + +C now gives a mandatory warning when it fails to load a file which it +would have loaded had C<.> been in C<@INC>. + +=back + +=head1 Core Enhancements + +=head2 New regular expression modifier C + +Specifying two C characters to modify a regular expression pattern +does everything that a single one does, but additionally TAB and SPACE +characters within a bracketed character class are generally ignored and +can be added to improve readability, like +S>. Details are at +Lx and Exx>. + +=head2 New Hash Function For 64-bit Builds + +We have switched to a hybrid hash function to better balance +performance for short and long keys. + +For short keys, 16 bytes and under, we use an optimised variant of +One At A Time Hard, and for longer keys we use Siphash 1-3. For very +long keys this is a big improvement in performance. For shorter keys +there is a modest improvement. + +=head2 Indented Here-documents + +This adds a new modifier '~' to here-docs that tells the parser +that it should look for /^\s*$DELIM\n/ as the closing delimiter. + +These syntaxes are all supported: + + <<~EOF; + <<~\EOF; + <<~'EOF'; + <<~"EOF"; + <<~`EOF`; + <<~ 'EOF'; + <<~ "EOF"; + <<~ `EOF`; + +The '~' modifier will strip, from each line in the here-doc, the +same whitespace that appears before the delimiter. + +Newlines will be copied as is, and lines that don't include the +proper beginning whitespace will cause perl to croak. + +For example: + + if (1) { + print <<~EOF; + Hello there + EOF + } + +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 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 +themselves. E.g. L 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 +array. So C<$1> is C<${^CAPTURE}[0]>. This is a more efficient equivalent +to code like C, and you don't +have to keep track of the C<$matched_string> either. This variable has no +single character equivalent. Note like the other regex magic variables +the contents of this variable is dynamic, if you wish to store it beyond +the lifetime of the match you must copy it to another array. + +C<%{^CAPTURE}> is the equivalent to C<%+> (ie named captures). Other than +being more self documenting there is no difference between the two forms. + +C<%{^CAPTURE_ALL}> is the equivalent to C<%-> (ie all named captures). +Other than being more self documenting there is no difference between the +two forms. + +=head2 Unicode 9.0 is now supported + +A list of changes is at L. +Modules that are shipped with core Perl but not maintained by p5p do not +necessarily support Unicode 9.0. L does work on 9.0. + +=head2 Use of C<\p{I