diff options
author | Sawyer X <xsawyerx@cpan.org> | 2017-05-31 02:42:31 +0200 |
---|---|---|
committer | Sawyer X <xsawyerx@cpan.org> | 2017-05-31 02:42:31 +0200 |
commit | b5cbfe3529c9377874557a6cb83bb4150586a187 (patch) | |
tree | c6100e459c782684c6e3766632c10c93d0a8c761 | |
parent | 71b01dc0dc008a3e2910655002a83938650a0dcb (diff) | |
download | perl-b5cbfe3529c9377874557a6cb83bb4150586a187.tar.gz |
perldelta: New perldelta (5.27.0)
-rw-r--r-- | MANIFEST | 1 | ||||
-rwxr-xr-x | Makefile.SH | 8 | ||||
-rw-r--r-- | pod/.gitignore | 2 | ||||
-rw-r--r-- | pod/perl.pod | 1 | ||||
-rw-r--r-- | pod/perl5260delta.pod | 3334 | ||||
-rw-r--r-- | pod/perldelta.pod | 3231 | ||||
-rw-r--r-- | vms/descrip_mms.template | 2 | ||||
-rw-r--r-- | win32/GNUmakefile | 4 | ||||
-rw-r--r-- | win32/Makefile | 4 | ||||
-rw-r--r-- | win32/makefile.mk | 4 | ||||
-rw-r--r-- | win32/pod.mak | 4 |
11 files changed, 3510 insertions, 3085 deletions
@@ -4931,6 +4931,7 @@ pod/perl5222delta.pod Perl changes in version 5.22.2 pod/perl5223delta.pod Perl changes in version 5.22.3 pod/perl5240delta.pod Perl changes in version 5.24.0 pod/perl5241delta.pod Perl changes in version 5.24.1 +pod/perl5260delta.pod Perl changes in version 5.26.0 pod/perl561delta.pod Perl changes in version 5.6.1 pod/perl56delta.pod Perl changes in version 5.6 pod/perl581delta.pod Perl changes in version 5.8.1 diff --git a/Makefile.SH b/Makefile.SH index 51d3c8ee47..b03ef87591 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -570,7 +570,7 @@ esac $spitshell >>$Makefile <<'!NO!SUBS!' -perltoc_pod_prereqs = extra.pods pod/perl5260delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod +perltoc_pod_prereqs = extra.pods pod/perl5270delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -1120,9 +1120,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) pod/perlmodlib.PL -q -pod/perl5260delta.pod: pod/perldelta.pod - $(RMS) pod/perl5260delta.pod - $(LNS) perldelta.pod pod/perl5260delta.pod +pod/perl5270delta.pod: pod/perldelta.pod + $(RMS) pod/perl5270delta.pod + $(LNS) perldelta.pod pod/perl5270delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` diff --git a/pod/.gitignore b/pod/.gitignore index 65c3d4d9e7..7ea041ad64 100644 --- a/pod/.gitignore +++ b/pod/.gitignore @@ -50,7 +50,7 @@ /roffitall # generated -/perl5260delta.pod +/perl5270delta.pod /perlapi.pod /perlintern.pod /perlmodlib.pod diff --git a/pod/perl.pod b/pod/perl.pod index 8e2041cb3b..a6d314e1e5 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -181,6 +181,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp perlhist Perl history records perldelta Perl changes since previous version + perl5260delta Perl changes in version 5.26.0 perl5241delta Perl changes in version 5.24.1 perl5240delta Perl changes in version 5.24.0 perl5223delta Perl changes in version 5.22.3 diff --git a/pod/perl5260delta.pod b/pod/perl5260delta.pod new file mode 100644 index 0000000000..a2a1484dbe --- /dev/null +++ b/pod/perl5260delta.pod @@ -0,0 +1,3334 @@ +=encoding utf8 + +=head1 NAME + +perl5260delta - what is new for perl v5.26.0 + +=head1 DESCRIPTION + +This document describes the differences between the 5.24.0 release and the +5.26.0 release. + +=head1 Notice + +This release includes three updates with widespread effects: + +=over 4 + +=item * C<"."> no longer in C<@INC> + +For security reasons, the current directory (C<".">) is no longer included +by default at the end of the module search path (C<@INC>). This may have +widespread implications for the building, testing and installing of +modules, and for the execution of scripts. See the section +L<< Removal of the current directory (C<".">) from C<@INC> >> +for the full details. + +=item * C<do> may now warn + +C<do> now gives a deprecation 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 + +=head2 Lexical subroutines are no longer experimental + +Using the C<lexical_subs> feature introduced in v5.18 no longer emits a warning. Existing +code that disables the C<experimental::lexical_subs> warning category +that the feature previously used will continue to work. The +C<lexical_subs> feature has no effect; all Perl code can use lexical +subroutines, regardless of what feature declarations are in scope. + +=head2 Indented Here-documents + +This adds a new modifier C<"~"> to here-docs that tells the parser +that it should look for C</^\s*$DELIM\n/> as the closing delimiter. + +These syntaxes are all supported: + + <<~EOF; + <<~\EOF; + <<~'EOF'; + <<~"EOF"; + <<~`EOF`; + <<~ 'EOF'; + <<~ "EOF"; + <<~ `EOF`; + +The C<"~"> 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 New regular expression modifier C</xx> + +Specifying two C<"x"> 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<C</[ ^ A-Z d-f p-x ]/xx>>. Details are at +L<perlre/E<sol>x and E<sol>xx>. + +=head2 C<@{^CAPTURE}>, C<%{^CAPTURE}>, and C<%{^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<substr($matched_string,$-[0],$+[0]-$-[0])>, and you don't +have to keep track of the C<$matched_string> either. This variable has no +single character equivalent. Note that, 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 equivalent to C<%+> (I<i.e.>, named captures). Other than +being more self-documenting there is no difference between the two forms. + +C<%{^CAPTURE_ALL}> is equivalent to C<%-> (I<i.e.>, all named captures). +Other than being more self-documenting there is no difference between the +two forms. + +=head2 Declaring a reference to a variable + +As an experimental feature, Perl now allows the referencing operator to come +after L<C<my()>|perlfunc/my>, L<C<state()>|perlfunc/state>, +L<C<our()>|perlfunc/our>, or L<C<local()>|perlfunc/local>. This syntax must +be enabled with C<use feature 'declared_refs'>. It is experimental, and will +warn by default unless C<no warnings 'experimental::refaliasing'> is in effect. +It is intended mainly for use in assignments to references. For example: + + use experimental 'refaliasing', 'declared_refs'; + my \$a = \$b; + +See L<perlref/Assigning to References> for more details. + +=head2 Unicode 9.0 is now supported + +A list of changes is at L<http://www.unicode.org/versions/Unicode9.0.0/>. +Modules that are shipped with core Perl but not maintained by p5p do not +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>). Perl now uses this improved +version when a property is specified as just C<\p{I<script>}>. This +should make programs 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 Perl can now do default collation in UTF-8 locales on platforms +that support it + +Some platforms natively do a reasonable job of collating and sorting in +UTF-8 locales. Perl now works with those. For portability and full +control, L<Unicode::Collate> is still recommended, but now you may +not need to do anything special to get good-enough results, depending on +your application. See +L<perllocale/Category C<LC_COLLATE>: Collation: Text Comparisons and Sorting>. + +=head2 Better locale collation of strings containing embedded C<NUL> +characters + +In locales that have multi-level character weights, C<NUL>s are now +ignored at the higher priority ones. There are still some gotchas in +some strings, though. See +L<perllocale/Collation of strings containing embedded C<NUL> characters>. + +=head2 C<CORE> subroutines for hash and array functions callable via +reference + +The hash and array functions in the C<CORE> namespace (C<keys>, C<each>, +C<values>, C<push>, C<pop>, C<shift>, C<unshift> and C<splice>) can now +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 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. + +=head1 Security + +=head2 Removal of the current directory (C<".">) from C<@INC> + +The perl binary includes a default set of paths in C<@INC>. Historically +it has also included the current directory (C<".">) as the final entry, +unless run with taint mode enabled (C<perl -T>). While convenient, this has +security implications: for example, where a script attempts to load an +optional module when its current directory is untrusted (such as F</tmp>), +it could load and execute code from under that directory. + +Starting with v5.26, C<"."> is always removed by default, not just under +tainting. This has major implications for installing modules and executing +scripts. + +The following new features have been added to help ameliorate these +issues. + +=over + +=item * F<Configure -Udefault_inc_excludes_dot> + +There is a new F<Configure> option, C<default_inc_excludes_dot> (enabled +by default) which builds a perl executable without C<".">; unsetting this +option using C<-U> reverts perl to the old behaviour. This may fix your +path issues but will reintroduce all the security concerns, so don't +build a perl executable like this unless you're I<really> confident that +such issues are not a concern in your environment. + +=item * C<PERL_USE_UNSAFE_INC> + +There is a new environment variable recognised by the perl interpreter. +If this variable has the value 1 when the perl interpreter starts up, +then C<"."> will be automatically appended to C<@INC> (except under tainting). + +This allows you restore the old perl interpreter behaviour on a +case-by-case basis. But note that this is intended to be a temporary crutch, +and this feature will likely be removed in some future perl version. +It is currently set by the C<cpan> utility and C<Test::Harness> to +ease installation of CPAN modules which have not been updated to handle the +lack of dot. Once again, don't use this unless you are sure that this +will not reintroduce any security concerns. + +=item * A new deprecation warning issued by C<do>. + +While it is well-known that C<use> and C<require> use C<@INC> to search +for the file to load, many people don't realise that C<do "file"> also +searches C<@INC> if the file is a relative path. With the removal of C<".">, +a simple C<do "file.pl"> will fail to read in and execute C<file.pl> from +the current directory. Since this is commonly expected behaviour, a new +deprecation warning is now issued whenever C<do> fails to load a file which +it otherwise would have found if a dot had been in C<@INC>. + +=back + +Here are some things script and module authors may need to do to make +their software work in the new regime. + +=over + +=item * Script authors + +If the issue is within your own code (rather than within included +modules), then you have two main options. Firstly, if you are confident +that your script will only be run within a trusted directory (under which +you expect to find trusted files and modules), then add C<"."> back into the +path; I<e.g.>: + + BEGIN { + my $dir = "/some/trusted/directory"; + chdir $dir or die "Can't chdir to $dir: $!\n"; + # safe now + push @INC, '.'; + } + + use "Foo::Bar"; # may load /some/trusted/directory/Foo/Bar.pm + do "config.pl"; # may load /some/trusted/directory/config.pl + +On the other hand, if your script is intended to be run from within +untrusted directories (such as F</tmp>), then your script suddenly failing +to load files may be indicative of a security issue. You most likely want +to replace any relative paths with full paths; for example, + + do "foo_config.pl" + +might become + + do "$ENV{HOME}/foo_config.pl" + +If you are absolutely certain that you want your script to load and +execute a file from the current directory, then use a C<./> prefix; for +example: + + do "./foo_config.pl" + +=item * Installing and using CPAN modules + +If you install a CPAN module using an automatic tool like C<cpan>, then +this tool will itself set the C<PERL_USE_UNSAFE_INC> environment variable +while building and testing the module, which may be sufficient to install +a distribution which hasn't been updated to be dot-aware. If you want to +install such a module manually, then you'll need to replace the +traditional invocation: + + perl Makefile.PL && make && make test && make install + +with something like + + (export PERL_USE_UNSAFE_INC=1; \ + perl Makefile.PL && make && make test && make install) + +Note that this only helps build and install an unfixed module. It's +possible for the tests to pass (since they were run under +C<PERL_USE_UNSAFE_INC=1>), but for the module itself to fail to perform +correctly in production. In this case, you may have to temporarily modify +your script until a fixed version of the module is released. +For example: + + use Foo::Bar; + { + local @INC = (@INC, '.'); + # assuming read_config() needs '.' in @INC + $config = Foo::Bar->read_config(); + } + +This is only rarely expected to be necessary. Again, if doing this, +assess the resultant risks first. + +=item * Module Authors + +If you maintain a CPAN distribution, it may need updating to run in +a dotless environment. Although C<cpan> and other such tools will +currently set the C<PERL_USE_UNSAFE_INC> during module build, this is a +temporary workaround for the set of modules which rely on C<"."> being in +C<@INC> for installation and testing, and this may mask deeper issues. It +could result in a module which passes tests and installs, but which +fails at run time. + +During build, test, and install, it will normally be the case that any perl +processes will be executing directly within the root directory of the +untarred distribution, or a known subdirectory of that, such as F<t/>. It +may well be that F<Makefile.PL> or F<t/foo.t> will attempt to include +local modules and configuration files using their direct relative +filenames, which will now fail. + +However, as described above, automatic tools like F<cpan> will (for now) +set the C<PERL_USE_UNSAFE_INC> environment variable, which introduces +dot during a build. + +This makes it likely that your existing build and test code will work, but +this may mask issues with your code which only manifest when used after +install. It is prudent to try and run your build process with that +variable explicitly disabled: + + (export PERL_USE_UNSAFE_INC=0; \ + perl Makefile.PL && make && make test && make install) + +This is more likely to show up any potential problems with your module's +build process, or even with the module itself. Fixing such issues will +ensure both that your module can again be installed manually, and that +it will still build once the C<PERL_USE_UNSAFE_INC> crutch goes away. + +When fixing issues in tests due to the removal of dot from C<@INC>, +reinsertion of dot into C<@INC> should be performed with caution, for this +too may suppress real errors in your runtime code. You are encouraged +wherever possible to apply the aforementioned approaches with explicit +absolute/relative paths, or to relocate your needed files into a +subdirectory and insert that subdirectory into C<@INC> instead. + +If your runtime code has problems under the dotless C<@INC>, then the comments +above on how to fix for script authors will mostly apply here too. Bear in +mind though that it is considered bad form for a module to globally add a dot to +C<@INC>, since it introduces both a security risk and hides issues of +accidentally requiring dot in C<@INC>, as explained above. + +=back + +=head2 Escaped colons and relative paths in PATH + +On Unix systems, Perl treats any relative paths in the C<PATH> environment +variable as tainted when starting a new process. Previously, it was +allowing a backslash to escape a colon (unlike the OS), consequently +allowing relative paths to be considered safe if the PATH was set to +something like C</\:.>. The check has been fixed to treat C<"."> as tainted +in that example. + +=head2 New C<-Di> switch is now required for PerlIO debugging output + +This is used for debugging of code within PerlIO to avoid recursive +calls. Previously this output would be sent to the file specified +by the C<PERLIO_DEBUG> environment variable if perl wasn't running +setuid and the C<-T> or C<-t> switches hadn't been parsed yet. + +If perl performed output at a point where it hadn't yet parsed its +switches this could result in perl creating or overwriting the file +named by C<PERLIO_DEBUG> even when the C<-T> switch had been supplied. + +Perl now requires the C<-Di> switch to be present before it will produce +PerlIO debugging +output. By default this is written to C<stderr>, but can optionally +be redirected to a file by setting the C<PERLIO_DEBUG> environment +variable. + +If perl is running setuid or the C<-T> switch was supplied, +C<PERLIO_DEBUG> is ignored and the debugging output is sent to +C<stderr> as for any other C<-D> switch. + +=head1 Incompatible Changes + +=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; 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 was buggy and failed to warn in some cases where +it should have. Therefore, enforcement of this ban for these cases is +deferred until Perl 5.30, but the code has been fixed to raise a +default-on deprecation message for them in the meantime. + +Some uses of literal C<"{"> occur in contexts where we do not foresee +the meaning ever being anything but the literal, such as the very first +character in the pattern, or after a C<"|"> meaning alternation. Thus + + qr/{fee|{fie/ + +matches either of the strings C<{fee> or C<{fie>. To avoid forcing +unnecessary code changes, these uses do not need to be escaped, and no +warning is raised about them, and there are no current plans to change this. + +But it is always correct to escape C<"{">, and the simple rule to +remember is to always do so. + +See L<Unescaped left brace in regex is illegal here|perldiag/Unescaped left brace in regex is illegal here in regex; marked by S<E<lt>-- HERE> in mE<sol>%sE<sol>>. + +=head2 C<scalar(%hash)> return signature changed + +The value returned for C<scalar(%hash)> will no longer show information about +the buckets allocated in the hash. It will simply return the count of used +keys. It is thus equivalent to C<0+keys(%hash)>. + +A form of backward compatibility is provided via +L<C<Hash::Util::bucket_ratio()>|Hash::Util/bucket_ratio> which provides +the same behavior as +C<scalar(%hash)> provided in Perl 5.24 and earlier. + +=head2 C<keys> returned from an lvalue subroutine + +C<keys> returned from an lvalue subroutine can no longer be assigned +to in list context. + + sub foo : lvalue { keys(%INC) } + (foo) = 3; # death + sub bar : lvalue { keys(@_) } + (bar) = 3; # also an error + +This makes the lvalue sub case consistent with C<(keys %hash) = ...> and +C<(keys @_) = ...>, which are also errors. +L<[perl #128187]|https://rt.perl.org/Public/Bug/Display.html?id=128187> + +=head2 The C<${^ENCODING}> facility has been removed + +The special behaviour associated with assigning a value to this variable +has been removed. As a consequence, 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 C<POSIX::tmpnam()> has been removed + +The fundamentally unsafe C<tmpnam()> interface was deprecated in +Perl 5.22 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 5.22. + +=head1 Deprecations + +=head2 String delimiters that aren't stand-alone graphemes are now deprecated + +For Perl to eventually allow string delimiters to be Unicode +grapheme clusters (which look like a single character, but may be +a sequence of several ones), we have to stop allowing a single character +delimiter that isn't a grapheme by itself. These are unlikely to exist +in actual code, as they would typically display as attached to the +character in front of them. + +=head2 C<\cI<X>> that maps to a printable is no longer deprecated + +This means we have no plans to remove this feature. It still raises a +warning, but only if syntax warnings are enabled. The feature was +originally intended to be a way to express non-printable characters that +don't have a mnemonic (C<\t> and C<\n> are mnemonics for two +non-printable characters, but most non-printables don't have a +mnemonic.) But the feature can be used to specify a few printable +characters, though those are more clearly expressed as the printable +itself. See +L<http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html>. + +=head1 Performance Enhancements + +=over 4 + +=item * + +A hash in boolean context is now sometimes faster, I<e.g.> + + if (!%h) { ... } + +This was already special-cased, but some cases were missed (such as +C<grep %$_, @AoH>), and even the ones which weren't have been improved. + +=item * New Faster Hash Function on 64 bit builds + +We use a different hash function for short and long keys. This should +improve performance and security, especially for long keys. + +=item * readline is faster + +Reading from a file line-by-line with C<readline()> or C<< E<lt>E<gt> >> should +now typically be faster due to a better implementation of the code that +searches for the next newline character. + +=item * + +Assigning one reference to another, I<e.g.> C<$ref1 = $ref2> has been +optimized in some cases. + +=item * + +Remove some exceptions to creating Copy-on-Write strings. The string +buffer growth algorithm has been slightly altered so that you're less +likely to encounter a string which can't be COWed. + +=item * + +Better optimise array and hash assignment: where an array or hash appears +in the LHS of a list assignment, such as C<(..., @a) = (...);>, it's +likely to be considerably faster, especially if it involves emptying the +array/hash. For example, this code runs about a third faster compared to +Perl 5.24.0: + + my @a; + for my $i (1..10_000_000) { + @a = (1,2,3); + @a = (); + } + +=item * + +Converting a single-digit string to a number is now substantially faster. + +=item * + +The C<split> builtin is now slightly faster in many cases: in particular +for the two specially-handled forms + + my @a = split ...; + local @a = split ...; + +=item * + +The rather slow implementation for the experimental subroutine signatures +feature has been made much faster; it is now comparable in speed with the +traditional C<my ($a, $b, @c) = @_>. + +=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 * + +IO::Compress has been upgraded from version 2.069 to 2.074. + +=item * + +L<Archive::Tar> has been upgraded from version 2.04 to 2.24. + +=item * + +L<arybase> has been upgraded from version 0.11 to 0.12. + +=item * + +L<attributes> has been upgraded from version 0.27 to 0.29. + +The deprecation message for the C<:unique> and C<:locked> attributes +now mention that they will disappear in Perl 5.28. + +=item * + +L<B> has been upgraded from version 1.62 to 1.68. + +=item * + +L<B::Concise> has been upgraded from version 0.996 to 0.999. + +Its output is now more descriptive for C<op_private> flags. + +=item * + +L<B::Debug> has been upgraded from version 1.23 to 1.24. + +=item * + +L<B::Deparse> has been upgraded from version 1.37 to 1.40. + +=item * + +L<B::Xref> has been upgraded from version 1.05 to 1.06. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<base> has been upgraded from version 2.23 to 2.25. + +=item * + +L<bignum> has been upgraded from version 0.42 to 0.47. + +=item * + +L<Carp> has been upgraded from version 1.40 to 1.42. + +=item * + +L<charnames> has been upgraded from version 1.43 to 1.44. + +=item * + +L<Compress::Raw::Bzip2> has been upgraded from version 2.069 to 2.074. + +=item * + +L<Compress::Raw::Zlib> has been upgraded from version 2.069 to 2.074. + +=item * + +L<Config::Perl::V> has been upgraded from version 0.25 to 0.28. + +=item * + +L<CPAN> has been upgraded from version 2.11 to 2.18. + +=item * + +L<CPAN::Meta> has been upgraded from version 2.150005 to 2.150010. + +=item * + +L<Data::Dumper> has been upgraded from version 2.160 to 2.167. + +The XS implementation now supports Deparse. + +=item * + +L<DB_File> has been upgraded from version 1.835 to 1.840. + +=item * + +L<Devel::Peek> has been upgraded from version 1.23 to 1.26. + +=item * + +L<Devel::PPPort> has been upgraded from version 3.32 to 3.35. + +=item * + +L<Devel::SelfStubber> has been upgraded from version 1.05 to 1.06. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<diagnostics> has been upgraded from version 1.34 to 1.36. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<Digest> has been upgraded from version 1.17 to 1.17_01. + +=item * + +L<Digest::MD5> has been upgraded from version 2.54 to 2.55. + +=item * + +L<Digest::SHA> has been upgraded from version 5.95 to 5.96. + +=item * + +L<DynaLoader> has been upgraded from version 1.38 to 1.42. + +=item * + +L<Encode> has been upgraded from version 2.80 to 2.88. + +=item * + +L<encoding> has been upgraded from version 2.17 to 2.19. + +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. It emits a warning to +that effect and then does nothing. + +=item * + +L<Errno> has been upgraded from version 1.25 to 1.28. + +It now documents that using C<%!> automatically loads Errno for you. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<ExtUtils::Embed> has been upgraded from version 1.33 to 1.34. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<ExtUtils::MakeMaker> has been upgraded from version 7.10_01 to 7.24. + +=item * + +L<ExtUtils::Miniperl> has been upgraded from version 1.05 to 1.06. + +=item * + +L<ExtUtils::ParseXS> has been upgraded from version 3.31 to 3.34. + +=item * + +L<ExtUtils::Typemaps> has been upgraded from version 3.31 to 3.34. + +=item * + +L<feature> has been upgraded from version 1.42 to 1.47. + +=item * + +L<File::Copy> has been upgraded from version 2.31 to 2.32. + +=item * + +L<File::Fetch> has been upgraded from version 0.48 to 0.52. + +=item * + +L<File::Glob> has been upgraded from version 1.26 to 1.28. + +It now Issues a deprecation message for C<File::Glob::glob()>. + +=item * + +L<File::Spec> has been upgraded from version 3.63 to 3.67. + +=item * + +L<FileHandle> has been upgraded from version 2.02 to 2.03. + +=item * + +L<Filter::Simple> has been upgraded from version 0.92 to 0.93. + +It no longer treats C<no MyFilter> immediately following C<use MyFilter> as +end-of-file. +L<[perl #107726]|https://rt.perl.org/Public/Bug/Display.html?id=107726> + +=item * + +L<Getopt::Long> has been upgraded from version 2.48 to 2.49. + +=item * + +L<Getopt::Std> has been upgraded from version 1.11 to 1.12. + +=item * + +L<Hash::Util> has been upgraded from version 0.19 to 0.22. + +=item * + +L<HTTP::Tiny> has been upgraded from version 0.056 to 0.070. + +Internal 599-series errors now include the redirect history. + +=item * + +L<I18N::LangTags> has been upgraded from version 0.40 to 0.42. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<IO> has been upgraded from version 1.36 to 1.38. + +=item * + +L<IO::Socket::IP> has been upgraded from version 0.37 to 0.38. + +=item * + +L<IPC::Cmd> has been upgraded from version 0.92 to 0.96. + +=item * + +L<IPC::SysV> has been upgraded from version 2.06_01 to 2.07. + +=item * + +L<JSON::PP> has been upgraded from version 2.27300 to 2.27400_02. + +=item * + +L<lib> has been upgraded from version 0.63 to 0.64. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<List::Util> has been upgraded from version 1.42_02 to 1.46_02. + +=item * + +L<Locale::Codes> has been upgraded from version 3.37 to 3.42. + +=item * + +L<Locale::Maketext> has been upgraded from version 1.26 to 1.28. + +=item * + +L<Locale::Maketext::Simple> has been upgraded from version 0.21 to 0.21_01. + +=item * + +L<Math::BigInt> has been upgraded from version 1.999715 to 1.999806. + +=item * + +L<Math::BigInt::FastCalc> has been upgraded from version 0.40 to 0.5005. + +=item * + +L<Math::BigRat> has been upgraded from version 0.260802 to 0.2611. + +=item * + +L<Math::Complex> has been upgraded from version 1.59 to 1.5901. + +=item * + +L<Memoize> has been upgraded from version 1.03 to 1.03_01. + +=item * + +L<Module::CoreList> has been upgraded from version 5.20170420 to 5.20170530. + +=item * + +L<Module::Load::Conditional> has been upgraded from version 0.64 to 0.68. + +=item * + +L<Module::Metadata> has been upgraded from version 1.000031 to 1.000033. + +=item * + +L<mro> has been upgraded from version 1.18 to 1.20. + +=item * + +L<Net::Ping> has been upgraded from version 2.43 to 2.55. + +IPv6 addresses and C<AF_INET6> sockets are now supported, along with several +other enhancements. + +=item * + +L<NEXT> has been upgraded from version 0.65 to 0.67. + +=item * + +L<Opcode> has been upgraded from version 1.34 to 1.39. + +=item * + +L<open> has been upgraded from version 1.10 to 1.11. + +=item * + +L<OS2::Process> has been upgraded from version 1.11 to 1.12. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<overload> has been upgraded from version 1.26 to 1.28. + +Its compilation speed has been improved slightly. + +=item * + +L<parent> has been upgraded from version 0.234 to 0.236. + +=item * + +L<perl5db.pl> has been upgraded from version 1.50 to 1.51. + +It now ignores F</dev/tty> on non-Unix systems. +L<[perl #113960]|https://rt.perl.org/Public/Bug/Display.html?id=113960> + +=item * + +L<Perl::OSType> has been upgraded from version 1.009 to 1.010. + +=item * + +L<perlfaq> has been upgraded from version 5.021010 to 5.021011. + +=item * + +L<PerlIO> has been upgraded from version 1.09 to 1.10. + +=item * + +L<PerlIO::encoding> has been upgraded from version 0.24 to 0.25. + +=item * + +L<PerlIO::scalar> has been upgraded from version 0.24 to 0.26. + +=item * + +L<Pod::Checker> has been upgraded from version 1.60 to 1.73. + +=item * + +L<Pod::Functions> has been upgraded from version 1.10 to 1.11. + +=item * + +L<Pod::Html> has been upgraded from version 1.22 to 1.2202. + +=item * + +L<Pod::Perldoc> has been upgraded from version 3.25_02 to 3.28. + +=item * + +L<Pod::Simple> has been upgraded from version 3.32 to 3.35. + +=item * + +L<Pod::Usage> has been upgraded from version 1.68 to 1.69. + +=item * + +L<POSIX> has been upgraded from version 1.65 to 1.76. + +This remedies several defects in making its symbols exportable. +L<[perl #127821]|https://rt.perl.org/Public/Bug/Display.html?id=127821> + +The C<POSIX::tmpnam()> interface has been removed, +see L</"POSIX::tmpnam() has been removed">. + +The following deprecated functions have been removed: + + POSIX::isalnum + POSIX::isalpha + POSIX::iscntrl + POSIX::isdigit + POSIX::isgraph + POSIX::islower + POSIX::isprint + POSIX::ispunct + POSIX::isspace + POSIX::isupper + POSIX::isxdigit + POSIX::tolower + POSIX::toupper + +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<re> has been upgraded from version 0.32 to 0.34 + +This adds support for the new L<C<E<47>xx>|perlre/E<sol>x and E<sol>xx> +regular expression pattern modifier, and a change to the L<S<C<use re +'strict'>>|re/'strict' mode> experimental feature. When S<C<re +'strict'>> is enabled, a warning now will be generated for all +unescaped uses of the two characters C<"}"> and C<"]"> in regular +expression patterns (outside bracketed character classes) that are taken +literally. This brings them more in line with the C<")"> character which +is always a metacharacter unless escaped. Being a metacharacter only +sometimes, depending on an action at a distance, can lead to silently +having the pattern mean something quite different than was intended, +which the S<C<re 'strict'>> mode is intended to minimize. + +=item * + +L<Safe> has been upgraded from version 2.39 to 2.40. + +=item * + +L<Scalar::Util> has been upgraded from version 1.42_02 to 1.46_02. + +=item * + +L<Storable> has been upgraded from version 2.56 to 2.62. + +Fixes +L<[perl #130098]|https://rt.perl.org/Public/Bug/Display.html?id=130098>. + +=item * + +L<Symbol> has been upgraded from version 1.07 to 1.08. + +=item * + +L<Sys::Syslog> has been upgraded from version 0.33 to 0.35. + +=item * + +L<Term::ANSIColor> has been upgraded from version 4.04 to 4.06. + +=item * + +L<Term::ReadLine> has been upgraded from version 1.15 to 1.16. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<Test> has been upgraded from version 1.28 to 1.30. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<Test::Harness> has been upgraded from version 3.36 to 3.38. + +=item * + +L<Test::Simple> has been upgraded from version 1.001014 to 1.302073. + +=item * + +L<Thread::Queue> has been upgraded from version 3.09 to 3.12. + +=item * + +L<Thread::Semaphore> has been upgraded from 2.12 to 2.13. + +Added the C<down_timed> method. + +=item * + +L<threads> has been upgraded from version 2.07 to 2.15. + +=item * + +L<threads::shared> has been upgraded from version 1.51 to 1.56. + +=item * + +L<Tie::Hash::NamedCapture> has been upgraded from version 0.09 to 0.10. + +=item * + +L<Time::HiRes> has been upgraded from version 1.9733 to 1.9741. + +It now builds on systems with C++11 compilers (such as G++ 6 and Clang++ +3.9). + +Now uses C<clockid_t>. + +=item * + +L<Time::Local> has been upgraded from version 1.2300 to 1.25. + +=item * + +L<Unicode::Collate> has been upgraded from version 1.14 to 1.19. + +=item * + +L<Unicode::UCD> has been upgraded from version 0.64 to 0.68. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<version> has been upgraded from version 0.9916 to 0.9917. + +=item * + +L<VMS::DCLsym> has been upgraded from version 1.06 to 1.08. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=item * + +L<warnings> has been upgraded from version 1.36 to 1.37. + +=item * + +L<XS::Typemap> has been upgraded from version 0.14 to 0.15. + +=item * + +L<XSLoader> has been upgraded from version 0.21 to 0.27. + +Fixed a security hole in which binary files could be loaded from a path +outside of L<C<@INC>|perlvar/@INC>. + +It now uses 3-arg C<open()> instead of 2-arg C<open()>. +L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> + +=back + +=head1 Documentation + +=head2 New Documentation + +=head3 L<perldeprecation> + +This file documents all upcoming deprecations, and some of the deprecations +which already have been removed. The purpose of this documentation is +two-fold: document what will disappear, and by which version, and serve +as a guide for people dealing with code which has features that no longer +work after an upgrade of their perl. + +=head2 Changes to Existing Documentation + +We have attempted to update the documentation to reflect the changes +listed in this document. If you find any we have missed, send email to +L<perlbug@perl.org|mailto:perlbug@perl.org>. + +Additionally, all references to Usenet have been removed, and the +following selected changes have been made: + +=head3 L<perlfunc> + +=over 4 + +=item * + +Removed obsolete text about L<C<defined()>|perlfunc/defined> +on aggregates that should have been deleted earlier, when the feature +was removed. + +=item * + +Corrected documentation of L<C<eval()>|perlfunc/eval>, +and L<C<evalbytes()>|perlfunc/evalbytes>. + +=item * + +Clarified documentation of L<C<seek()>|perlfunc/seek>, +L<C<tell()>|perlfunc/tell> and L<C<sysseek()>|perlfunc/sysseek> +emphasizing that positions are in bytes and not characters. +L<[perl #128607]|https://rt.perl.org/Public/Bug/Display.html?id=128607> + +=item * + +Clarified documentation of L<C<sort()>|perlfunc/sort LIST> concerning +the variables C<$a> and C<$b>. + +=item * + +In L<C<split()>|perlfunc/split> noted that certain pattern modifiers are +legal, and added a caution about its use in Perls before v5.11. + +=item * + +Removed obsolete documentation of L<C<study()>|perlfunc/study>, noting +that it is now a no-op. + +=item * + +Noted that L<C<vec()>|perlfunc/vec> doesn't work well when the string +contains characters whose code points are above 255. + +=back + +=head3 L<perlguts> + +=over 4 + +=item * + +Added advice on +L<formatted printing of operands of C<Size_t> and C<SSize_t>|perlguts/Formatted Printing of Size_t and SSize_t> + +=back + +=head3 L<perlhack> + +=over 4 + +=item * + +Clarify what editor tab stop rules to use, and note that we are +migrating away from using tabs, replacing them with sequences of SPACE +characters. + +=back + +=head3 L<perlhacktips> + +=over 4 + +=item * + +Give another reason to use C<cBOOL> to cast an expression to boolean. + +=item * + +Note that the macros C<TRUE> and C<FALSE> are available to express +boolean values. + +=back + +=head3 L<perlinterp> + +=over 4 + +=item * + +L<perlinterp> has been expanded to give a more detailed example of how to +hunt around in the parser for how a given operator is handled. + +=back + +=head3 L<perllocale> + +=over 4 + +=item * + +Some locales aren't compatible with Perl. Note that these can cause +core dumps. + +=back + +=head3 L<perlmod> + +=over 4 + +=item * + +Various clarifications have been added. + +=back + +=head3 L<perlmodlib> + +=over 4 + +=item * + +Updated the site mirror list. + +=back + +=head3 L<perlobj> + +=over 4 + +=item * + +Added a section on calling methods using their fully qualified names. + +=item * + +Do not discourage manual C<@ISA>. + +=back + +=head3 L<perlootut> + +=over 4 + +=item * + +Mention C<Moo> more. + +=back + +=head3 L<perlop> + +=over 4 + +=item * + +Note that white space must be used for quoting operators if the +delimiter is a word character (I<i.e.>, matches C<\w>). + +=item * + +Clarify that in regular expression patterns delimited by single quotes, +no variable interpolation is done. + +=back + +=head3 L<perlre> + +=over 4 + +=item * + +The first part was extensively rewritten to incorporate various basic +points, that in earlier versions were mentioned in sort of an appendix +on Version 8 regular expressions. + +=item * + +Note that it is common to have the C</x> modifier and forget that this +means that C<"#"> has to be escaped. + +=back + +=head3 L<perlretut> + +=over 4 + +=item * + +Add introductory material. + +=item * + +Note that a metacharacter occurring in a context where it can't mean +that, silently loses its meta-ness and matches literally. +L<C<use re 'strict'>|re/'strict' mode> can catch some of these. + +=back + +=head3 L<perlunicode> + +=over 4 + +=item * + +Corrected the text about Unicode BYTE ORDER MARK handling. + +=item * + +Updated the text to correspond with changes in Unicode UTS#18, concerning +regular expressions, and Perl compatibility with what it says. + +=back + +=head3 L<perlvar> + +=over 4 + +=item * + +Document C<@ISA>. It was documented in other places, but not in L<perlvar>. + +=back + +=head1 Diagnostics + +=head2 New Diagnostics + +=head3 New Errors + +=over 4 + +=item * + +L<A signature parameter must start with C<'$'>, C<'@'> or C<'%'> +|perldiag/A signature parameter must start with C<'$'>, C<'@'> or C<'%'>> + +=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""> + +=item * + +L<%s: command not found|perldiag/"%s: command not found"> + +(A) You've accidentally run your script through B<bash> or another shell +instead of Perl. Check the C<#!> line, or manually feed your script into +Perl yourself. The C<#!> line at the top of your file could look like: + + #!/usr/bin/perl + +=item * + +L<%s: command not found: %s|perldiag/"%s: command not found: %s"> + +(A) You've accidentally run your script through B<zsh> or another shell +instead of Perl. Check the C<#!> line, or manually feed your script into +Perl yourself. The C<#!> line at the top of your file could look like: + + #!/usr/bin/perl + +=item * + +L<The experimental declared_refs feature is not enabled|perldiag/"The experimental declared_refs feature is not enabled"> + +(F) To declare references to variables, as in C<my \%x>, you must first enable +the feature: + + no warnings "experimental::declared_refs"; + use feature "declared_refs"; + +See L</Declaring a reference to a variable>. + +=item * + +L<Illegal character following sigil in a subroutine signature +|perldiag/Illegal character following sigil in a subroutine signature> + +=item * + +L<Indentation on line %d of here-doc doesn't match delimiter +|perldiag/Indentation on line %d of here-doc doesn't match delimiter> + +=item * + +L<Infinite recursion via empty pattern|perldiag/"Infinite recursion via empty pattern">. + +Using the empty pattern (which re-executes the last successfully-matched +pattern) inside a code block in another regex, as in C</(?{ s!!new! })/>, has +always previously yielded a segfault. It now produces this error. + +=item * + +L<Malformed UTF-8 string in "%s" +|perldiag/Malformed UTF-8 string in "%s"> + +=item * + +L<Multiple slurpy parameters not allowed +|perldiag/Multiple slurpy parameters not allowed> + +=item * + +L<C<'#'> not allowed immediately following a sigil in a subroutine signature +|perldiag/C<'#'> not allowed immediately following a sigil in a subroutine signature> + +=item * + +L<panic: unknown OA_*: %x +|perldiag/panic: unknown OA_*: %x> + +=item * + +L<Unescaped left brace in regex is illegal here|perldiag/Unescaped left brace in regex is illegal here in regex; marked by S<E<lt>-- HERE> in mE<sol>%sE<sol>> + +Unescaped left braces are now illegal in some contexts in regular expression +patterns. In other contexts, they are still just deprecated; they will +be illegal in Perl 5.30. + +=item * + +L<Version control conflict marker|perldiag/"Version control conflict marker"> + +(F) The parser found a line starting with C<E<lt>E<lt>E<lt>E<lt>E<lt>E<lt>E<lt>>, +C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>. These may be left by a +version control system to mark conflicts after a failed merge operation. + +=back + +=head3 New Warnings + +=over 4 + +=item * + +L<Can't determine class of operator %s, assuming C<BASEOP> +|perldiag/Can't determine class of operator %s, assuming C<BASEOP>> + +=item * + +L<Declaring references is experimental|perldiag/"Declaring references is experimental"> + +(S experimental::declared_refs) This warning is emitted if you use a reference +constructor on the right-hand side of C<my()>, C<state()>, C<our()>, or +C<local()>. Simply suppress the warning if you want to use the feature, but +know that in doing so you are taking the risk of using an experimental feature +which may change or be removed in a future Perl version: + + no warnings "experimental::declared_refs"; + use feature "declared_refs"; + $fooref = my \$foo; + +See L</Declaring a reference to a variable>. + +=item * + +L<do "%s" failed, '.' is no longer in @INC|perldiag/do "%s" failed, '.' is no longer in @INC; did you mean do ".E<sol>%s"?> + +Since C<"."> is now removed from C<@INC> by default, C<do> will now trigger a warning recommending to fix the C<do> statement. + +=item * + +L<C<File::Glob::glob()> will disappear in perl 5.30. Use C<File::Glob::bsd_glob()> instead. +|perldiag/C<File::Glob::glob()> will disappear in perl 5.30. Use C<File::Glob::bsd_glob()> instead.> + +=item * + +L<Unescaped literal '%c' in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> +|perldiag/Unescaped literal '%c' in regex; marked by <-- HERE in mE<sol>%sE<sol>> + +=item * + +L<Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30|perldiag/"Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30"> + +See L</Deprecations> + +=back + +=head2 Changes to Existing Diagnostics + +=over 4 + +=item * + +When a C<require> fails, we now do not provide C<@INC> when the C<require> +is for a file instead of a module. + +=item * + +When C<@INC> is not scanned for a C<require> call, we no longer display +C<@INC> to avoid confusion. + +=item * + +L<Attribute "locked" is deprecated, and will disappear in Perl 5.28 +|perldiag/Attribute "locked" is deprecated, and will disappear in Perl 5.28> + +This existing warning has had the I<and will disappear> text added in this +release. + +=item * + +L<Attribute "unique" is deprecated, and will disappear in Perl 5.28 +|perldiag/Attribute "unique" is deprecated, and will disappear in Perl 5.28> + +This existing warning has had the I<and will disappear> text added in this +release. + +=item * + +Calling POSIX::%s() is deprecated + +This warning has been removed, as the deprecated functions have been +removed from POSIX. + +=item * + +L<Constants from lexical variables potentially modified elsewhere are deprecated. This will not be allowed in Perl 5.32 +|perldiag/Constants from lexical variables potentially modified elsewhere are deprecated. This will not be allowed in Perl 5.32> + +This existing warning has had the I<this will not be allowed> text added +in this release. + +=item * + +L<Deprecated use of C<my()> in false conditional. This will be a fatal error in Perl 5.30 +|perldiag/Deprecated use of C<my()> in false conditional. This will be a fatal error in Perl 5.30> + +This existing warning has had the I<this will be a fatal error> text added +in this release. + +=item * + +L<C<dump()> better written as C<CORE::dump()>. C<dump()> will no longer be available in Perl 5.30 +|perldiag/C<dump()> better written as C<CORE::dump()>. C<dump()> will no longer be available in Perl 5.30> + +This existing warning has had the I<no longer be available> text added in +this release. + +=item * + +L<Experimental %s on scalar is now forbidden +|perldiag/Experimental %s on scalar is now forbidden> + +This message is now followed by more helpful text. +L<[perl #127976]|https://rt.perl.org/Public/Bug/Display.html?id=127976> + +=item * + +Experimental "%s" subs not enabled + +This warning was been removed, as lexical subs are no longer experimental. + +=item * + +Having more than one /%c regexp modifier is deprecated + +This deprecation warning has been removed, since C</xx> now has a new +meaning. + +=item * + +L<%s() is deprecated on C<:utf8> handles. This will be a fatal error in Perl 5.30 +|perldiag/%s() is deprecated on C<:utf8> handles. This will be a fatal error in Perl 5.30>. + +where "%s" is one of C<sysread>, C<recv>, C<syswrite>, or C<send>. + +This existing warning has had the I<this will be a fatal error> text added +in this release. + +This warning is now enabled by default, as all C<deprecated> category +warnings should be. + +=item * + +L<C<$*> is no longer supported. Its use will be fatal in Perl 5.30 +|perldiag/C<$*> is no longer supported. Its use will be fatal in Perl 5.30> + +This existing warning has had the I<its use will be fatal> text added in +this release. + +=item * + +L<C<$#> is no longer supported. Its use will be fatal in Perl 5.30 +|perldiag/C<$#> is no longer supported. Its use will be fatal in Perl 5.30> + +This existing warning has had the I<its use will be fatal> text added in +this release. + +=item * + +L<Malformed UTF-8 character%s +|perldiag/Malformed UTF-8 character%s> + +Details as to the exact problem have been added at the end of this +message + +=item * + +L<Missing or undefined argument to %s +|perldiag/Missing or undefined argument to %s> + +This warning used to warn about C<require>, even if it was actually C<do> +which being executed. It now gets the operation name right. + +=item * + +NO-BREAK SPACE in a charnames alias definition is deprecated + +This warning has been removed as the behavior is now an error. + +=item * + +L<Odd nameE<sol>value argument for subroutine '%s' +|perldiag/"Odd nameE<sol>value argument for subroutine '%s'"> + +This warning now includes the name of the offending subroutine. + +=item * + +L<Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28 +|perldiag/Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28> + +This existing warning has had the I<this will be a fatal error> text added +in this release. + +=item * + +L<Opening filehandle %s also as a directory. This will be a fatal error in Perl 5.28 +|perldiag/Opening filehandle %s also as a directory. This will be a fatal error in Perl 5.28> + +This existing warning has had the I<this will be a fatal error> text added +in this release. + +=item * + +panic: ck_split, type=%u + +panic: pp_split, pm=%p, s=%p + +These panic errors have been removed. + +=item * + +Passing malformed UTF-8 to "%s" is deprecated + +This warning has been changed to the fatal +L<Malformed UTF-8 string in "%s" +|perldiag/Malformed UTF-8 string in "%s"> + +=item * + +L<Setting C<< $E<sol> >> to a reference to %s as a form of slurp is deprecated, treating as undef. This will be fatal in Perl 5.28 +|perldiag/Setting C<< $E<sol> >> to a reference to %s as a form of slurp is deprecated, treating as undef. This will be fatal in Perl 5.28> + +This existing warning has had the I<this will be fatal> text added in +this release. + +=item * + +L<C<${^ENCODING}> is no longer supported. Its use will be fatal in Perl 5.28|perldiag/"${^ENCODING} is no longer supported. Its use will be fatal in Perl 5.28"> + +This warning used to be: "Setting C<${^ENCODING}> is deprecated". + +The special action of the variable C<${^ENCODING}> was formerly used to +implement the C<encoding> pragma. As of Perl 5.26, rather than being +deprecated, assigning to this variable now has no effect except to issue +the warning. + +=item * + +L<Too few arguments for subroutine '%s' +|perldiag/Too few arguments for subroutine '%s'> + +This warning now includes the name of the offending subroutine. + +=item * + +L<Too many arguments for subroutine '%s' +|perldiag/Too many arguments for subroutine '%s'> + +This warning now includes the name of the offending subroutine. + +=item * + +L<Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in mE<sol>%sE<sol> +|perldiag/Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in mE<sol>%sE<sol>> + +This existing warning has had the I<here (and will be fatal...)> text +added in this release. + +=item * + +L<Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28 +|perldiag/Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28> + +This existing warning has had the I<its use will be fatal> text added in +this release. + +=item * + +L<Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28 +|perldiag/Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28> + +This existing warning has had the I<its use will be fatal> text added in +this release. + +=item * + +L<Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28 +|perldiag/Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28> + +This existing warning has had the I<this will be fatal> text added in +this release. + +=item * + +L<Use of comma-less variable list is deprecated. Its use will be fatal in Perl 5.28 +|perldiag/Use of comma-less variable list is deprecated. Its use will be fatal in Perl 5.28> + +This existing warning has had the I<its use will be fatal> text added in +this release. + +=item * + +L<Use of inherited C<AUTOLOAD> for non-method %s() is deprecated. This will be fatal in Perl 5.28 +|perldiag/Use of inherited C<AUTOLOAD> for non-method %s() is deprecated. This will be fatal in Perl 5.28> + +This existing warning has had the I<this will be fatal> text added in +this release. + +=item * + +L<Use of strings with code points over 0xFF as arguments to %s operator is deprecated. This will be a fatal error in Perl 5.28 +|perldiag/Use of strings with code points over 0xFF as arguments to %s operator is deprecated. This will be a fatal error in Perl 5.28> + +This existing warning has had the I<this will be a fatal error> text added in +this release. + +=back + +=head1 Utility Changes + +=head2 F<c2ph> and F<pstruct> + +=over 4 + +=item * + +These old utilities have long since superceded by L<h2xs>, and are +now gone from the distribution. + +=back + +=head2 F<Porting/pod_lib.pl> + +=over 4 + +=item * + +Removed spurious executable bit. + +=item * + +Account for the possibility of DOS file endings. + +=back + +=head2 F<Porting/sync-with-cpan> + +=over 4 + +=item * + +Many improvements. + +=back + +=head2 F<perf/benchmarks> + +=over 4 + +=item * + +Tidy file, rename some symbols. + +=back + +=head2 F<Porting/checkAUTHORS.pl> + +=over 4 + +=item * + +Replace obscure character range with C<\w>. + +=back + +=head2 F<t/porting/regen.t> + +=over 4 + +=item * + +Try to be more helpful when tests fail. + +=back + +=head2 F<utils/h2xs.PL> + +=over 4 + +=item * + +Avoid infinite loop for enums. + +=back + +=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 +F<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. +L<[perl #128020]|https://rt.perl.org/Public/Bug/Display.html?id=128020> + +=back + +=head1 Configuration and Compilation + +=over 4 + +=item * + +C<-Ddefault_inc_excludes_dot> has added, and enabled by default. + +=item * + +The C<dtrace> build process has further changes +L<[perl #130108]|https://rt.perl.org/Public/Bug/Display.html?id=130108>: + +=over + +=item * + +If the C<-xnolibs> is available, use that so a F<dtrace> perl can be +built within a FreeBSD jail. + +=item * + +On systems that build a F<dtrace> object file (FreeBSD, Solaris, and +SystemTap's dtrace emulation), copy the input objects to a separate +directory and process them there, and use those objects in the link, +since C<dtrace -G> also modifies these objects. + +=item * + +Add F<libelf> to the build on FreeBSD 10.x, since F<dtrace> adds +references to F<libelf> symbols. + +=item * + +Generate a dummy F<dtrace_main.o> if C<dtrace -G> fails to build it. A +default build on Solaris generates probes from the unused inline +functions, while they don't on FreeBSD, which causes C<dtrace -G> to +fail. + +=back + +=item * + +You can now disable perl's use of the C<PERL_HASH_SEED> and +C<PERL_PERTURB_KEYS> environment variables by configuring perl with +C<-Accflags=NO_PERL_HASH_ENV>. + +=item * + +You can now disable perl's use of the C<PERL_HASH_SEED_DEBUG> environment +variable by configuring perl with +C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>. + +=item * + +F<Configure> now zeroes out the alignment bytes when calculating the bytes +for 80-bit C<NaN> and C<Inf> to make builds more reproducible. +L<[perl #130133]|https://rt.perl.org/Public/Bug/Display.html?id=130133> + +=item * + +Since v5.18, for testing purposes we have included support for +building perl with a variety of non-standard, and non-recommended +hash functions. Since we do not recommend the use of these functions, +we have removed them and their corresponding build options. Specifically +this includes the following build options: + + PERL_HASH_FUNC_SDBM + PERL_HASH_FUNC_DJB2 + PERL_HASH_FUNC_SUPERFAST + PERL_HASH_FUNC_MURMUR3 + PERL_HASH_FUNC_ONE_AT_A_TIME + PERL_HASH_FUNC_ONE_AT_A_TIME_OLD + PERL_HASH_FUNC_MURMUR_HASH_64A + PERL_HASH_FUNC_MURMUR_HASH_64B + +=item * + +Remove "Warning: perl appears in your path" + +This install warning is more or less obsolete, since most platforms already +B<will> have a F</usr/bin/perl> or similar provided by the OS. + +=item * + +Reduce verbosity of C<make install.man> + +Previously, two progress messages were emitted for each manpage: one by +installman itself, and one by the function in F<install_lib.pl> that it calls to +actually install the file. Disabling the second of those in each case saves +over 750 lines of unhelpful output. + +=item * + +Cleanup for C<clang -Weverything> support. +L<[perl #129961]|https://rt.perl.org/Public/Bug/Display.html?id=129961> + +=item * + +F<Configure>: signbit scan was assuming too much, stop assuming negative 0. + +=item * + +Various compiler warnings have been silenced. + +=item * + +Several smaller changes have been made to remove impediments to compiling +under C++11. + +=item * + +Builds using C<USE_PAD_RESET> now work again; this configuration had +bit-rotted. + +=item * + +A probe for C<gai_strerror> was added to F<Configure> that checks if +the C<gai_strerror()> routine is available and can be used to +translate error codes returned by C<getaddrinfo()> into human +readable strings. + +=item * + +F<Configure> now aborts if both C<-Duselongdouble> and C<-Dusequadmath> are +requested. +L<[perl #126203]|https://rt.perl.org/Public/Bug/Display.html?id=126203> + +=item * + +Fixed a bug in which F<Configure> could append C<-quadmath> to the +archname even if it was already present. +L<[perl #128538]|https://rt.perl.org/Public/Bug/Display.html?id=128538> + +=item * + +Clang builds with C<-DPERL_GLOBAL_STRUCT> or +C<-DPERL_GLOBAL_STRUCT_PRIVATE> have +been fixed (by disabling Thread Safety Analysis for these configurations). + +=item * + +F<make_ext.pl> no longer updates a module's F<pm_to_blib> file when no +files require updates. This could cause dependencies, F<perlmain.c> +in particular, to be rebuilt unnecessarily. +L<[perl #126710]|https://rt.perl.org/Public/Bug/Display.html?id=126710> + +=item * + +The output of C<perl -V> has been reformatted so that each configuration +and compile-time option is now listed one per line, to improve +readability. + +=item * + +F<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. +L<[perl #127234]|https://rt.perl.org/Public/Bug/Display.html?id=127234> + +=item * + +Perl built with C<-Accflags=-DPERL_TRACE_OPS> now only dumps the operator +counts when the environment variable C<PERL_TRACE_OPS> is 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>), F<Configure> was treating all probed symbols as present on the +system, regardless of whether they actually exist. This has been fixed. +L<[perl #128131]|https://rt.perl.org/Public/Bug/Display.html?id=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. +L<[perl #128052]|https://rt.perl.org/Public/Bug/Display.html?id=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 Testing + +Tests were added and changed to reflect the other additions and changes +in this release. Furthermore, these substantive changes were made: + +=over 4 + +=item * + +A new test script, F<comp/parser_run.t>, has been added that is like +F<comp/parser.t> but with F<test.pl> included so that C<runperl()> and the +like are available for use. + +=item * + +Tests for locales were erroneously using locales incompatible with Perl. + +=item * + +Some parts of the test suite that try to exhaustively test edge cases in the +regex implementation have been restricted to running for a maximum of five +minutes. On slow systems they could otherwise take several hours, without +significantly improving our understanding of the correctness of the code +under test. + +=item * + +A new internal facility allows analysing the time taken by the individual +tests in Perl's own test suite; see F<Porting/harness-timer-report.pl>. + +=item * + +F<t/re/regexp_nonull.t> has been added to test that the regular expression +engine can handle scalars that do not have a null byte just past the end of +the string. + +=item * + +A new test script, F<t/op/decl-refs.t>, has been added to test the new feature +L</Declaring a reference to a variable>. + +=item * + +A new test script, F<t/re/keep_tabs.t> has been added to contain tests +where C<\t> characters should not be expanded into spaces. + +=item * + +A new test script, F<t/re/anyof.t>, has been added to test that the ANYOF nodes +generated by bracketed character classes are as expected. + +=item * + +There is now more extensive testing of the Unicode-related API macros +and functions. + +=item * + +Several of the longer running API test files have been split into +multiple test files so that they can be run in parallel. + +=item * + +F<t/harness> now tries really hard not to run tests which are located +outside of the Perl source tree. +L<[perl #124050]|https://rt.perl.org/Public/Bug/Display.html?id=124050> + +=item * + +Prevent debugger tests (F<lib/perl5db.t>) from failing due to the contents +of C<$ENV{PERLDB_OPTS}>. +L<[perl #130445]|https://rt.perl.org/Public/Bug/Display.html?id=130445> + +=back + +=head1 Platform Support + +=head2 New Platforms + +=over 4 + +=item NetBSD/VAX + +Perl now compiles under NetBSD on VAX machines. However, it's not +possible for that platform to implement floating-point infinities and +NaNs compatible with most modern systems, which implement the IEEE-754 +floating point standard. The hexadecimal floating point (C<0x...p[+-]n> +literals, C<printf %a>) is not implemented, either. +The C<make test> passes 98% of tests. + +=over 4 + +=item * + +Test fixes and minor updates. + +=item * + +Account for lack of C<inf>, C<nan>, and C<-0.0> support. + +=back + +=back + +=head2 Platform-Specific Notes + +=over 4 + +=item Darwin + +=over 4 + +=item * + +Don't treat C<-Dprefix=/usr> as special: instead require an extra option +C<-Ddarwin_distribution> to produce the same results. + +=item * + +OS X El Capitan doesn't implement the C<clock_gettime()> or +C<clock_getres()> APIs; emulate them as necessary. + +=item * + +Deprecated C<syscall(2)> on macOS 10.12. + +=back + +=item EBCDIC + +Several tests have been updated to work (or be skipped) on EBCDIC platforms. + +=item HP-UX + +The L<Net::Ping> UDP test is now skipped on HP-UX. + +=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). + +=item VAX + +VAX floating point formats are now supported on NetBSD. + +=item VMS + +=over 4 + +=item * + +The path separator for the C<PERL5LIB> and C<PERLLIB> environment entries is +now a colon (C<":">) when running under a Unix shell. There is no change when +running under DCL (it's still C<"|">). + +=item * + +F<configure.com> now recognizes the VSI-branded C compiler and no longer +recognizes the "DEC"-branded C compiler (as there hasn't been such a thing for +15 or more years). + +=back + +=item Windows + +=over 4 + +=item * + +Support for compiling perl on Windows using Microsoft Visual Studio 2015 +(containing Visual C++ 14.0) has been added. + +This version of VC++ includes a completely rewritten C run-time library, some +of the changes in which mean that work done to resolve a socket +C<close()> bug in +perl #120091 and perl #118059 is not workable in its current state with this +version of VC++. Therefore, we have effectively reverted that bug fix for +VS2015 onwards on the basis that being able to build with VS2015 onwards is +more important than keeping the bug fix. We may revisit this in the future to +attempt to fix the bug again in a way that is compatible with VS2015. + +These changes do not affect compilation with GCC or with Visual Studio versions +up to and including VS2013, I<i.e.>, the bug fix is retained (unchanged) for those +compilers. + +Note that you may experience compatibility problems if you mix a perl built +with GCC or VS E<lt>= VS2013 with XS modules built with VS2015, or if you mix a +perl built with VS2015 with XS modules built with GCC or VS E<lt>= VS2013. +Some incompatibility may arise because of the bug fix that has been reverted +for VS2015 builds of perl, but there may well be incompatibility anyway because +of the rewritten CRT in VS2015 (I<e.g.>, see discussion at +L<http://stackoverflow.com/questions/30412951>). + +=item * + +It now automatically detects GCC versus Visual C and sets the VC version +number on Win32. + +=back + +=item Linux + +Drop support for Linux F<a.out> executable format. Linux has used ELF for +over twenty years. + +=item OpenBSD 6 + +OpenBSD 6 still does not support returning C<pid>, C<gid>, or C<uid> with +C<SA_SIGINFO>. Make sure to account for it. + +=item FreeBSD + +F<t/uni/overload.t>: Skip hanging test on FreeBSD. + +=item DragonFly BSD + +DragonFly BSD now has support for C<setproctitle()>. +L<[perl #130068]|https://rt.perl.org/Public/Bug/Display.html?id=130068>. + +=back + +=head1 Internal Changes + +=over 4 + +=item * + +A new API function L<C<sv_setpv_bufsize()>|perlapi/sv_setpv_bufsize> +allows simultaneously setting the +length and the allocated size of the buffer in an C<SV>, growing the +buffer if necessary. + +=item * + +A new API macro L<C<SvPVCLEAR()>|perlapi/SvPVCLEAR> sets its C<SV> +argument to an empty string, +like Perl-space C<$x = ''>, but with several optimisations. + +=item * + +Several new macros and functions for dealing with Unicode and +UTF-8-encoded strings have been added to the API, as well as some +changes in the +functionality of existing functions (see L<perlapi/Unicode Support> for +more details): + +=over + +=item * + +New versions of the API macros like C<isALPHA_utf8> and C<toLOWER_utf8> +have been added, each with the suffix C<_safe>, like +L<C<isSPACE_utf8_safe>|perlapi/isSPACE>. These take an extra +parameter, giving an upper +limit of how far into the string it is safe to read. Using the old +versions could cause attempts to read beyond the end of the input buffer +if the UTF-8 is not well-formed, and their use now raises a deprecation +warning. Details are at L<perlapi/Character classification>. + +=item * + +Macros like L<C<isALPHA_utf8>|perlapi/isALPHA> and +L<C<toLOWER_utf8>|perlapi/toLOWER_utf8> now die if they detect +that their input UTF-8 is malformed. A deprecation warning had been +issued since Perl 5.18. + +=item * + +Several new macros for analysing the validity of utf8 sequences. These +are: + +L<C<UTF8_GOT_ABOVE_31_BIT>|perlapi/UTF8_GOT_ABOVE_31_BIT> +L<C<UTF8_GOT_CONTINUATION>|perlapi/UTF8_GOT_CONTINUATION> +L<C<UTF8_GOT_EMPTY>|perlapi/UTF8_GOT_EMPTY> +L<C<UTF8_GOT_LONG>|perlapi/UTF8_GOT_LONG> +L<C<UTF8_GOT_NONCHAR>|perlapi/UTF8_GOT_NONCHAR> +L<C<UTF8_GOT_NON_CONTINUATION>|perlapi/UTF8_GOT_NON_CONTINUATION> +L<C<UTF8_GOT_OVERFLOW>|perlapi/UTF8_GOT_OVERFLOW> +L<C<UTF8_GOT_SHORT>|perlapi/UTF8_GOT_SHORT> +L<C<UTF8_GOT_SUPER>|perlapi/UTF8_GOT_SUPER> +L<C<UTF8_GOT_SURROGATE>|perlapi/UTF8_GOT_SURROGATE> +L<C<UTF8_IS_INVARIANT>|perlapi/UTF8_IS_INVARIANT> +L<C<UTF8_IS_NONCHAR>|perlapi/UTF8_IS_NONCHAR> +L<C<UTF8_IS_SUPER>|perlapi/UTF8_IS_SUPER> +L<C<UTF8_IS_SURROGATE>|perlapi/UTF8_IS_SURROGATE> +L<C<UVCHR_IS_INVARIANT>|perlapi/UVCHR_IS_INVARIANT> +L<C<isUTF8_CHAR_flags>|perlapi/isUTF8_CHAR_flags> +L<C<isSTRICT_UTF8_CHAR>|perlapi/isSTRICT_UTF8_CHAR> +L<C<isC9_STRICT_UTF8_CHAR>|perlapi/isC9_STRICT_UTF8_CHAR> + +=item * + +Functions that are all extensions of the C<is_utf8_string_I<*>()> functions, +that apply various restrictions to the UTF-8 recognized as valid: + +L<C<is_strict_utf8_string>|perlapi/is_strict_utf8_string>, +L<C<is_strict_utf8_string_loc>|perlapi/is_strict_utf8_string_loc>, +L<C<is_strict_utf8_string_loclen>|perlapi/is_strict_utf8_string_loclen>, + +L<C<is_c9strict_utf8_string>|perlapi/is_c9strict_utf8_string>, +L<C<is_c9strict_utf8_string_loc>|perlapi/is_c9strict_utf8_string_loc>, +L<C<is_c9strict_utf8_string_loclen>|perlapi/is_c9strict_utf8_string_loclen>, + +L<C<is_utf8_string_flags>|perlapi/is_utf8_string_flags>, +L<C<is_utf8_string_loc_flags>|perlapi/is_utf8_string_loc_flags>, +L<C<is_utf8_string_loclen_flags>|perlapi/is_utf8_string_loclen_flags>, + +L<C<is_utf8_fixed_width_buf_flags>|perlapi/is_utf8_fixed_width_buf_flags>, +L<C<is_utf8_fixed_width_buf_loc_flags>|perlapi/is_utf8_fixed_width_buf_loc_flags>, +L<C<is_utf8_fixed_width_buf_loclen_flags>|perlapi/is_utf8_fixed_width_buf_loclen_flags>. + +L<C<is_utf8_invariant_string>|perlapi/is_utf8_invariant_string>. +L<C<is_utf8_valid_partial_char>|perlapi/is_utf8_valid_partial_char>. +L<C<is_utf8_valid_partial_char_flags>|perlapi/is_utf8_valid_partial_char_flags>. + +=item * + +The functions L<C<utf8n_to_uvchr>|perlapi/utf8n_to_uvchr> and its +derivatives have had several changes of behaviour. + +Calling them, while passing a string length of 0 is now asserted against +in DEBUGGING builds, and otherwise, returns the Unicode REPLACEMENT +CHARACTER. If you have nothing to decode, you shouldn't call the decode +function. + +They now return the Unicode REPLACEMENT CHARACTER if called with UTF-8 +that has the overlong malformation and that malformation is allowed by +the input parameters. This malformation is where the UTF-8 looks valid +syntactically, but there is a shorter sequence that yields the same code +point. This has been forbidden since Unicode version 3.1. + +They now accept an input +flag to allow the overflow malformation. This malformation is when the +UTF-8 may be syntactically valid, but the code point it represents is +not capable of being represented in the word length on the platform. +What "allowed" means, in this case, is that the function doesn't return an +error, and it advances the parse pointer to beyond the UTF-8 in +question, but it returns the Unicode REPLACEMENT CHARACTER as the value +of the code point (since the real value is not representable). + +They no longer abandon searching for other malformations when the first +one is encountered. A call to one of these functions thus can generate +multiple diagnostics, instead of just one. + +=item * + +L<C<valid_utf8_to_uvchr()>|perlapi/valid_utf8_to_uvchr> has been added +to the API (although it was +present in core earlier). Like C<utf8_to_uvchr_buf()>, but assumes that +the next character is well-formed. Use with caution. + +=item * + +A new function, L<C<utf8n_to_uvchr_error>|perlapi/utf8n_to_uvchr_error>, +has been added for +use by modules that need to know the details of UTF-8 malformations +beyond pass/fail. Previously, the only ways to know why a sequence was +ill-formed was to capture and parse the generated diagnostics or to do +your own analysis. + +=item * + +There is now a safer version of utf8_hop(), called +L<C<utf8_hop_safe()>|perlapi/utf8_hop_safe>. +Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or +after the end of the supplied buffer. + +=item * + +Two new functions, L<C<utf8_hop_forward()>|perlapi/utf8_hop_forward> and +L<C<utf8_hop_back()>|perlapi/utf8_hop_back> are +similar to C<utf8_hop_safe()> but are for when you know which direction +you wish to travel. + +=item * + +Two new macros which return useful utf8 byte sequences: + +L<C<BOM_UTF8>|perlapi/BOM_UTF8> + +L<C<REPLACEMENT_CHARACTER_UTF8>|perlapi/REPLACEMENT_CHARACTER_UTF8> + +=back + +=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. + +See L<perl5220delta/"Internal Changes"> for more details of what this +build option does. + +=item * + +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. + +=item * + +The C<OP_PUSHRE> op has been eliminated and the C<OP_SPLIT> op has been +changed from class C<LISTOP> to C<PMOP>. + +Formerly the first child of a split would be a C<pushre>, which would have the +C<split>'s regex attached to it. Now the regex is attached directly to the +C<split> op, and the C<pushre> has been eliminated. + +=item * + +The L<C<op_class()>|perlapi/op_class> API function has been added. This +is like the existing +C<OP_CLASS()> macro, but can more accurately determine what struct an op +has been allocated as. For example C<OP_CLASS()> might return +C<OA_BASEOP_OR_UNOP> indicating that ops of this type are usually +allocated as an C<OP> or C<UNOP>; while C<op_class()> will return +C<OPclass_BASEOP> or C<OPclass_UNOP> as appropriate. + +=item * + +All parts of the internals now agree that the C<sassign> op is a C<BINOP>; +previously it was listed as a C<BASEOP> in F<regen/opcodes>, which meant +that several parts of the internals had to be special-cased to accommodate +it. This oddity's original motivation was to handle code like C<$x ||= 1>; +that is now handled in a simpler way. + +=item * + +The output format of the L<C<op_dump()>|perlapi/op_dump> function (as +used by C<perl -Dx>) +has changed: it now displays an "ASCII-art" tree structure, and shows more +low-level details about each op, such as its address and class. + +=item * + +The C<PADOFFSET> type has changed from being unsigned to signed, and +several pad-related variables such as C<PL_padix> have changed from being +of type C<I32> to type C<PADOFFSET>. + +=item * + +The C<DEBUGGING>-mode output for regex compilation and execution has been +enhanced. + +=item * + +Several obscure SV flags have been eliminated, sometimes along with the +macros which manipulate them: C<SVpbm_VALID>, C<SVpbm_TAIL>, C<SvTAIL_on>, +C<SvTAIL_off>, C<SVrepl_EVAL>, C<SvEVALED>. + +=item * + +An OP C<op_private> flag has been eliminated: C<OPpRUNTIME>. This used to +often get set on C<PMOP> ops, but had become meaningless over time. + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=item * + +Perl no longer panics when switching into some locales on machines with +buggy C<strxfrm()> implementations in their F<libc>. +L<[perl #121734]|https://rt.perl.org/Public/Bug/Display.html?id=121734> + +=item * + +C< $-{$name} > would leak an C<AV> on each access if the regular +expression had no named captures. The same applies to access to any +hash tied with L<Tie::Hash::NamedCapture> and C<< all =E<gt> 1 >>. +L<[perl #130822]|https://rt.perl.org/Public/Bug/Display.html?id=130822> + +=item * + +Attempting to use the deprecated variable C<$#> as the object in an +indirect object method call could cause a heap use after free or +buffer overflow. +L<[perl #129274]|https://rt.perl.org/Public/Bug/Display.html?id=129274> + +=item * + +When checking for an indirect object method call, in some rare cases +the parser could reallocate the line buffer but then continue to use +pointers to the old buffer. +L<[perl #129190]|https://rt.perl.org/Public/Bug/Display.html?id=129190> + +=item * + +Supplying a glob as the format argument to +L<C<formline>|perlfunc/formline> would +cause an assertion failure. +L<[perl #130722]|https://rt.perl.org/Public/Bug/Display.html?id=130722> + +=item * + +Code like C< $value1 =~ qr/.../ ~~ $value2 > would have the match +converted into a C<qr//> operator, leaving extra elements on the stack to +confuse any surrounding expression. +L<[perl #130705]|https://rt.perl.org/Public/Bug/Display.html?id=130705> + +=item * + +Since v5.24 in some obscure cases, a regex which included code blocks +from multiple sources (I<e.g.>, via embedded via C<qr//> objects) could end up +with the wrong current pad and crash or give weird results. +L<[perl #129881]|https://rt.perl.org/Public/Bug/Display.html?id=129881> + +=item * + +Occasionally C<local()>s in a code block within a patterns weren't being +undone when the pattern matching backtracked over the code block. +L<[perl #126697]|https://rt.perl.org/Public/Bug/Display.html?id=126697> + +=item * + +Using C<substr()> to modify a magic variable could access freed memory +in some cases. +L<[perl #129340]|https://rt.perl.org/Public/Bug/Display.html?id=129340> + +=item * + +Under C<use utf8>, the entire source code is now checked for being UTF-8 +well formed, not just quoted strings as before. +L<[perl #126310]|https://rt.perl.org/Public/Bug/Display.html?id=126310>. + +=item * + +The range operator C<".."> on strings now handles its arguments correctly when in +the scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" >> +feature. The previous behaviour was sufficiently unexpected that we believe no +correct program could have made use of it. + +=item * + +The C<split> operator did not ensure enough space was allocated for +its return value in scalar context. It could then write a single +pointer immediately beyond the end of the memory block allocated for +the stack. +L<[perl #130262]|https://rt.perl.org/Public/Bug/Display.html?id=130262> + +=item * + +Using a large code point with the C<"W"> pack template character with +the current output position aligned at just the right point could +cause a write of a single zero byte immediately beyond the end of an +allocated buffer. +L<[perl #129149]|https://rt.perl.org/Public/Bug/Display.html?id=129149> + +=item * + +Supplying a format's picture argument as part of the format argument list +where the picture specifies modifying the argument could cause an +access to the new freed compiled form.at. +L<[perl #129125]|https://rt.perl.org/Public/Bug/Display.html?id=129125> + +=item * + +The L<sort()|perlfunc/sort> operator's built-in numeric comparison +function didn't handle large integers that weren't exactly +representable by a double. This now uses the same code used to +implement the C<< E<lt>=E<gt> >> operator. +L<[perl #130335]|https://rt.perl.org/Public/Bug/Display.html?id=130335> + +=item * + +Fix issues with C</(?{ ... E<lt>E<lt>EOF })/> that broke +L<Method::Signatures>. +L<[perl #130398]|https://rt.perl.org/Public/Bug/Display.html?id=130398> + +=item * + +Fixed an assertion failure with C<chop> and C<chomp>, which +could be triggered by C<chop(@x =~ tr/1/1/)>. +L<[perl #130198]|https://rt.perl.org/Public/Bug/Display.html?id=130198>. + +=item * + +Fixed a comment skipping error in patterns under C</x>; it could stop +skipping a byte early, which could be in the middle of a UTF-8 +character. +L<[perl #130495]|https://rt.perl.org/Public/Bug/Display.html?id=130495>. + +=item * + +F<perldb> now ignores F</dev/tty> on non-Unix systems. +L<[perl #113960]|https://rt.perl.org/Public/Bug/Display.html?id=113960>; + +=item * + +Fix assertion failure for C<{}-E<gt>$x> when C<$x> isn't defined. +L<[perl #130496]|https://rt.perl.org/Public/Bug/Display.html?id=130496>. + +=item * + +Fix an assertion error which could be triggered when a lookahead string +in patterns exceeded a minimum length. +L<[perl #130522]|https://rt.perl.org/Public/Bug/Display.html?id=130522>. + +=item * + +Only warn once per literal number about a misplaced C<"_">. +L<[perl #70878]|https://rt.perl.org/Public/Bug/Display.html?id=70878>. + +=item * + +The C<tr///> parse code could be looking at uninitialized data after a +perse error. +L<[perl #129342]|https://rt.perl.org/Public/Bug/Display.html?id=129342>. + +=item * + +In a pattern match, a back-reference (C<\1>) to an unmatched capture could +read back beyond the start of the string being matched. +L<[perl #129377]|https://rt.perl.org/Public/Bug/Display.html?id=129377>. + +=item * + +C<use re 'strict'> is supposed to warn if you use a range (such as +C</(?[ [ X-Y ] ])/>) whose start and end digit aren't from the same group +of 10. It didn't do that for five groups of mathematical digits starting +at C<U+1D7E>. + +=item * + +A sub containing a "forward" declaration with the same name (I<e.g.>, +C<sub c { sub c; }>) could sometimes crash or loop infinitely. +L<[perl #129090]|https://rt.perl.org/Public/Bug/Display.html?id=129090> + +=item * + +A crash in executing a regex with a non-anchored UTF-8 substring against a +target string that also used UTF-8 has been fixed. +L<[perl #129350]|https://rt.perl.org/Public/Bug/Display.html?id=129350> + +=item * + +Previously, a shebang line like C<#!perl -i u> could be erroneously +interpreted as requesting the C<-u> option. This has been fixed. +L<[perl #129336]|https://rt.perl.org/Public/Bug/Display.html?id=129336> + +=item * + +The regex engine was previously producing incorrect results in some rare +situations when backtracking past an alternation that matches only one +thing; this +showed up as capture buffers (C<$1>, C<$2>, I<etc.>) erroneously containing data +from regex execution paths that weren't actually executed for the final +match. +L<[perl #129897]|https://rt.perl.org/Public/Bug/Display.html?id=129897> + +=item * + +Certain regexes making use of the experimental C<regex_sets> feature could +trigger an assertion failure. This has been fixed. +L<[perl #129322]|https://rt.perl.org/Public/Bug/Display.html?id=129322> + +=item * + +Invalid assignments to a reference constructor (I<e.g.>, C<\eval=time>) could +sometimes crash in addition to giving a syntax error. +L<[perl #125679]|https://rt.perl.org/Public/Bug/Display.html?id=125679> + +=item * + +The parser could sometimes crash if a bareword came after C<evalbytes>. +L<[perl #129196]|https://rt.perl.org/Public/Bug/Display.html?id=129196> + +=item * + +Autoloading via a method call would warn erroneously ("Use of inherited +AUTOLOAD for non-method") if there was a stub present in the package into +which the invocant had been blessed. The warning is no longer emitted in +such circumstances. +L<[perl #47047]|https://rt.perl.org/Public/Bug/Display.html?id=47047> + +=item * + +The use of C<splice> on arrays with non-existent elements could cause other +operators to crash. +L<[perl #129164]|https://rt.perl.org/Public/Bug/Display.html?id=129164> + +=item * + +A possible buffer overrun when a pattern contains a fixed utf8 substring. +L<[perl #129012]|https://rt.perl.org/Public/Bug/Display.html?id=129012> + +=item * + +Fixed two possible use-after-free bugs in perl's lexer. +L<[perl #129069]|https://rt.perl.org/Public/Bug/Display.html?id=129069> + +=item * + +Fixed a crash with C<s///l> where it thought it was dealing with UTF-8 +when it wasn't. +L<[perl #129038]|https://rt.perl.org/Public/Bug/Display.html?id=129038> + +=item * + +Fixed a place where the regex parser was not setting the syntax error +correctly on a syntactically incorrect pattern. +L<[perl #129122]|https://rt.perl.org/Public/Bug/Display.html?id=129122> + +=item * + +The C<&.> operator (and the C<"&"> operator, when it treats its arguments as +strings) were failing to append a trailing null byte if at least one string +was marked as utf8 internally. Many code paths (system calls, regexp +compilation) still expect there to be a null byte in the string buffer +just past the end of the logical string. An assertion failure was the +result. +L<[perl #129287]|https://rt.perl.org/Public/Bug/Display.html?id=129287> + +=item * + +Avoid a heap-after-use error in the parser when creating an error messge +for a syntactically invalid heredoc. +L<[perl #128988]|https://rt.perl.org/Public/Bug/Display.html?id=128988> + +=item * + +Fix a segfault when run with C<-DC> options on DEBUGGING builds. +L<[perl #129106]|https://rt.perl.org/Public/Bug/Display.html?id=129106> + +=item * + +Fixed the parser error handling in subroutine attributes for an +'C<:attr(foo>' that does not have an ending 'C<")">'. + +=item * + +Fix the perl lexer to correctly handle a backslash as the last char in +quoted-string context. This actually fixed two bugs, +L<[perl #129064]|https://rt.perl.org/Public/Bug/Display.html?id=129064> and +L<[perl #129176]|https://rt.perl.org/Public/Bug/Display.html?id=129176>. + +=item * + +In the API function C<gv_fetchmethod_pvn_flags>, rework separator parsing +to prevent possible string overrun with an invalid C<len> argument. +L<[perl #129267]|https://rt.perl.org/Public/Bug/Display.html?id=129267> + +=item * + +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 seen by sort routines 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>. +L<[perl #128340]|https://rt.perl.org/Public/Bug/Display.html?id=128340> + +=item * + +Non-ASCII string delimiters are now reported correctly in error messages +for unterminated strings. +L<[perl #128701]|https://rt.perl.org/Public/Bug/Display.html?id=128701> + +=item * + +C<pack("p", ...)> used to emit its warning ("Attempt to pack pointer to +temporary value") erroneously in some cases, but has been fixed. + +=item * + +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 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.) + +=item * + +C<gethostent> and similar functions now perform a null check internally, to +avoid crashing with the torsocks library. This was a regression from v5.22. +L<[perl #128740]|https://rt.perl.org/Public/Bug/Display.html?id=128740> + +=item * + +C<defined *{'!'}>, C<defined *{'['}>, and C<defined *{'-'}> no longer leak +memory if the typeglob in question has never been accessed before. + +=item * + +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 v5.20. +L<[perl #126482]|https://rt.perl.org/Public/Bug/Display.html?id=126482> + +=item * + +Many issues relating to C<printf "%a"> of hexadecimal floating point +were fixed. In addition, the "subnormals" (formerly known as "denormals") +floating point numbers 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". +L<[perl #128843]|https://rt.perl.org/Public/Bug/Display.html?id=128843> +L<[perl #128889]|https://rt.perl.org/Public/Bug/Display.html?id=128889> +L<[perl #128890]|https://rt.perl.org/Public/Bug/Display.html?id=128890> +L<[perl #128893]|https://rt.perl.org/Public/Bug/Display.html?id=128893> +L<[perl #128909]|https://rt.perl.org/Public/Bug/Display.html?id=128909> +L<[perl #128919]|https://rt.perl.org/Public/Bug/Display.html?id=128919> + +=item * + +A regression in v5.24 with C<tr/\N{U+...}/foo/> when the code point was between +128 and 255 has been fixed. +L<[perl #128734]|https://rt.perl.org/Public/Bug/Display.html?id=128734>. + +=item * + +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. +L<[perl #128738]|https://rt.perl.org/Public/Bug/Display.html?id=128738> + +=item * + +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. +L<[perl #128951]|https://rt.perl.org/Public/Bug/Display.html?id=128951> + +=item * + +An assertion failure with C<%: = 0> has been fixed. +L<[perl #128238]|https://rt.perl.org/Public/Bug/Display.html?id=128238> + +=item * + +In Perl 5.18, the parsing of C<"$foo::$bar"> was accidentally changed, such +that it would be treated as C<$foo."::".$bar>. The previous behavior, which +was to parse it as C<$foo:: . $bar>, has been restored. +L<[perl #128478]|https://rt.perl.org/Public/Bug/Display.html?id=128478> + +=item * + +Since Perl 5.20, line numbers have been off by one when perl is invoked with +the B<-x> switch. This has been fixed. +L<[perl #128508]|https://rt.perl.org/Public/Bug/Display.html?id=128508> + +=item * + +Vivifying a subroutine stub in a deleted stash (I<e.g.>, +C<delete $My::{"Foo::"}; \&My::Foo::foo>) no longer crashes. It had begun +crashing in Perl 5.18. +L<[perl #128532]|https://rt.perl.org/Public/Bug/Display.html?id=128532> + +=item * + +Some obscure cases of subroutines and file handles being freed at the same time +could result in crashes, but have been fixed. The crash was introduced in Perl +5.22. +L<[perl #128597]|https://rt.perl.org/Public/Bug/Display.html?id=128597> + +=item * + +Code that looks for a variable name associated with an uninitialized value +could cause an assertion failure in cases where magic is involved, such as +C<$ISA[0][0]>. This has now been fixed. +L<[perl #128253]|https://rt.perl.org/Public/Bug/Display.html?id=128253> + +=item * + +A crash caused by code generating the warning "Subroutine STASH::NAME +redefined" in cases such as C<sub P::f{} undef *P::; *P::f =sub{};> has been +fixed. In these cases, where the STASH is missing, the warning will now appear +as "Subroutine NAME redefined". +L<[perl #128257]|https://rt.perl.org/Public/Bug/Display.html?id=128257> + +=item * + +Fixed an assertion triggered by some code that handles deprecated behavior in +formats, I<e.g.>, in cases like this: + + format STDOUT = + @ + 0"$x" + +L<[perl #128255]|https://rt.perl.org/Public/Bug/Display.html?id=128255> + +=item * + +A possible divide by zero in string transformation code on Windows has been +avoided, fixing a crash when collating an empty string. +L<[perl #128618]|https://rt.perl.org/Public/Bug/Display.html?id=128618> + +=item * + +Some regular expression parsing glitches could lead to assertion failures with +regular expressions such as C</(?E<lt>=/> and C</(?E<lt>!/>. This has now been fixed. +L<[perl #128170]|https://rt.perl.org/Public/Bug/Display.html?id=128170> + +=item * + +C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly +warn when syntax warnings are enabled. +L<[perl #127333]|https://rt.perl.org/Public/Bug/Display.html?id=127333> + +=item * + +socket() now leaves the error code returned by the system in C<$!> on +failure. +L<[perl #128316]|https://rt.perl.org/Public/Bug/Display.html?id=128316> + +=item * + +Assignment variants of any bitwise ops under the C<bitwise> feature would +crash if the left-hand side was an array or hash. +L<[perl #128204]|https://rt.perl.org/Public/Bug/Display.html?id=128204> + +=item * + +C<require> followed by a single colon (as in C<foo() ? require : ...> is +now parsed correctly as C<require> with implicit C<$_>, rather than +C<require "">. +L<[perl #128307]|https://rt.perl.org/Public/Bug/Display.html?id=128307> + +=item * + +Scalar C<keys %hash> can now be assigned to consistently in all scalar +lvalue contexts. Previously it worked for some contexts but not others. + +=item * + +List assignment to C<vec> or C<substr> with an array or hash for its first +argument used to result in crashes or "Can't coerce" error messages at run +time, unlike scalar assignment, which would give an error at compile time. +List assignment now gives a compile-time error, too. +L<[perl #128260]|https://rt.perl.org/Public/Bug/Display.html?id=128260> + +=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. +L<[perl #127952]|https://rt.perl.org/Public/Bug/Display.html?id=127952> + +=item * + +C<reset> with an argument no longer crashes when encountering stash entries +other than globs. +L<[perl #128106]|https://rt.perl.org/Public/Bug/Display.html?id=128106> + +=item * + +Assignment of hashes to, and deletion of, typeglobs named C<*::::::> no +longer causes crashes. +L<[perl #128086]|https://rt.perl.org/Public/Bug/Display.html?id=128086> + +=item * + +Perl wasn't correctly handling true/false values in the LHS of a list +assign; specifically the truth values returned by boolean operators. +This could trigger an assertion failure in something like the following: + + for ($x > $y) { + ($_, ...) = (...); # here $_ is aliased to a truth value + } + +This was a regression from v5.24. +L<[perl #129991]|https://rt.perl.org/Public/Bug/Display.html?id=129991> + +=item * + +Assertion failure with user-defined Unicode-like properties. +L<[perl #130010]|https://rt.perl.org/Public/Bug/Display.html?id=130010> + +=item * + +Fix error message for unclosed C<\N{> in a regex. An unclosed C<\N{> +could give the wrong error message: +C<"\N{NAME} must be resolved by the lexer">. + +=item * + +List assignment in list context where the LHS contained aggregates and +where there were not enough RHS elements, used to skip scalar lvalues. +Previously, C<(($a,$b,@c,$d) = (1))> in list context returned C<($a)>; now +it returns C<($a,$b,$d)>. C<(($a,$b,$c) = (1))> is unchanged: it still +returns C<($a,$b,$c)>. This can be seen in the following: + + sub inc { $_++ for @_ } + inc(($a,$b,@c,$d) = (10)) + +Formerly, the values of C<($a,$b,$d)> would be left as C<(11,undef,undef)>; +now they are C<(11,1,1)>. + +=item * + +Code like this: C</(?{ s!!! })/> could trigger infinite recursion on the C +stack (not the normal perl stack) when the last successful pattern in +scope is itself. We avoid the segfault by simply forbidding the use of +the empty pattern when it would resolve to the currently executing +pattern. +L<[perl #129903]|https://rt.perl.org/Public/Bug/Display.html?id=129903> + +=item * + +Avoid reading beyond the end of the line buffer in perl's lexer when +there's a short UTF-8 character at the end. +L<[perl #128997]|https://rt.perl.org/Public/Bug/Display.html?id=128997> + +=item * + +Alternations in regular expressions were sometimes failing to match +a utf8 string against a utf8 alternate. +L<[perl #129950]|https://rt.perl.org/Public/Bug/Display.html?id=129950> + +=item * + +Make C<do "a\0b"> fail silently (and return C<undef> and set C<$!>) +instead of throwing an error. +L<[perl #129928]|https://rt.perl.org/Public/Bug/Display.html?id=129928> + +=item * + +C<chdir> with no argument didn't ensure that there was stack space +available for returning its result. +L<[perl #129130]|https://rt.perl.org/Public/Bug/Display.html?id=129130> + +=item * + +All error messages related to C<do> now refer to C<do>; some formerly +claimed to be from C<require> instead. + +=item * + +Executing C<undef $x> where C<$x> is tied or magical no longer incorrectly +blames the variable for an uninitialized-value warning encountered by the +tied/magical code. + +=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. +L<[perl #127877]|https://rt.perl.org/Public/Bug/Display.html?id=127877> + +=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, but has now +been fixed. + +=item * + +C<< "string$scalar-E<gt>$*" >> now correctly prefers concatenation +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. +L<[perl #128171]|https://rt.perl.org/Public/Bug/Display.html?id=128171> + +=item * + +C<do> or C<require> with an argument which is a reference or typeglob +which, when stringified, +contains a null character, started crashing in Perl 5.20, but has now been +fixed. +L<[perl #128182]|https://rt.perl.org/Public/Bug/Display.html?id=128182> + +=item * + +Improve the error message for a missing C<tie()> package/method. This +brings the error messages in line with the ones used for normal method +calls. + +=item * + +Parsing bad POSIX charclasses no longer leaks memory. +L<[perl #128313]|https://rt.perl.org/Public/Bug/Display.html?id=128313> + +=back + +=head1 Known Problems + +=over 4 + +=item * + +G++ 6 handles subnormal (denormal) floating point values differently +than gcc 6 or g++ 5 resulting in "flush-to-zero". The end result is +that if you specify very small values using the hexadecimal floating +point format, like C<0x1.fffffffffffffp-1022>, they become zeros. +L<[perl #131388]|https://rt.perl.org/Ticket/Display.html?id=131388> + +=back + +=head1 Errata From Previous Releases + +=over 4 + +=item * + +Fixed issues with recursive regexes. The behavior was fixed in Perl 5.24. +L<[perl #126182]|https://rt.perl.org/Public/Bug/Display.html?id=126182> + +=back + +=head1 Obituary + +Jon Portnoy (AVENJ), a prolific Perl author and admired Gentoo community +member, has passed away on August 10, 2016. He will be remembered and +missed by all those who he came in contact with, and enriched with his +intellect, wit, and spirit. + +It is with great sadness that we also note Kip Hampton's passing. Probably +best known as the author of the Perl & XML column on XML.com, he was a +core contributor to AxKit, an XML server platform that became an Apache +Foundation project. He was a frequent speaker in the early days at +OSCON, and most recently at YAPC::NA in Madison. He was frequently on +irc.perl.org as ubu, generally in the #axkit-dahut community, the +group responsible for YAPC::NA Asheville in 2011. + +Kip and his constant contributions to the community will be greatly +missed. + +=head1 Acknowledgements + +Perl 5.26.0 represents approximately 13 months of development since Perl 5.24.0 +and contains approximately 360,000 lines of changes across 2,600 files from 86 +authors. + +Excluding auto-generated files, documentation and release tools, there were +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.26.0: + +Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alex Vandiver, Andreas +König, Andreas Voegele, Andrew Fresh, Andy Lester, Aristotle Pagaltzis, Chad +Granum, Chase Whitener, Chris 'BinGOs' Williams, Chris Lamb, Christian Hansen, +Christian Millour, Colin Newell, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan +Collins, Daniel Dragan, Dave Cross, Dave Rolsky, David Golden, David H. +Gutteridge, David Mitchell, Dominic Hargreaves, Doug Bell, E. Choroba, Ed Avis, +Father Chrysostomos, François Perrad, Hauke D, H.Merijn Brand, Hugo van der +Sanden, Ivan Pozdeev, James E Keenan, James Raspass, Jarkko Hietaniemi, Jerry +D. Hedden, Jim Cromie, J. Nick Koston, John Lightsey, Karen Etheridge, Karl +Williamson, Leon Timmermans, Lukas Mai, Matthew Horsfall, Maxwell Carey, Misty +De Meo, Neil Bowers, Nicholas Clark, Nicolas R., Niko Tyni, Pali, Paul +Marquess, Peter Avalos, Petr Písař, Pino Toscano, Rafael Garcia-Suarez, Reini +Urban, Renee Baecker, Ricardo Signes, Richard Levitte, Rick Delaney, Salvador +Fandiño, Samuel Thibault, Sawyer X, Sébastien Aperghis-Tramoni, Sergey +Aleynikov, Shlomi Fish, Smylers, Stefan Seifert, Steffen Müller, Stevan +Little, Steve Hay, Steven Humphrey, Sullivan Beck, Theo Buehler, Thomas Sibley, +Todd Rinaldo, Tomasz Konojacki, Tony Cook, Unicode Consortium, Yaroslav Kuzmin, +Yves Orton, Zefram. + +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 +the (very much appreciated) contributors who reported issues to the Perl bug +tracker. + +Many of the changes included in this version originated in the CPAN modules +included in Perl's core. We're grateful to the entire CPAN community for +helping Perl to flourish. + +For a more complete list of all of Perl's historical contributors, please see +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 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 +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 C<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 see +L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> +for details of how to report the issue. + +=head1 Give Thanks + +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, +you can do so by running the C<perlthanks> program: + + perlthanks + +This will send an email to the Perl 5 Porters list with your show of thanks. + +=head1 SEE ALSO + +The F<Changes> file for an explanation of how to view exhaustive details on +what changed. + +The F<INSTALL> file for how to build Perl. + +The F<README> file for general stuff. + +The F<Artistic> and F<Copying> files for copyright information. + +=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 06dcd1d74f..066efb717d 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,1516 +2,187 @@ =head1 NAME -perldelta - what is new for perl v5.26.0 +[ this is a template for a new perldelta file. Any text flagged as XXX needs +to be processed before release. ] -=head1 DESCRIPTION - -This document describes the differences between the 5.24.0 release and the -5.26.0 release. - -=head1 Notice - -This release includes three updates with widespread effects: - -=over 4 - -=item * C<"."> no longer in C<@INC> +perldelta - what is new for perl v5.27.0 -For security reasons, the current directory (C<".">) is no longer included -by default at the end of the module search path (C<@INC>). This may have -widespread implications for the building, testing and installing of -modules, and for the execution of scripts. See the section -L<< Removal of the current directory (C<".">) from C<@INC> >> -for the full details. +=head1 DESCRIPTION -=item * C<do> may now warn +This document describes differences between the 5.26.0 release and the 5.27.0 +release. -C<do> now gives a deprecation warning when it fails to load a file which -it would have loaded had C<"."> been in C<@INC>. +If you are upgrading from an earlier release such as 5.25.0, first read +L<perl5260delta>, which describes differences between 5.25.0 and 5.26.0. -=item * In regular expression patterns, a literal left brace C<"{"> -should be escaped +=head1 Notice -See L</Unescaped literal C<"{"> characters in regular expression patterns are no longer permissible>. - -=back +XXX Any important notices here =head1 Core Enhancements -=head2 Lexical subroutines are no longer experimental - -Using the C<lexical_subs> feature introduced in v5.18 no longer emits a warning. Existing -code that disables the C<experimental::lexical_subs> warning category -that the feature previously used will continue to work. The -C<lexical_subs> feature has no effect; all Perl code can use lexical -subroutines, regardless of what feature declarations are in scope. - -=head2 Indented Here-documents - -This adds a new modifier C<"~"> to here-docs that tells the parser -that it should look for C</^\s*$DELIM\n/> as the closing delimiter. - -These syntaxes are all supported: - - <<~EOF; - <<~\EOF; - <<~'EOF'; - <<~"EOF"; - <<~`EOF`; - <<~ 'EOF'; - <<~ "EOF"; - <<~ `EOF`; - -The C<"~"> 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 New regular expression modifier C</xx> - -Specifying two C<"x"> 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<C</[ ^ A-Z d-f p-x ]/xx>>. Details are at -L<perlre/E<sol>x and E<sol>xx>. - -=head2 C<@{^CAPTURE}>, C<%{^CAPTURE}>, and C<%{^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<substr($matched_string,$-[0],$+[0]-$-[0])>, and you don't -have to keep track of the C<$matched_string> either. This variable has no -single character equivalent. Note that, 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 equivalent to C<%+> (I<i.e.>, named captures). Other than -being more self-documenting there is no difference between the two forms. - -C<%{^CAPTURE_ALL}> is equivalent to C<%-> (I<i.e.>, all named captures). -Other than being more self-documenting there is no difference between the -two forms. - -=head2 Declaring a reference to a variable - -As an experimental feature, Perl now allows the referencing operator to come -after L<C<my()>|perlfunc/my>, L<C<state()>|perlfunc/state>, -L<C<our()>|perlfunc/our>, or L<C<local()>|perlfunc/local>. This syntax must -be enabled with C<use feature 'declared_refs'>. It is experimental, and will -warn by default unless C<no warnings 'experimental::refaliasing'> is in effect. -It is intended mainly for use in assignments to references. For example: - - use experimental 'refaliasing', 'declared_refs'; - my \$a = \$b; - -See L<perlref/Assigning to References> for more details. - -=head2 Unicode 9.0 is now supported - -A list of changes is at L<http://www.unicode.org/versions/Unicode9.0.0/>. -Modules that are shipped with core Perl but not maintained by p5p do not -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>). Perl now uses this improved -version when a property is specified as just C<\p{I<script>}>. This -should make programs 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 Perl can now do default collation in UTF-8 locales on platforms -that support it - -Some platforms natively do a reasonable job of collating and sorting in -UTF-8 locales. Perl now works with those. For portability and full -control, L<Unicode::Collate> is still recommended, but now you may -not need to do anything special to get good-enough results, depending on -your application. See -L<perllocale/Category C<LC_COLLATE>: Collation: Text Comparisons and Sorting>. - -=head2 Better locale collation of strings containing embedded C<NUL> -characters - -In locales that have multi-level character weights, C<NUL>s are now -ignored at the higher priority ones. There are still some gotchas in -some strings, though. See -L<perllocale/Collation of strings containing embedded C<NUL> characters>. - -=head2 C<CORE> subroutines for hash and array functions callable via -reference - -The hash and array functions in the C<CORE> namespace (C<keys>, C<each>, -C<values>, C<push>, C<pop>, C<shift>, C<unshift> and C<splice>) can now -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 New Hash Function For 64-bit Builds - -We have switched to a hybrid hash function to better balance -performance for short and long keys. +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. -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. +[ List each enhancement as a =head2 entry ] =head1 Security -=head2 Removal of the current directory (C<".">) from C<@INC> +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. -The perl binary includes a default set of paths in C<@INC>. Historically -it has also included the current directory (C<".">) as the final entry, -unless run with taint mode enabled (C<perl -T>). While convenient, this has -security implications: for example, where a script attempts to load an -optional module when its current directory is untrusted (such as F</tmp>), -it could load and execute code from under that directory. - -Starting with v5.26, C<"."> is always removed by default, not just under -tainting. This has major implications for installing modules and executing -scripts. - -The following new features have been added to help ameliorate these -issues. - -=over - -=item * F<Configure -Udefault_inc_excludes_dot> - -There is a new F<Configure> option, C<default_inc_excludes_dot> (enabled -by default) which builds a perl executable without C<".">; unsetting this -option using C<-U> reverts perl to the old behaviour. This may fix your -path issues but will reintroduce all the security concerns, so don't -build a perl executable like this unless you're I<really> confident that -such issues are not a concern in your environment. - -=item * C<PERL_USE_UNSAFE_INC> - -There is a new environment variable recognised by the perl interpreter. -If this variable has the value 1 when the perl interpreter starts up, -then C<"."> will be automatically appended to C<@INC> (except under tainting). - -This allows you restore the old perl interpreter behaviour on a -case-by-case basis. But note that this is intended to be a temporary crutch, -and this feature will likely be removed in some future perl version. -It is currently set by the C<cpan> utility and C<Test::Harness> to -ease installation of CPAN modules which have not been updated to handle the -lack of dot. Once again, don't use this unless you are sure that this -will not reintroduce any security concerns. - -=item * A new deprecation warning issued by C<do>. - -While it is well-known that C<use> and C<require> use C<@INC> to search -for the file to load, many people don't realise that C<do "file"> also -searches C<@INC> if the file is a relative path. With the removal of C<".">, -a simple C<do "file.pl"> will fail to read in and execute C<file.pl> from -the current directory. Since this is commonly expected behaviour, a new -deprecation warning is now issued whenever C<do> fails to load a file which -it otherwise would have found if a dot had been in C<@INC>. - -=back - -Here are some things script and module authors may need to do to make -their software work in the new regime. - -=over - -=item * Script authors - -If the issue is within your own code (rather than within included -modules), then you have two main options. Firstly, if you are confident -that your script will only be run within a trusted directory (under which -you expect to find trusted files and modules), then add C<"."> back into the -path; I<e.g.>: - - BEGIN { - my $dir = "/some/trusted/directory"; - chdir $dir or die "Can't chdir to $dir: $!\n"; - # safe now - push @INC, '.'; - } - - use "Foo::Bar"; # may load /some/trusted/directory/Foo/Bar.pm - do "config.pl"; # may load /some/trusted/directory/config.pl - -On the other hand, if your script is intended to be run from within -untrusted directories (such as F</tmp>), then your script suddenly failing -to load files may be indicative of a security issue. You most likely want -to replace any relative paths with full paths; for example, - - do "foo_config.pl" - -might become - - do "$ENV{HOME}/foo_config.pl" - -If you are absolutely certain that you want your script to load and -execute a file from the current directory, then use a C<./> prefix; for -example: - - do "./foo_config.pl" - -=item * Installing and using CPAN modules - -If you install a CPAN module using an automatic tool like C<cpan>, then -this tool will itself set the C<PERL_USE_UNSAFE_INC> environment variable -while building and testing the module, which may be sufficient to install -a distribution which hasn't been updated to be dot-aware. If you want to -install such a module manually, then you'll need to replace the -traditional invocation: - - perl Makefile.PL && make && make test && make install - -with something like - - (export PERL_USE_UNSAFE_INC=1; \ - perl Makefile.PL && make && make test && make install) - -Note that this only helps build and install an unfixed module. It's -possible for the tests to pass (since they were run under -C<PERL_USE_UNSAFE_INC=1>), but for the module itself to fail to perform -correctly in production. In this case, you may have to temporarily modify -your script until a fixed version of the module is released. -For example: - - use Foo::Bar; - { - local @INC = (@INC, '.'); - # assuming read_config() needs '.' in @INC - $config = Foo::Bar->read_config(); - } - -This is only rarely expected to be necessary. Again, if doing this, -assess the resultant risks first. - -=item * Module Authors - -If you maintain a CPAN distribution, it may need updating to run in -a dotless environment. Although C<cpan> and other such tools will -currently set the C<PERL_USE_UNSAFE_INC> during module build, this is a -temporary workaround for the set of modules which rely on C<"."> being in -C<@INC> for installation and testing, and this may mask deeper issues. It -could result in a module which passes tests and installs, but which -fails at run time. - -During build, test, and install, it will normally be the case that any perl -processes will be executing directly within the root directory of the -untarred distribution, or a known subdirectory of that, such as F<t/>. It -may well be that F<Makefile.PL> or F<t/foo.t> will attempt to include -local modules and configuration files using their direct relative -filenames, which will now fail. - -However, as described above, automatic tools like F<cpan> will (for now) -set the C<PERL_USE_UNSAFE_INC> environment variable, which introduces -dot during a build. - -This makes it likely that your existing build and test code will work, but -this may mask issues with your code which only manifest when used after -install. It is prudent to try and run your build process with that -variable explicitly disabled: - - (export PERL_USE_UNSAFE_INC=0; \ - perl Makefile.PL && make && make test && make install) - -This is more likely to show up any potential problems with your module's -build process, or even with the module itself. Fixing such issues will -ensure both that your module can again be installed manually, and that -it will still build once the C<PERL_USE_UNSAFE_INC> crutch goes away. - -When fixing issues in tests due to the removal of dot from C<@INC>, -reinsertion of dot into C<@INC> should be performed with caution, for this -too may suppress real errors in your runtime code. You are encouraged -wherever possible to apply the aforementioned approaches with explicit -absolute/relative paths, or to relocate your needed files into a -subdirectory and insert that subdirectory into C<@INC> instead. - -If your runtime code has problems under the dotless C<@INC>, then the comments -above on how to fix for script authors will mostly apply here too. Bear in -mind though that it is considered bad form for a module to globally add a dot to -C<@INC>, since it introduces both a security risk and hides issues of -accidentally requiring dot in C<@INC>, as explained above. - -=back - -=head2 Escaped colons and relative paths in PATH - -On Unix systems, Perl treats any relative paths in the C<PATH> environment -variable as tainted when starting a new process. Previously, it was -allowing a backslash to escape a colon (unlike the OS), consequently -allowing relative paths to be considered safe if the PATH was set to -something like C</\:.>. The check has been fixed to treat C<"."> as tainted -in that example. - -=head2 New C<-Di> switch is now required for PerlIO debugging output - -This is used for debugging of code within PerlIO to avoid recursive -calls. Previously this output would be sent to the file specified -by the C<PERLIO_DEBUG> environment variable if perl wasn't running -setuid and the C<-T> or C<-t> switches hadn't been parsed yet. - -If perl performed output at a point where it hadn't yet parsed its -switches this could result in perl creating or overwriting the file -named by C<PERLIO_DEBUG> even when the C<-T> switch had been supplied. - -Perl now requires the C<-Di> switch to be present before it will produce -PerlIO debugging -output. By default this is written to C<stderr>, but can optionally -be redirected to a file by setting the C<PERLIO_DEBUG> environment -variable. - -If perl is running setuid or the C<-T> switch was supplied, -C<PERLIO_DEBUG> is ignored and the debugging output is sent to -C<stderr> as for any other C<-D> switch. +[ List each security issue as a =head2 entry ] =head1 Incompatible Changes -=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; 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 was buggy and failed to warn in some cases where -it should have. Therefore, enforcement of this ban for these cases is -deferred until Perl 5.30, but the code has been fixed to raise a -default-on deprecation message for them in the meantime. - -Some uses of literal C<"{"> occur in contexts where we do not foresee -the meaning ever being anything but the literal, such as the very first -character in the pattern, or after a C<"|"> meaning alternation. Thus - - qr/{fee|{fie/ - -matches either of the strings C<{fee> or C<{fie>. To avoid forcing -unnecessary code changes, these uses do not need to be escaped, and no -warning is raised about them, and there are no current plans to change this. - -But it is always correct to escape C<"{">, and the simple rule to -remember is to always do so. - -See L<Unescaped left brace in regex is illegal here|perldiag/Unescaped left brace in regex is illegal here in regex; marked by S<E<lt>-- HERE> in mE<sol>%sE<sol>>. - -=head2 C<scalar(%hash)> return signature changed - -The value returned for C<scalar(%hash)> will no longer show information about -the buckets allocated in the hash. It will simply return the count of used -keys. It is thus equivalent to C<0+keys(%hash)>. - -A form of backward compatibility is provided via -L<C<Hash::Util::bucket_ratio()>|Hash::Util/bucket_ratio> which provides -the same behavior as -C<scalar(%hash)> provided in Perl 5.24 and earlier. - -=head2 C<keys> returned from an lvalue subroutine - -C<keys> returned from an lvalue subroutine can no longer be assigned -to in list context. - - sub foo : lvalue { keys(%INC) } - (foo) = 3; # death - sub bar : lvalue { keys(@_) } - (bar) = 3; # also an error - -This makes the lvalue sub case consistent with C<(keys %hash) = ...> and -C<(keys @_) = ...>, which are also errors. -L<[perl #128187]|https://rt.perl.org/Public/Bug/Display.html?id=128187> - -=head2 The C<${^ENCODING}> facility has been removed - -The special behaviour associated with assigning a value to this variable -has been removed. As a consequence, 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 C<POSIX::tmpnam()> has been removed - -The fundamentally unsafe C<tmpnam()> interface was deprecated in -Perl 5.22 and has now been removed. In its place, you can use, -for example, the L<File::Temp> interfaces. +XXX For a release on a stable branch, this section aspires to be: -=head2 require ::Foo::Bar is now illegal. + There are no changes intentionally incompatible with 5.XXX.XXX + If any exist, they are bugs, and we request that you submit a + report. See L</Reporting Bugs> below. -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 5.22. +[ List each incompatible change as a =head2 entry ] =head1 Deprecations -=head2 String delimiters that aren't stand-alone graphemes are now deprecated - -For Perl to eventually allow string delimiters to be Unicode -grapheme clusters (which look like a single character, but may be -a sequence of several ones), we have to stop allowing a single character -delimiter that isn't a grapheme by itself. These are unlikely to exist -in actual code, as they would typically display as attached to the -character in front of them. - -=head2 C<\cI<X>> that maps to a printable is no longer deprecated - -This means we have no plans to remove this feature. It still raises a -warning, but only if syntax warnings are enabled. The feature was -originally intended to be a way to express non-printable characters that -don't have a mnemonic (C<\t> and C<\n> are mnemonics for two -non-printable characters, but most non-printables don't have a -mnemonic.) But the feature can be used to specify a few printable -characters, though those are more clearly expressed as the printable -itself. See -L<http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html>. - -=head1 Performance Enhancements - -=over 4 - -=item * - -A hash in boolean context is now sometimes faster, I<e.g.> - - if (!%h) { ... } - -This was already special-cased, but some cases were missed (such as -C<grep %$_, @AoH>), and even the ones which weren't have been improved. - -=item * New Faster Hash Function on 64 bit builds - -We use a different hash function for short and long keys. This should -improve performance and security, especially for long keys. - -=item * readline is faster - -Reading from a file line-by-line with C<readline()> or C<< E<lt>E<gt> >> should -now typically be faster due to a better implementation of the code that -searches for the next newline character. - -=item * - -Assigning one reference to another, I<e.g.> C<$ref1 = $ref2> has been -optimized in some cases. - -=item * - -Remove some exceptions to creating Copy-on-Write strings. The string -buffer growth algorithm has been slightly altered so that you're less -likely to encounter a string which can't be COWed. - -=item * - -Better optimise array and hash assignment: where an array or hash appears -in the LHS of a list assignment, such as C<(..., @a) = (...);>, it's -likely to be considerably faster, especially if it involves emptying the -array/hash. For example, this code runs about a third faster compared to -Perl 5.24.0: - - my @a; - for my $i (1..10_000_000) { - @a = (1,2,3); - @a = (); - } - -=item * - -Converting a single-digit string to a number is now substantially faster. - -=item * - -The C<split> builtin is now slightly faster in many cases: in particular -for the two specially-handled forms - - my @a = split ...; - local @a = split ...; - -=item * - -The rather slow implementation for the experimental subroutine signatures -feature has been made much faster; it is now comparable in speed with the -traditional C<my ($a, $b, @c) = @_>. - -=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 * - -IO::Compress has been upgraded from version 2.069 to 2.074. - -=item * +XXX Any deprecated features, syntax, modules etc. should be listed here. -L<Archive::Tar> has been upgraded from version 2.04 to 2.24. +=head2 Module removals -=item * - -L<arybase> has been upgraded from version 0.11 to 0.12. - -=item * - -L<attributes> has been upgraded from version 0.27 to 0.29. - -The deprecation message for the C<:unique> and C<:locked> attributes -now mention that they will disappear in Perl 5.28. - -=item * - -L<B> has been upgraded from version 1.62 to 1.68. - -=item * +XXX Remove this section if inapplicable. -L<B::Concise> has been upgraded from version 0.996 to 0.999. - -Its output is now more descriptive for C<op_private> flags. - -=item * - -L<B::Debug> has been upgraded from version 1.23 to 1.24. - -=item * - -L<B::Deparse> has been upgraded from version 1.37 to 1.40. - -=item * - -L<B::Xref> has been upgraded from version 1.05 to 1.06. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<base> has been upgraded from version 2.23 to 2.25. - -=item * - -L<bignum> has been upgraded from version 0.42 to 0.47. - -=item * - -L<Carp> has been upgraded from version 1.40 to 1.42. - -=item * +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. -L<charnames> has been upgraded from version 1.43 to 1.44. +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. -=item * - -L<Compress::Raw::Bzip2> has been upgraded from version 2.069 to 2.074. - -=item * - -L<Compress::Raw::Zlib> has been upgraded from version 2.069 to 2.074. - -=item * - -L<Config::Perl::V> has been upgraded from version 0.25 to 0.28. - -=item * - -L<CPAN> has been upgraded from version 2.11 to 2.18. - -=item * - -L<CPAN::Meta> has been upgraded from version 2.150005 to 2.150010. - -=item * - -L<Data::Dumper> has been upgraded from version 2.160 to 2.167. - -The XS implementation now supports Deparse. - -=item * - -L<DB_File> has been upgraded from version 1.835 to 1.840. - -=item * - -L<Devel::Peek> has been upgraded from version 1.23 to 1.26. - -=item * - -L<Devel::PPPort> has been upgraded from version 3.32 to 3.35. - -=item * - -L<Devel::SelfStubber> has been upgraded from version 1.05 to 1.06. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<diagnostics> has been upgraded from version 1.34 to 1.36. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<Digest> has been upgraded from version 1.17 to 1.17_01. - -=item * - -L<Digest::MD5> has been upgraded from version 2.54 to 2.55. - -=item * - -L<Digest::SHA> has been upgraded from version 5.95 to 5.96. - -=item * - -L<DynaLoader> has been upgraded from version 1.38 to 1.42. - -=item * - -L<Encode> has been upgraded from version 2.80 to 2.88. - -=item * - -L<encoding> has been upgraded from version 2.17 to 2.19. - -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. It emits a warning to -that effect and then does nothing. - -=item * - -L<Errno> has been upgraded from version 1.25 to 1.28. - -It now documents that using C<%!> automatically loads Errno for you. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<ExtUtils::Embed> has been upgraded from version 1.33 to 1.34. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<ExtUtils::MakeMaker> has been upgraded from version 7.10_01 to 7.24. - -=item * - -L<ExtUtils::Miniperl> has been upgraded from version 1.05 to 1.06. - -=item * - -L<ExtUtils::ParseXS> has been upgraded from version 3.31 to 3.34. - -=item * - -L<ExtUtils::Typemaps> has been upgraded from version 3.31 to 3.34. - -=item * - -L<feature> has been upgraded from version 1.42 to 1.47. - -=item * - -L<File::Copy> has been upgraded from version 2.31 to 2.32. - -=item * - -L<File::Fetch> has been upgraded from version 0.48 to 0.52. - -=item * - -L<File::Glob> has been upgraded from version 1.26 to 1.28. - -It now Issues a deprecation message for C<File::Glob::glob()>. - -=item * - -L<File::Spec> has been upgraded from version 3.63 to 3.67. - -=item * - -L<FileHandle> has been upgraded from version 2.02 to 2.03. - -=item * - -L<Filter::Simple> has been upgraded from version 0.92 to 0.93. - -It no longer treats C<no MyFilter> immediately following C<use MyFilter> as -end-of-file. -L<[perl #107726]|https://rt.perl.org/Public/Bug/Display.html?id=107726> - -=item * - -L<Getopt::Long> has been upgraded from version 2.48 to 2.49. - -=item * - -L<Getopt::Std> has been upgraded from version 1.11 to 1.12. - -=item * - -L<Hash::Util> has been upgraded from version 0.19 to 0.22. - -=item * - -L<HTTP::Tiny> has been upgraded from version 0.056 to 0.070. - -Internal 599-series errors now include the redirect history. - -=item * - -L<I18N::LangTags> has been upgraded from version 0.40 to 0.42. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<IO> has been upgraded from version 1.36 to 1.38. - -=item * - -L<IO::Socket::IP> has been upgraded from version 0.37 to 0.38. - -=item * - -L<IPC::Cmd> has been upgraded from version 0.92 to 0.96. - -=item * - -L<IPC::SysV> has been upgraded from version 2.06_01 to 2.07. - -=item * - -L<JSON::PP> has been upgraded from version 2.27300 to 2.27400_02. - -=item * - -L<lib> has been upgraded from version 0.63 to 0.64. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<List::Util> has been upgraded from version 1.42_02 to 1.46_02. - -=item * - -L<Locale::Codes> has been upgraded from version 3.37 to 3.42. - -=item * - -L<Locale::Maketext> has been upgraded from version 1.26 to 1.28. - -=item * - -L<Locale::Maketext::Simple> has been upgraded from version 0.21 to 0.21_01. - -=item * - -L<Math::BigInt> has been upgraded from version 1.999715 to 1.999806. - -=item * - -L<Math::BigInt::FastCalc> has been upgraded from version 0.40 to 0.5005. - -=item * - -L<Math::BigRat> has been upgraded from version 0.260802 to 0.2611. - -=item * - -L<Math::Complex> has been upgraded from version 1.59 to 1.5901. - -=item * - -L<Memoize> has been upgraded from version 1.03 to 1.03_01. - -=item * - -L<Module::CoreList> has been upgraded from version 5.20170420 to 5.20170530. - -=item * - -L<Module::Load::Conditional> has been upgraded from version 0.64 to 0.68. - -=item * - -L<Module::Metadata> has been upgraded from version 1.000031 to 1.000033. - -=item * - -L<mro> has been upgraded from version 1.18 to 1.20. - -=item * +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. -L<Net::Ping> has been upgraded from version 2.43 to 2.55. - -IPv6 addresses and C<AF_INET6> sockets are now supported, along with several -other enhancements. - -=item * - -L<NEXT> has been upgraded from version 0.65 to 0.67. - -=item * - -L<Opcode> has been upgraded from version 1.34 to 1.39. - -=item * - -L<open> has been upgraded from version 1.10 to 1.11. - -=item * - -L<OS2::Process> has been upgraded from version 1.11 to 1.12. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<overload> has been upgraded from version 1.26 to 1.28. - -Its compilation speed has been improved slightly. - -=item * - -L<parent> has been upgraded from version 0.234 to 0.236. - -=item * - -L<perl5db.pl> has been upgraded from version 1.50 to 1.51. - -It now ignores F</dev/tty> on non-Unix systems. -L<[perl #113960]|https://rt.perl.org/Public/Bug/Display.html?id=113960> - -=item * - -L<Perl::OSType> has been upgraded from version 1.009 to 1.010. - -=item * - -L<perlfaq> has been upgraded from version 5.021010 to 5.021011. - -=item * - -L<PerlIO> has been upgraded from version 1.09 to 1.10. - -=item * - -L<PerlIO::encoding> has been upgraded from version 0.24 to 0.25. - -=item * - -L<PerlIO::scalar> has been upgraded from version 0.24 to 0.26. - -=item * - -L<Pod::Checker> has been upgraded from version 1.60 to 1.73. - -=item * - -L<Pod::Functions> has been upgraded from version 1.10 to 1.11. - -=item * - -L<Pod::Html> has been upgraded from version 1.22 to 1.2202. - -=item * - -L<Pod::Perldoc> has been upgraded from version 3.25_02 to 3.28. - -=item * - -L<Pod::Simple> has been upgraded from version 3.32 to 3.35. - -=item * - -L<Pod::Usage> has been upgraded from version 1.68 to 1.69. - -=item * - -L<POSIX> has been upgraded from version 1.65 to 1.76. - -This remedies several defects in making its symbols exportable. -L<[perl #127821]|https://rt.perl.org/Public/Bug/Display.html?id=127821> - -The C<POSIX::tmpnam()> interface has been removed, -see L</"POSIX::tmpnam() has been removed">. - -The following deprecated functions have been removed: - - POSIX::isalnum - POSIX::isalpha - POSIX::iscntrl - POSIX::isdigit - POSIX::isgraph - POSIX::islower - POSIX::isprint - POSIX::ispunct - POSIX::isspace - POSIX::isupper - POSIX::isxdigit - POSIX::tolower - POSIX::toupper - -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<re> has been upgraded from version 0.32 to 0.34 - -This adds support for the new L<C<E<47>xx>|perlre/E<sol>x and E<sol>xx> -regular expression pattern modifier, and a change to the L<S<C<use re -'strict'>>|re/'strict' mode> experimental feature. When S<C<re -'strict'>> is enabled, a warning now will be generated for all -unescaped uses of the two characters C<"}"> and C<"]"> in regular -expression patterns (outside bracketed character classes) that are taken -literally. This brings them more in line with the C<")"> character which -is always a metacharacter unless escaped. Being a metacharacter only -sometimes, depending on an action at a distance, can lead to silently -having the pattern mean something quite different than was intended, -which the S<C<re 'strict'>> mode is intended to minimize. - -=item * - -L<Safe> has been upgraded from version 2.39 to 2.40. - -=item * - -L<Scalar::Util> has been upgraded from version 1.42_02 to 1.46_02. - -=item * - -L<Storable> has been upgraded from version 2.56 to 2.62. - -Fixes -L<[perl #130098]|https://rt.perl.org/Public/Bug/Display.html?id=130098>. - -=item * - -L<Symbol> has been upgraded from version 1.07 to 1.08. - -=item * - -L<Sys::Syslog> has been upgraded from version 0.33 to 0.35. - -=item * - -L<Term::ANSIColor> has been upgraded from version 4.04 to 4.06. - -=item * - -L<Term::ReadLine> has been upgraded from version 1.15 to 1.16. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<Test> has been upgraded from version 1.28 to 1.30. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<Test::Harness> has been upgraded from version 3.36 to 3.38. - -=item * - -L<Test::Simple> has been upgraded from version 1.001014 to 1.302073. - -=item * - -L<Thread::Queue> has been upgraded from version 3.09 to 3.12. - -=item * - -L<Thread::Semaphore> has been upgraded from 2.12 to 2.13. - -Added the C<down_timed> method. - -=item * - -L<threads> has been upgraded from version 2.07 to 2.15. - -=item * - -L<threads::shared> has been upgraded from version 1.51 to 1.56. - -=item * - -L<Tie::Hash::NamedCapture> has been upgraded from version 0.09 to 0.10. - -=item * - -L<Time::HiRes> has been upgraded from version 1.9733 to 1.9741. - -It now builds on systems with C++11 compilers (such as G++ 6 and Clang++ -3.9). - -Now uses C<clockid_t>. - -=item * - -L<Time::Local> has been upgraded from version 1.2300 to 1.25. - -=item * - -L<Unicode::Collate> has been upgraded from version 1.14 to 1.19. - -=item * - -L<Unicode::UCD> has been upgraded from version 0.64 to 0.68. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<version> has been upgraded from version 0.9916 to 0.9917. - -=item * - -L<VMS::DCLsym> has been upgraded from version 1.06 to 1.08. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=item * - -L<warnings> has been upgraded from version 1.36 to 1.37. - -=item * - -L<XS::Typemap> has been upgraded from version 0.14 to 0.15. - -=item * - -L<XSLoader> has been upgraded from version 0.21 to 0.27. - -Fixed a security hole in which binary files could be loaded from a path -outside of L<C<@INC>|perlvar/@INC>. - -It now uses 3-arg C<open()> instead of 2-arg C<open()>. -L<[perl #130122]|https://rt.perl.org/Public/Bug/Display.html?id=130122> - -=back - -=head1 Documentation - -=head2 New Documentation - -=head3 L<perldeprecation> - -This file documents all upcoming deprecations, and some of the deprecations -which already have been removed. The purpose of this documentation is -two-fold: document what will disappear, and by which version, and serve -as a guide for people dealing with code which has features that no longer -work after an upgrade of their perl. - -=head2 Changes to Existing Documentation - -We have attempted to update the documentation to reflect the changes -listed in this document. If you find any we have missed, send email to -L<perlbug@perl.org|mailto:perlbug@perl.org>. - -Additionally, all references to Usenet have been removed, and the -following selected changes have been made: - -=head3 L<perlfunc> - -=over 4 - -=item * - -Removed obsolete text about L<C<defined()>|perlfunc/defined> -on aggregates that should have been deleted earlier, when the feature -was removed. - -=item * - -Corrected documentation of L<C<eval()>|perlfunc/eval>, -and L<C<evalbytes()>|perlfunc/evalbytes>. - -=item * - -Clarified documentation of L<C<seek()>|perlfunc/seek>, -L<C<tell()>|perlfunc/tell> and L<C<sysseek()>|perlfunc/sysseek> -emphasizing that positions are in bytes and not characters. -L<[perl #128607]|https://rt.perl.org/Public/Bug/Display.html?id=128607> - -=item * - -Clarified documentation of L<C<sort()>|perlfunc/sort LIST> concerning -the variables C<$a> and C<$b>. - -=item * - -In L<C<split()>|perlfunc/split> noted that certain pattern modifiers are -legal, and added a caution about its use in Perls before v5.11. - -=item * - -Removed obsolete documentation of L<C<study()>|perlfunc/study>, noting -that it is now a no-op. - -=item * - -Noted that L<C<vec()>|perlfunc/vec> doesn't work well when the string -contains characters whose code points are above 255. - -=back - -=head3 L<perlguts> - -=over 4 - -=item * - -Added advice on -L<formatted printing of operands of C<Size_t> and C<SSize_t>|perlguts/Formatted Printing of Size_t and SSize_t> - -=back - -=head3 L<perlhack> - -=over 4 - -=item * - -Clarify what editor tab stop rules to use, and note that we are -migrating away from using tabs, replacing them with sequences of SPACE -characters. - -=back - -=head3 L<perlhacktips> - -=over 4 - -=item * - -Give another reason to use C<cBOOL> to cast an expression to boolean. - -=item * - -Note that the macros C<TRUE> and C<FALSE> are available to express -boolean values. - -=back - -=head3 L<perlinterp> - -=over 4 +=over -=item * +=item XXX -L<perlinterp> has been expanded to give a more detailed example of how to -hunt around in the parser for how a given operator is handled. +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 -=head3 L<perllocale> - -=over 4 - -=item * +[ List each other deprecation as a =head2 entry ] -Some locales aren't compatible with Perl. Note that these can cause -core dumps. +=head1 Performance Enhancements -=back +XXX Changes which enhance performance without changing behaviour go here. +There may well be none in a stable release. -=head3 L<perlmod> +[ List each enhancement as a =item entry ] =over 4 =item * -Various clarifications have been added. +XXX =back -=head3 L<perlmodlib> - -=over 4 - -=item * +=head1 Modules and Pragmata -Updated the site mirror list. +XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/> +go here. If Module::CoreList is updated, generate an initial draft of the +following sections using F<Porting/corelist-perldelta.pl>. A paragraph summary +for important changes should then be added by hand. In an ideal world, +dual-life modules would have a F<Changes> file that could be cribbed. -=back +[ Within each section, list entries as a =item entry ] -=head3 L<perlobj> +=head2 New Modules and Pragmata =over 4 =item * -Added a section on calling methods using their fully qualified names. - -=item * - -Do not discourage manual C<@ISA>. +XXX =back -=head3 L<perlootut> +=head2 Updated Modules and Pragmata =over 4 =item * -Mention C<Moo> more. +L<XXX> has been upgraded from version A.xx to B.yy. =back -=head3 L<perlop> +=head2 Removed Modules and Pragmata =over 4 =item * -Note that white space must be used for quoting operators if the -delimiter is a word character (I<i.e.>, matches C<\w>). - -=item * - -Clarify that in regular expression patterns delimited by single quotes, -no variable interpolation is done. +XXX =back -=head3 L<perlre> - -=over 4 - -=item * - -The first part was extensively rewritten to incorporate various basic -points, that in earlier versions were mentioned in sort of an appendix -on Version 8 regular expressions. - -=item * - -Note that it is common to have the C</x> modifier and forget that this -means that C<"#"> has to be escaped. - -=back +=head1 Documentation -=head3 L<perlretut> +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>. -=over 4 +=head2 New Documentation -=item * +XXX Changes which create B<new> files in F<pod/> go here. -Add introductory material. +=head3 L<XXX> -=item * +XXX Description of the purpose of the new file here -Note that a metacharacter occurring in a context where it can't mean -that, silently loses its meta-ness and matches literally. -L<C<use re 'strict'>|re/'strict' mode> can catch some of these. +=head2 Changes to Existing Documentation -=back +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<perlunicode> +=head3 L<XXX> =over 4 =item * -Corrected the text about Unicode BYTE ORDER MARK handling. - -=item * - -Updated the text to correspond with changes in Unicode UTS#18, concerning -regular expressions, and Perl compatibility with what it says. +XXX Description of the change here =back -=head3 L<perlvar> - -=over 4 - -=item * +=head1 Diagnostics -Document C<@ISA>. It was documented in other places, but not in L<perlvar>. +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>. -=back - -=head1 Diagnostics +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. =head2 New Diagnostics +XXX Newly added diagnostic messages go under here, separated into New Errors +and New Warnings + =head3 New Errors =over 4 =item * -L<A signature parameter must start with C<'$'>, C<'@'> or C<'%'> -|perldiag/A signature parameter must start with C<'$'>, C<'@'> or C<'%'>> - -=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""> - -=item * - -L<%s: command not found|perldiag/"%s: command not found"> - -(A) You've accidentally run your script through B<bash> or another shell -instead of Perl. Check the C<#!> line, or manually feed your script into -Perl yourself. The C<#!> line at the top of your file could look like: - - #!/usr/bin/perl - -=item * - -L<%s: command not found: %s|perldiag/"%s: command not found: %s"> - -(A) You've accidentally run your script through B<zsh> or another shell -instead of Perl. Check the C<#!> line, or manually feed your script into -Perl yourself. The C<#!> line at the top of your file could look like: - - #!/usr/bin/perl - -=item * - -L<The experimental declared_refs feature is not enabled|perldiag/"The experimental declared_refs feature is not enabled"> - -(F) To declare references to variables, as in C<my \%x>, you must first enable -the feature: - - no warnings "experimental::declared_refs"; - use feature "declared_refs"; - -See L</Declaring a reference to a variable>. - -=item * - -L<Illegal character following sigil in a subroutine signature -|perldiag/Illegal character following sigil in a subroutine signature> - -=item * - -L<Indentation on line %d of here-doc doesn't match delimiter -|perldiag/Indentation on line %d of here-doc doesn't match delimiter> - -=item * - -L<Infinite recursion via empty pattern|perldiag/"Infinite recursion via empty pattern">. - -Using the empty pattern (which re-executes the last successfully-matched -pattern) inside a code block in another regex, as in C</(?{ s!!new! })/>, has -always previously yielded a segfault. It now produces this error. - -=item * - -L<Malformed UTF-8 string in "%s" -|perldiag/Malformed UTF-8 string in "%s"> - -=item * - -L<Multiple slurpy parameters not allowed -|perldiag/Multiple slurpy parameters not allowed> - -=item * - -L<C<'#'> not allowed immediately following a sigil in a subroutine signature -|perldiag/C<'#'> not allowed immediately following a sigil in a subroutine signature> - -=item * - -L<panic: unknown OA_*: %x -|perldiag/panic: unknown OA_*: %x> - -=item * - -L<Unescaped left brace in regex is illegal here|perldiag/Unescaped left brace in regex is illegal here in regex; marked by S<E<lt>-- HERE> in mE<sol>%sE<sol>> - -Unescaped left braces are now illegal in some contexts in regular expression -patterns. In other contexts, they are still just deprecated; they will -be illegal in Perl 5.30. - -=item * - -L<Version control conflict marker|perldiag/"Version control conflict marker"> - -(F) The parser found a line starting with C<E<lt>E<lt>E<lt>E<lt>E<lt>E<lt>E<lt>>, -C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>. These may be left by a -version control system to mark conflicts after a failed merge operation. +XXX L<message|perldiag/"message"> =back @@ -1521,1790 +192,204 @@ version control system to mark conflicts after a failed merge operation. =item * -L<Can't determine class of operator %s, assuming C<BASEOP> -|perldiag/Can't determine class of operator %s, assuming C<BASEOP>> - -=item * - -L<Declaring references is experimental|perldiag/"Declaring references is experimental"> - -(S experimental::declared_refs) This warning is emitted if you use a reference -constructor on the right-hand side of C<my()>, C<state()>, C<our()>, or -C<local()>. Simply suppress the warning if you want to use the feature, but -know that in doing so you are taking the risk of using an experimental feature -which may change or be removed in a future Perl version: - - no warnings "experimental::declared_refs"; - use feature "declared_refs"; - $fooref = my \$foo; - -See L</Declaring a reference to a variable>. - -=item * - -L<do "%s" failed, '.' is no longer in @INC|perldiag/do "%s" failed, '.' is no longer in @INC; did you mean do ".E<sol>%s"?> - -Since C<"."> is now removed from C<@INC> by default, C<do> will now trigger a warning recommending to fix the C<do> statement. - -=item * - -L<C<File::Glob::glob()> will disappear in perl 5.30. Use C<File::Glob::bsd_glob()> instead. -|perldiag/C<File::Glob::glob()> will disappear in perl 5.30. Use C<File::Glob::bsd_glob()> instead.> - -=item * - -L<Unescaped literal '%c' in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol> -|perldiag/Unescaped literal '%c' in regex; marked by <-- HERE in mE<sol>%sE<sol>> - -=item * - -L<Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30|perldiag/"Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30"> - -See L</Deprecations> +XXX L<message|perldiag/"message"> =back =head2 Changes to Existing Diagnostics -=over 4 - -=item * - -When a C<require> fails, we now do not provide C<@INC> when the C<require> -is for a file instead of a module. - -=item * - -When C<@INC> is not scanned for a C<require> call, we no longer display -C<@INC> to avoid confusion. - -=item * - -L<Attribute "locked" is deprecated, and will disappear in Perl 5.28 -|perldiag/Attribute "locked" is deprecated, and will disappear in Perl 5.28> - -This existing warning has had the I<and will disappear> text added in this -release. - -=item * - -L<Attribute "unique" is deprecated, and will disappear in Perl 5.28 -|perldiag/Attribute "unique" is deprecated, and will disappear in Perl 5.28> - -This existing warning has had the I<and will disappear> text added in this -release. - -=item * - -Calling POSIX::%s() is deprecated - -This warning has been removed, as the deprecated functions have been -removed from POSIX. - -=item * - -L<Constants from lexical variables potentially modified elsewhere are deprecated. This will not be allowed in Perl 5.32 -|perldiag/Constants from lexical variables potentially modified elsewhere are deprecated. This will not be allowed in Perl 5.32> - -This existing warning has had the I<this will not be allowed> text added -in this release. - -=item * - -L<Deprecated use of C<my()> in false conditional. This will be a fatal error in Perl 5.30 -|perldiag/Deprecated use of C<my()> in false conditional. This will be a fatal error in Perl 5.30> - -This existing warning has had the I<this will be a fatal error> text added -in this release. - -=item * - -L<C<dump()> better written as C<CORE::dump()>. C<dump()> will no longer be available in Perl 5.30 -|perldiag/C<dump()> better written as C<CORE::dump()>. C<dump()> will no longer be available in Perl 5.30> - -This existing warning has had the I<no longer be available> text added in -this release. - -=item * - -L<Experimental %s on scalar is now forbidden -|perldiag/Experimental %s on scalar is now forbidden> - -This message is now followed by more helpful text. -L<[perl #127976]|https://rt.perl.org/Public/Bug/Display.html?id=127976> - -=item * - -Experimental "%s" subs not enabled - -This warning was been removed, as lexical subs are no longer experimental. - -=item * - -Having more than one /%c regexp modifier is deprecated - -This deprecation warning has been removed, since C</xx> now has a new -meaning. - -=item * - -L<%s() is deprecated on C<:utf8> handles. This will be a fatal error in Perl 5.30 -|perldiag/%s() is deprecated on C<:utf8> handles. This will be a fatal error in Perl 5.30>. - -where "%s" is one of C<sysread>, C<recv>, C<syswrite>, or C<send>. - -This existing warning has had the I<this will be a fatal error> text added -in this release. - -This warning is now enabled by default, as all C<deprecated> category -warnings should be. - -=item * - -L<C<$*> is no longer supported. Its use will be fatal in Perl 5.30 -|perldiag/C<$*> is no longer supported. Its use will be fatal in Perl 5.30> - -This existing warning has had the I<its use will be fatal> text added in -this release. - -=item * - -L<C<$#> is no longer supported. Its use will be fatal in Perl 5.30 -|perldiag/C<$#> is no longer supported. Its use will be fatal in Perl 5.30> - -This existing warning has had the I<its use will be fatal> text added in -this release. - -=item * - -L<Malformed UTF-8 character%s -|perldiag/Malformed UTF-8 character%s> - -Details as to the exact problem have been added at the end of this -message - -=item * - -L<Missing or undefined argument to %s -|perldiag/Missing or undefined argument to %s> - -This warning used to warn about C<require>, even if it was actually C<do> -which being executed. It now gets the operation name right. - -=item * - -NO-BREAK SPACE in a charnames alias definition is deprecated - -This warning has been removed as the behavior is now an error. - -=item * - -L<Odd nameE<sol>value argument for subroutine '%s' -|perldiag/"Odd nameE<sol>value argument for subroutine '%s'"> - -This warning now includes the name of the offending subroutine. - -=item * - -L<Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28 -|perldiag/Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28> - -This existing warning has had the I<this will be a fatal error> text added -in this release. - -=item * - -L<Opening filehandle %s also as a directory. This will be a fatal error in Perl 5.28 -|perldiag/Opening filehandle %s also as a directory. This will be a fatal error in Perl 5.28> - -This existing warning has had the I<this will be a fatal error> text added -in this release. - -=item * - -panic: ck_split, type=%u - -panic: pp_split, pm=%p, s=%p - -These panic errors have been removed. - -=item * - -Passing malformed UTF-8 to "%s" is deprecated - -This warning has been changed to the fatal -L<Malformed UTF-8 string in "%s" -|perldiag/Malformed UTF-8 string in "%s"> - -=item * - -L<Setting C<< $E<sol> >> to a reference to %s as a form of slurp is deprecated, treating as undef. This will be fatal in Perl 5.28 -|perldiag/Setting C<< $E<sol> >> to a reference to %s as a form of slurp is deprecated, treating as undef. This will be fatal in Perl 5.28> - -This existing warning has had the I<this will be fatal> text added in -this release. - -=item * - -L<C<${^ENCODING}> is no longer supported. Its use will be fatal in Perl 5.28|perldiag/"${^ENCODING} is no longer supported. Its use will be fatal in Perl 5.28"> - -This warning used to be: "Setting C<${^ENCODING}> is deprecated". - -The special action of the variable C<${^ENCODING}> was formerly used to -implement the C<encoding> pragma. As of Perl 5.26, rather than being -deprecated, assigning to this variable now has no effect except to issue -the warning. - -=item * - -L<Too few arguments for subroutine '%s' -|perldiag/Too few arguments for subroutine '%s'> - -This warning now includes the name of the offending subroutine. - -=item * - -L<Too many arguments for subroutine '%s' -|perldiag/Too many arguments for subroutine '%s'> - -This warning now includes the name of the offending subroutine. - -=item * - -L<Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in mE<sol>%sE<sol> -|perldiag/Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in mE<sol>%sE<sol>> - -This existing warning has had the I<here (and will be fatal...)> text -added in this release. - -=item * - -L<Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28 -|perldiag/Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28> - -This existing warning has had the I<its use will be fatal> text added in -this release. - -=item * - -L<Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28 -|perldiag/Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28> - -This existing warning has had the I<its use will be fatal> text added in -this release. - -=item * - -L<Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28 -|perldiag/Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28> - -This existing warning has had the I<this will be fatal> text added in -this release. - -=item * - -L<Use of comma-less variable list is deprecated. Its use will be fatal in Perl 5.28 -|perldiag/Use of comma-less variable list is deprecated. Its use will be fatal in Perl 5.28> - -This existing warning has had the I<its use will be fatal> text added in -this release. - -=item * - -L<Use of inherited C<AUTOLOAD> for non-method %s() is deprecated. This will be fatal in Perl 5.28 -|perldiag/Use of inherited C<AUTOLOAD> for non-method %s() is deprecated. This will be fatal in Perl 5.28> - -This existing warning has had the I<this will be fatal> text added in -this release. - -=item * - -L<Use of strings with code points over 0xFF as arguments to %s operator is deprecated. This will be a fatal error in Perl 5.28 -|perldiag/Use of strings with code points over 0xFF as arguments to %s operator is deprecated. This will be a fatal error in Perl 5.28> - -This existing warning has had the I<this will be a fatal error> text added in -this release. - -=back - -=head1 Utility Changes - -=head2 F<c2ph> and F<pstruct> - -=over 4 - -=item * - -These old utilities have long since superceded by L<h2xs>, and are -now gone from the distribution. - -=back - -=head2 F<Porting/pod_lib.pl> +XXX Changes (i.e. rewording) of diagnostic messages go here =over 4 =item * -Removed spurious executable bit. - -=item * - -Account for the possibility of DOS file endings. +XXX Describe change here =back -=head2 F<Porting/sync-with-cpan> - -=over 4 - -=item * +=head1 Utility Changes -Many improvements. +XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go here. +Most of these are built within the directory F<utils>. -=back +[ 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 F<perf/benchmarks> +=head2 L<XXX> =over 4 =item * -Tidy file, rename some symbols. +XXX =back -=head2 F<Porting/checkAUTHORS.pl> - -=over 4 - -=item * - -Replace obscure character range with C<\w>. +=head1 Configuration and Compilation -=back +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. -=head2 F<t/porting/regen.t> +[ List changes as a =item entry ]. =over 4 =item * -Try to be more helpful when tests fail. +XXX =back -=head2 F<utils/h2xs.PL> - -=over 4 - -=item * - -Avoid infinite loop for enums. +=head1 Testing -=back +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. -=head2 L<perlbug> +[ List each test improvement as a =item entry ] =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 -F<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. -L<[perl #128020]|https://rt.perl.org/Public/Bug/Display.html?id=128020> +XXX =back -=head1 Configuration and Compilation - -=over 4 - -=item * - -C<-Ddefault_inc_excludes_dot> has added, and enabled by default. - -=item * - -The C<dtrace> build process has further changes -L<[perl #130108]|https://rt.perl.org/Public/Bug/Display.html?id=130108>: - -=over - -=item * - -If the C<-xnolibs> is available, use that so a F<dtrace> perl can be -built within a FreeBSD jail. - -=item * - -On systems that build a F<dtrace> object file (FreeBSD, Solaris, and -SystemTap's dtrace emulation), copy the input objects to a separate -directory and process them there, and use those objects in the link, -since C<dtrace -G> also modifies these objects. - -=item * - -Add F<libelf> to the build on FreeBSD 10.x, since F<dtrace> adds -references to F<libelf> symbols. - -=item * - -Generate a dummy F<dtrace_main.o> if C<dtrace -G> fails to build it. A -default build on Solaris generates probes from the unused inline -functions, while they don't on FreeBSD, which causes C<dtrace -G> to -fail. - -=back - -=item * - -You can now disable perl's use of the C<PERL_HASH_SEED> and -C<PERL_PERTURB_KEYS> environment variables by configuring perl with -C<-Accflags=NO_PERL_HASH_ENV>. - -=item * - -You can now disable perl's use of the C<PERL_HASH_SEED_DEBUG> environment -variable by configuring perl with -C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>. - -=item * - -F<Configure> now zeroes out the alignment bytes when calculating the bytes -for 80-bit C<NaN> and C<Inf> to make builds more reproducible. -L<[perl #130133]|https://rt.perl.org/Public/Bug/Display.html?id=130133> - -=item * - -Since v5.18, for testing purposes we have included support for -building perl with a variety of non-standard, and non-recommended -hash functions. Since we do not recommend the use of these functions, -we have removed them and their corresponding build options. Specifically -this includes the following build options: - - PERL_HASH_FUNC_SDBM - PERL_HASH_FUNC_DJB2 - PERL_HASH_FUNC_SUPERFAST - PERL_HASH_FUNC_MURMUR3 - PERL_HASH_FUNC_ONE_AT_A_TIME - PERL_HASH_FUNC_ONE_AT_A_TIME_OLD - PERL_HASH_FUNC_MURMUR_HASH_64A - PERL_HASH_FUNC_MURMUR_HASH_64B - -=item * - -Remove "Warning: perl appears in your path" - -This install warning is more or less obsolete, since most platforms already -B<will> have a F</usr/bin/perl> or similar provided by the OS. - -=item * - -Reduce verbosity of C<make install.man> - -Previously, two progress messages were emitted for each manpage: one by -installman itself, and one by the function in F<install_lib.pl> that it calls to -actually install the file. Disabling the second of those in each case saves -over 750 lines of unhelpful output. - -=item * - -Cleanup for C<clang -Weverything> support. -L<[perl #129961]|https://rt.perl.org/Public/Bug/Display.html?id=129961> - -=item * - -F<Configure>: signbit scan was assuming too much, stop assuming negative 0. - -=item * - -Various compiler warnings have been silenced. - -=item * - -Several smaller changes have been made to remove impediments to compiling -under C++11. - -=item * - -Builds using C<USE_PAD_RESET> now work again; this configuration had -bit-rotted. - -=item * - -A probe for C<gai_strerror> was added to F<Configure> that checks if -the C<gai_strerror()> routine is available and can be used to -translate error codes returned by C<getaddrinfo()> into human -readable strings. - -=item * - -F<Configure> now aborts if both C<-Duselongdouble> and C<-Dusequadmath> are -requested. -L<[perl #126203]|https://rt.perl.org/Public/Bug/Display.html?id=126203> - -=item * - -Fixed a bug in which F<Configure> could append C<-quadmath> to the -archname even if it was already present. -L<[perl #128538]|https://rt.perl.org/Public/Bug/Display.html?id=128538> - -=item * - -Clang builds with C<-DPERL_GLOBAL_STRUCT> or -C<-DPERL_GLOBAL_STRUCT_PRIVATE> have -been fixed (by disabling Thread Safety Analysis for these configurations). - -=item * - -F<make_ext.pl> no longer updates a module's F<pm_to_blib> file when no -files require updates. This could cause dependencies, F<perlmain.c> -in particular, to be rebuilt unnecessarily. -L<[perl #126710]|https://rt.perl.org/Public/Bug/Display.html?id=126710> - -=item * - -The output of C<perl -V> has been reformatted so that each configuration -and compile-time option is now listed one per line, to improve -readability. - -=item * - -F<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. -L<[perl #127234]|https://rt.perl.org/Public/Bug/Display.html?id=127234> - -=item * - -Perl built with C<-Accflags=-DPERL_TRACE_OPS> now only dumps the operator -counts when the environment variable C<PERL_TRACE_OPS> is 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>), F<Configure> was treating all probed symbols as present on the -system, regardless of whether they actually exist. This has been fixed. -L<[perl #128131]|https://rt.perl.org/Public/Bug/Display.html?id=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. -L<[perl #128052]|https://rt.perl.org/Public/Bug/Display.html?id=128052> - -=item * +=head1 Platform Support -The build process no longer emits an extra blank line before building each -"simple" extension (those with only F<*.pm> and F<*.pod> files). +XXX Any changes to platform support should be listed in the sections below. -=back +[ Within the sections, list each platform as a =item entry with specific +changes as paragraphs below it. ] -=head1 Testing +=head2 New Platforms -Tests were added and changed to reflect the other additions and changes -in this release. Furthermore, these substantive changes were made: +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 * - -A new test script, F<comp/parser_run.t>, has been added that is like -F<comp/parser.t> but with F<test.pl> included so that C<runperl()> and the -like are available for use. - -=item * - -Tests for locales were erroneously using locales incompatible with Perl. +=item XXX-some-platform -=item * - -Some parts of the test suite that try to exhaustively test edge cases in the -regex implementation have been restricted to running for a maximum of five -minutes. On slow systems they could otherwise take several hours, without -significantly improving our understanding of the correctness of the code -under test. - -=item * - -A new internal facility allows analysing the time taken by the individual -tests in Perl's own test suite; see F<Porting/harness-timer-report.pl>. - -=item * - -F<t/re/regexp_nonull.t> has been added to test that the regular expression -engine can handle scalars that do not have a null byte just past the end of -the string. - -=item * - -A new test script, F<t/op/decl-refs.t>, has been added to test the new feature -L</Declaring a reference to a variable>. - -=item * - -A new test script, F<t/re/keep_tabs.t> has been added to contain tests -where C<\t> characters should not be expanded into spaces. - -=item * - -A new test script, F<t/re/anyof.t>, has been added to test that the ANYOF nodes -generated by bracketed character classes are as expected. - -=item * - -There is now more extensive testing of the Unicode-related API macros -and functions. - -=item * - -Several of the longer running API test files have been split into -multiple test files so that they can be run in parallel. - -=item * - -F<t/harness> now tries really hard not to run tests which are located -outside of the Perl source tree. -L<[perl #124050]|https://rt.perl.org/Public/Bug/Display.html?id=124050> - -=item * - -Prevent debugger tests (F<lib/perl5db.t>) from failing due to the contents -of C<$ENV{PERLDB_OPTS}>. -L<[perl #130445]|https://rt.perl.org/Public/Bug/Display.html?id=130445> +XXX =back -=head1 Platform Support - -=head2 New Platforms - -=over 4 - -=item NetBSD/VAX +=head2 Discontinued Platforms -Perl now compiles under NetBSD on VAX machines. However, it's not -possible for that platform to implement floating-point infinities and -NaNs compatible with most modern systems, which implement the IEEE-754 -floating point standard. The hexadecimal floating point (C<0x...p[+-]n> -literals, C<printf %a>) is not implemented, either. -The C<make test> passes 98% of tests. +XXX List any platforms that this version of perl no longer compiles on. =over 4 -=item * - -Test fixes and minor updates. - -=item * - -Account for lack of C<inf>, C<nan>, and C<-0.0> support. +=item XXX-some-platform -=back +XXX =back =head2 Platform-Specific Notes -=over 4 - -=item Darwin +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 * - -Don't treat C<-Dprefix=/usr> as special: instead require an extra option -C<-Ddarwin_distribution> to produce the same results. +=item XXX-some-platform -=item * - -OS X El Capitan doesn't implement the C<clock_gettime()> or -C<clock_getres()> APIs; emulate them as necessary. - -=item * - -Deprecated C<syscall(2)> on macOS 10.12. +XXX =back -=item EBCDIC - -Several tests have been updated to work (or be skipped) on EBCDIC platforms. - -=item HP-UX - -The L<Net::Ping> UDP test is now skipped on HP-UX. - -=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). - -=item VAX - -VAX floating point formats are now supported on NetBSD. - -=item VMS - -=over 4 - -=item * - -The path separator for the C<PERL5LIB> and C<PERLLIB> environment entries is -now a colon (C<":">) when running under a Unix shell. There is no change when -running under DCL (it's still C<"|">). - -=item * - -F<configure.com> now recognizes the VSI-branded C compiler and no longer -recognizes the "DEC"-branded C compiler (as there hasn't been such a thing for -15 or more years). +=head1 Internal Changes -=back +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. -=item Windows +[ List each change as a =item entry ] =over 4 =item * -Support for compiling perl on Windows using Microsoft Visual Studio 2015 -(containing Visual C++ 14.0) has been added. - -This version of VC++ includes a completely rewritten C run-time library, some -of the changes in which mean that work done to resolve a socket -C<close()> bug in -perl #120091 and perl #118059 is not workable in its current state with this -version of VC++. Therefore, we have effectively reverted that bug fix for -VS2015 onwards on the basis that being able to build with VS2015 onwards is -more important than keeping the bug fix. We may revisit this in the future to -attempt to fix the bug again in a way that is compatible with VS2015. - -These changes do not affect compilation with GCC or with Visual Studio versions -up to and including VS2013, I<i.e.>, the bug fix is retained (unchanged) for those -compilers. - -Note that you may experience compatibility problems if you mix a perl built -with GCC or VS E<lt>= VS2013 with XS modules built with VS2015, or if you mix a -perl built with VS2015 with XS modules built with GCC or VS E<lt>= VS2013. -Some incompatibility may arise because of the bug fix that has been reverted -for VS2015 builds of perl, but there may well be incompatibility anyway because -of the rewritten CRT in VS2015 (I<e.g.>, see discussion at -L<http://stackoverflow.com/questions/30412951>). - -=item * - -It now automatically detects GCC versus Visual C and sets the VC version -number on Win32. +XXX =back -=item Linux - -Drop support for Linux F<a.out> executable format. Linux has used ELF for -over twenty years. - -=item OpenBSD 6 - -OpenBSD 6 still does not support returning C<pid>, C<gid>, or C<uid> with -C<SA_SIGINFO>. Make sure to account for it. - -=item FreeBSD - -F<t/uni/overload.t>: Skip hanging test on FreeBSD. - -=item DragonFly BSD +=head1 Selected Bug Fixes -DragonFly BSD now has support for C<setproctitle()>. -L<[perl #130068]|https://rt.perl.org/Public/Bug/Display.html?id=130068>. +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>. -=back - -=head1 Internal Changes +[ List each fix as a =item entry ] =over 4 =item * -A new API function L<C<sv_setpv_bufsize()>|perlapi/sv_setpv_bufsize> -allows simultaneously setting the -length and the allocated size of the buffer in an C<SV>, growing the -buffer if necessary. - -=item * - -A new API macro L<C<SvPVCLEAR()>|perlapi/SvPVCLEAR> sets its C<SV> -argument to an empty string, -like Perl-space C<$x = ''>, but with several optimisations. - -=item * - -Several new macros and functions for dealing with Unicode and -UTF-8-encoded strings have been added to the API, as well as some -changes in the -functionality of existing functions (see L<perlapi/Unicode Support> for -more details): - -=over - -=item * - -New versions of the API macros like C<isALPHA_utf8> and C<toLOWER_utf8> -have been added, each with the suffix C<_safe>, like -L<C<isSPACE_utf8_safe>|perlapi/isSPACE>. These take an extra -parameter, giving an upper -limit of how far into the string it is safe to read. Using the old -versions could cause attempts to read beyond the end of the input buffer -if the UTF-8 is not well-formed, and their use now raises a deprecation -warning. Details are at L<perlapi/Character classification>. - -=item * - -Macros like L<C<isALPHA_utf8>|perlapi/isALPHA> and -L<C<toLOWER_utf8>|perlapi/toLOWER_utf8> now die if they detect -that their input UTF-8 is malformed. A deprecation warning had been -issued since Perl 5.18. - -=item * - -Several new macros for analysing the validity of utf8 sequences. These -are: - -L<C<UTF8_GOT_ABOVE_31_BIT>|perlapi/UTF8_GOT_ABOVE_31_BIT> -L<C<UTF8_GOT_CONTINUATION>|perlapi/UTF8_GOT_CONTINUATION> -L<C<UTF8_GOT_EMPTY>|perlapi/UTF8_GOT_EMPTY> -L<C<UTF8_GOT_LONG>|perlapi/UTF8_GOT_LONG> -L<C<UTF8_GOT_NONCHAR>|perlapi/UTF8_GOT_NONCHAR> -L<C<UTF8_GOT_NON_CONTINUATION>|perlapi/UTF8_GOT_NON_CONTINUATION> -L<C<UTF8_GOT_OVERFLOW>|perlapi/UTF8_GOT_OVERFLOW> -L<C<UTF8_GOT_SHORT>|perlapi/UTF8_GOT_SHORT> -L<C<UTF8_GOT_SUPER>|perlapi/UTF8_GOT_SUPER> -L<C<UTF8_GOT_SURROGATE>|perlapi/UTF8_GOT_SURROGATE> -L<C<UTF8_IS_INVARIANT>|perlapi/UTF8_IS_INVARIANT> -L<C<UTF8_IS_NONCHAR>|perlapi/UTF8_IS_NONCHAR> -L<C<UTF8_IS_SUPER>|perlapi/UTF8_IS_SUPER> -L<C<UTF8_IS_SURROGATE>|perlapi/UTF8_IS_SURROGATE> -L<C<UVCHR_IS_INVARIANT>|perlapi/UVCHR_IS_INVARIANT> -L<C<isUTF8_CHAR_flags>|perlapi/isUTF8_CHAR_flags> -L<C<isSTRICT_UTF8_CHAR>|perlapi/isSTRICT_UTF8_CHAR> -L<C<isC9_STRICT_UTF8_CHAR>|perlapi/isC9_STRICT_UTF8_CHAR> - -=item * - -Functions that are all extensions of the C<is_utf8_string_I<*>()> functions, -that apply various restrictions to the UTF-8 recognized as valid: - -L<C<is_strict_utf8_string>|perlapi/is_strict_utf8_string>, -L<C<is_strict_utf8_string_loc>|perlapi/is_strict_utf8_string_loc>, -L<C<is_strict_utf8_string_loclen>|perlapi/is_strict_utf8_string_loclen>, - -L<C<is_c9strict_utf8_string>|perlapi/is_c9strict_utf8_string>, -L<C<is_c9strict_utf8_string_loc>|perlapi/is_c9strict_utf8_string_loc>, -L<C<is_c9strict_utf8_string_loclen>|perlapi/is_c9strict_utf8_string_loclen>, - -L<C<is_utf8_string_flags>|perlapi/is_utf8_string_flags>, -L<C<is_utf8_string_loc_flags>|perlapi/is_utf8_string_loc_flags>, -L<C<is_utf8_string_loclen_flags>|perlapi/is_utf8_string_loclen_flags>, - -L<C<is_utf8_fixed_width_buf_flags>|perlapi/is_utf8_fixed_width_buf_flags>, -L<C<is_utf8_fixed_width_buf_loc_flags>|perlapi/is_utf8_fixed_width_buf_loc_flags>, -L<C<is_utf8_fixed_width_buf_loclen_flags>|perlapi/is_utf8_fixed_width_buf_loclen_flags>. - -L<C<is_utf8_invariant_string>|perlapi/is_utf8_invariant_string>. -L<C<is_utf8_valid_partial_char>|perlapi/is_utf8_valid_partial_char>. -L<C<is_utf8_valid_partial_char_flags>|perlapi/is_utf8_valid_partial_char_flags>. - -=item * - -The functions L<C<utf8n_to_uvchr>|perlapi/utf8n_to_uvchr> and its -derivatives have had several changes of behaviour. - -Calling them, while passing a string length of 0 is now asserted against -in DEBUGGING builds, and otherwise, returns the Unicode REPLACEMENT -CHARACTER. If you have nothing to decode, you shouldn't call the decode -function. - -They now return the Unicode REPLACEMENT CHARACTER if called with UTF-8 -that has the overlong malformation and that malformation is allowed by -the input parameters. This malformation is where the UTF-8 looks valid -syntactically, but there is a shorter sequence that yields the same code -point. This has been forbidden since Unicode version 3.1. - -They now accept an input -flag to allow the overflow malformation. This malformation is when the -UTF-8 may be syntactically valid, but the code point it represents is -not capable of being represented in the word length on the platform. -What "allowed" means, in this case, is that the function doesn't return an -error, and it advances the parse pointer to beyond the UTF-8 in -question, but it returns the Unicode REPLACEMENT CHARACTER as the value -of the code point (since the real value is not representable). - -They no longer abandon searching for other malformations when the first -one is encountered. A call to one of these functions thus can generate -multiple diagnostics, instead of just one. - -=item * - -L<C<valid_utf8_to_uvchr()>|perlapi/valid_utf8_to_uvchr> has been added -to the API (although it was -present in core earlier). Like C<utf8_to_uvchr_buf()>, but assumes that -the next character is well-formed. Use with caution. - -=item * - -A new function, L<C<utf8n_to_uvchr_error>|perlapi/utf8n_to_uvchr_error>, -has been added for -use by modules that need to know the details of UTF-8 malformations -beyond pass/fail. Previously, the only ways to know why a sequence was -ill-formed was to capture and parse the generated diagnostics or to do -your own analysis. - -=item * - -There is now a safer version of utf8_hop(), called -L<C<utf8_hop_safe()>|perlapi/utf8_hop_safe>. -Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or -after the end of the supplied buffer. - -=item * - -Two new functions, L<C<utf8_hop_forward()>|perlapi/utf8_hop_forward> and -L<C<utf8_hop_back()>|perlapi/utf8_hop_back> are -similar to C<utf8_hop_safe()> but are for when you know which direction -you wish to travel. - -=item * - -Two new macros which return useful utf8 byte sequences: - -L<C<BOM_UTF8>|perlapi/BOM_UTF8> - -L<C<REPLACEMENT_CHARACTER_UTF8>|perlapi/REPLACEMENT_CHARACTER_UTF8> +XXX =back -=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. - -See L<perl5220delta/"Internal Changes"> for more details of what this -build option does. - -=item * - -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. - -=item * - -The C<OP_PUSHRE> op has been eliminated and the C<OP_SPLIT> op has been -changed from class C<LISTOP> to C<PMOP>. - -Formerly the first child of a split would be a C<pushre>, which would have the -C<split>'s regex attached to it. Now the regex is attached directly to the -C<split> op, and the C<pushre> has been eliminated. - -=item * - -The L<C<op_class()>|perlapi/op_class> API function has been added. This -is like the existing -C<OP_CLASS()> macro, but can more accurately determine what struct an op -has been allocated as. For example C<OP_CLASS()> might return -C<OA_BASEOP_OR_UNOP> indicating that ops of this type are usually -allocated as an C<OP> or C<UNOP>; while C<op_class()> will return -C<OPclass_BASEOP> or C<OPclass_UNOP> as appropriate. - -=item * - -All parts of the internals now agree that the C<sassign> op is a C<BINOP>; -previously it was listed as a C<BASEOP> in F<regen/opcodes>, which meant -that several parts of the internals had to be special-cased to accommodate -it. This oddity's original motivation was to handle code like C<$x ||= 1>; -that is now handled in a simpler way. - -=item * - -The output format of the L<C<op_dump()>|perlapi/op_dump> function (as -used by C<perl -Dx>) -has changed: it now displays an "ASCII-art" tree structure, and shows more -low-level details about each op, such as its address and class. - -=item * - -The C<PADOFFSET> type has changed from being unsigned to signed, and -several pad-related variables such as C<PL_padix> have changed from being -of type C<I32> to type C<PADOFFSET>. - -=item * - -The C<DEBUGGING>-mode output for regex compilation and execution has been -enhanced. - -=item * - -Several obscure SV flags have been eliminated, sometimes along with the -macros which manipulate them: C<SVpbm_VALID>, C<SVpbm_TAIL>, C<SvTAIL_on>, -C<SvTAIL_off>, C<SVrepl_EVAL>, C<SvEVALED>. - -=item * +=head1 Known Problems -An OP C<op_private> flag has been eliminated: C<OPpRUNTIME>. This used to -often get set on C<PMOP> ops, but had become meaningless over time. +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. -=back - -=head1 Selected Bug Fixes +[ List each fix as a =item entry ] =over 4 =item * -Perl no longer panics when switching into some locales on machines with -buggy C<strxfrm()> implementations in their F<libc>. -L<[perl #121734]|https://rt.perl.org/Public/Bug/Display.html?id=121734> - -=item * - -C< $-{$name} > would leak an C<AV> on each access if the regular -expression had no named captures. The same applies to access to any -hash tied with L<Tie::Hash::NamedCapture> and C<< all =E<gt> 1 >>. -L<[perl #130822]|https://rt.perl.org/Public/Bug/Display.html?id=130822> - -=item * - -Attempting to use the deprecated variable C<$#> as the object in an -indirect object method call could cause a heap use after free or -buffer overflow. -L<[perl #129274]|https://rt.perl.org/Public/Bug/Display.html?id=129274> - -=item * - -When checking for an indirect object method call, in some rare cases -the parser could reallocate the line buffer but then continue to use -pointers to the old buffer. -L<[perl #129190]|https://rt.perl.org/Public/Bug/Display.html?id=129190> - -=item * - -Supplying a glob as the format argument to -L<C<formline>|perlfunc/formline> would -cause an assertion failure. -L<[perl #130722]|https://rt.perl.org/Public/Bug/Display.html?id=130722> - -=item * - -Code like C< $value1 =~ qr/.../ ~~ $value2 > would have the match -converted into a C<qr//> operator, leaving extra elements on the stack to -confuse any surrounding expression. -L<[perl #130705]|https://rt.perl.org/Public/Bug/Display.html?id=130705> - -=item * - -Since v5.24 in some obscure cases, a regex which included code blocks -from multiple sources (I<e.g.>, via embedded via C<qr//> objects) could end up -with the wrong current pad and crash or give weird results. -L<[perl #129881]|https://rt.perl.org/Public/Bug/Display.html?id=129881> - -=item * - -Occasionally C<local()>s in a code block within a patterns weren't being -undone when the pattern matching backtracked over the code block. -L<[perl #126697]|https://rt.perl.org/Public/Bug/Display.html?id=126697> - -=item * - -Using C<substr()> to modify a magic variable could access freed memory -in some cases. -L<[perl #129340]|https://rt.perl.org/Public/Bug/Display.html?id=129340> - -=item * - -Under C<use utf8>, the entire source code is now checked for being UTF-8 -well formed, not just quoted strings as before. -L<[perl #126310]|https://rt.perl.org/Public/Bug/Display.html?id=126310>. - -=item * - -The range operator C<".."> on strings now handles its arguments correctly when in -the scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" >> -feature. The previous behaviour was sufficiently unexpected that we believe no -correct program could have made use of it. - -=item * - -The C<split> operator did not ensure enough space was allocated for -its return value in scalar context. It could then write a single -pointer immediately beyond the end of the memory block allocated for -the stack. -L<[perl #130262]|https://rt.perl.org/Public/Bug/Display.html?id=130262> - -=item * - -Using a large code point with the C<"W"> pack template character with -the current output position aligned at just the right point could -cause a write of a single zero byte immediately beyond the end of an -allocated buffer. -L<[perl #129149]|https://rt.perl.org/Public/Bug/Display.html?id=129149> - -=item * - -Supplying a format's picture argument as part of the format argument list -where the picture specifies modifying the argument could cause an -access to the new freed compiled form.at. -L<[perl #129125]|https://rt.perl.org/Public/Bug/Display.html?id=129125> - -=item * - -The L<sort()|perlfunc/sort> operator's built-in numeric comparison -function didn't handle large integers that weren't exactly -representable by a double. This now uses the same code used to -implement the C<< E<lt>=E<gt> >> operator. -L<[perl #130335]|https://rt.perl.org/Public/Bug/Display.html?id=130335> - -=item * - -Fix issues with C</(?{ ... E<lt>E<lt>EOF })/> that broke -L<Method::Signatures>. -L<[perl #130398]|https://rt.perl.org/Public/Bug/Display.html?id=130398> - -=item * - -Fixed an assertion failure with C<chop> and C<chomp>, which -could be triggered by C<chop(@x =~ tr/1/1/)>. -L<[perl #130198]|https://rt.perl.org/Public/Bug/Display.html?id=130198>. - -=item * - -Fixed a comment skipping error in patterns under C</x>; it could stop -skipping a byte early, which could be in the middle of a UTF-8 -character. -L<[perl #130495]|https://rt.perl.org/Public/Bug/Display.html?id=130495>. - -=item * - -F<perldb> now ignores F</dev/tty> on non-Unix systems. -L<[perl #113960]|https://rt.perl.org/Public/Bug/Display.html?id=113960>; - -=item * - -Fix assertion failure for C<{}-E<gt>$x> when C<$x> isn't defined. -L<[perl #130496]|https://rt.perl.org/Public/Bug/Display.html?id=130496>. - -=item * - -Fix an assertion error which could be triggered when a lookahead string -in patterns exceeded a minimum length. -L<[perl #130522]|https://rt.perl.org/Public/Bug/Display.html?id=130522>. - -=item * - -Only warn once per literal number about a misplaced C<"_">. -L<[perl #70878]|https://rt.perl.org/Public/Bug/Display.html?id=70878>. - -=item * - -The C<tr///> parse code could be looking at uninitialized data after a -perse error. -L<[perl #129342]|https://rt.perl.org/Public/Bug/Display.html?id=129342>. - -=item * - -In a pattern match, a back-reference (C<\1>) to an unmatched capture could -read back beyond the start of the string being matched. -L<[perl #129377]|https://rt.perl.org/Public/Bug/Display.html?id=129377>. - -=item * - -C<use re 'strict'> is supposed to warn if you use a range (such as -C</(?[ [ X-Y ] ])/>) whose start and end digit aren't from the same group -of 10. It didn't do that for five groups of mathematical digits starting -at C<U+1D7E>. - -=item * - -A sub containing a "forward" declaration with the same name (I<e.g.>, -C<sub c { sub c; }>) could sometimes crash or loop infinitely. -L<[perl #129090]|https://rt.perl.org/Public/Bug/Display.html?id=129090> - -=item * - -A crash in executing a regex with a non-anchored UTF-8 substring against a -target string that also used UTF-8 has been fixed. -L<[perl #129350]|https://rt.perl.org/Public/Bug/Display.html?id=129350> - -=item * - -Previously, a shebang line like C<#!perl -i u> could be erroneously -interpreted as requesting the C<-u> option. This has been fixed. -L<[perl #129336]|https://rt.perl.org/Public/Bug/Display.html?id=129336> - -=item * - -The regex engine was previously producing incorrect results in some rare -situations when backtracking past an alternation that matches only one -thing; this -showed up as capture buffers (C<$1>, C<$2>, I<etc.>) erroneously containing data -from regex execution paths that weren't actually executed for the final -match. -L<[perl #129897]|https://rt.perl.org/Public/Bug/Display.html?id=129897> - -=item * - -Certain regexes making use of the experimental C<regex_sets> feature could -trigger an assertion failure. This has been fixed. -L<[perl #129322]|https://rt.perl.org/Public/Bug/Display.html?id=129322> - -=item * - -Invalid assignments to a reference constructor (I<e.g.>, C<\eval=time>) could -sometimes crash in addition to giving a syntax error. -L<[perl #125679]|https://rt.perl.org/Public/Bug/Display.html?id=125679> - -=item * - -The parser could sometimes crash if a bareword came after C<evalbytes>. -L<[perl #129196]|https://rt.perl.org/Public/Bug/Display.html?id=129196> - -=item * - -Autoloading via a method call would warn erroneously ("Use of inherited -AUTOLOAD for non-method") if there was a stub present in the package into -which the invocant had been blessed. The warning is no longer emitted in -such circumstances. -L<[perl #47047]|https://rt.perl.org/Public/Bug/Display.html?id=47047> - -=item * - -The use of C<splice> on arrays with non-existent elements could cause other -operators to crash. -L<[perl #129164]|https://rt.perl.org/Public/Bug/Display.html?id=129164> - -=item * - -A possible buffer overrun when a pattern contains a fixed utf8 substring. -L<[perl #129012]|https://rt.perl.org/Public/Bug/Display.html?id=129012> - -=item * - -Fixed two possible use-after-free bugs in perl's lexer. -L<[perl #129069]|https://rt.perl.org/Public/Bug/Display.html?id=129069> - -=item * - -Fixed a crash with C<s///l> where it thought it was dealing with UTF-8 -when it wasn't. -L<[perl #129038]|https://rt.perl.org/Public/Bug/Display.html?id=129038> - -=item * - -Fixed a place where the regex parser was not setting the syntax error -correctly on a syntactically incorrect pattern. -L<[perl #129122]|https://rt.perl.org/Public/Bug/Display.html?id=129122> - -=item * - -The C<&.> operator (and the C<"&"> operator, when it treats its arguments as -strings) were failing to append a trailing null byte if at least one string -was marked as utf8 internally. Many code paths (system calls, regexp -compilation) still expect there to be a null byte in the string buffer -just past the end of the logical string. An assertion failure was the -result. -L<[perl #129287]|https://rt.perl.org/Public/Bug/Display.html?id=129287> - -=item * - -Avoid a heap-after-use error in the parser when creating an error messge -for a syntactically invalid heredoc. -L<[perl #128988]|https://rt.perl.org/Public/Bug/Display.html?id=128988> - -=item * - -Fix a segfault when run with C<-DC> options on DEBUGGING builds. -L<[perl #129106]|https://rt.perl.org/Public/Bug/Display.html?id=129106> - -=item * - -Fixed the parser error handling in subroutine attributes for an -'C<:attr(foo>' that does not have an ending 'C<")">'. - -=item * - -Fix the perl lexer to correctly handle a backslash as the last char in -quoted-string context. This actually fixed two bugs, -L<[perl #129064]|https://rt.perl.org/Public/Bug/Display.html?id=129064> and -L<[perl #129176]|https://rt.perl.org/Public/Bug/Display.html?id=129176>. - -=item * - -In the API function C<gv_fetchmethod_pvn_flags>, rework separator parsing -to prevent possible string overrun with an invalid C<len> argument. -L<[perl #129267]|https://rt.perl.org/Public/Bug/Display.html?id=129267> - -=item * - -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 seen by sort routines 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>. -L<[perl #128340]|https://rt.perl.org/Public/Bug/Display.html?id=128340> - -=item * - -Non-ASCII string delimiters are now reported correctly in error messages -for unterminated strings. -L<[perl #128701]|https://rt.perl.org/Public/Bug/Display.html?id=128701> - -=item * - -C<pack("p", ...)> used to emit its warning ("Attempt to pack pointer to -temporary value") erroneously in some cases, but has been fixed. - -=item * - -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 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.) - -=item * - -C<gethostent> and similar functions now perform a null check internally, to -avoid crashing with the torsocks library. This was a regression from v5.22. -L<[perl #128740]|https://rt.perl.org/Public/Bug/Display.html?id=128740> - -=item * - -C<defined *{'!'}>, C<defined *{'['}>, and C<defined *{'-'}> no longer leak -memory if the typeglob in question has never been accessed before. - -=item * - -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 v5.20. -L<[perl #126482]|https://rt.perl.org/Public/Bug/Display.html?id=126482> - -=item * - -Many issues relating to C<printf "%a"> of hexadecimal floating point -were fixed. In addition, the "subnormals" (formerly known as "denormals") -floating point numbers 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". -L<[perl #128843]|https://rt.perl.org/Public/Bug/Display.html?id=128843> -L<[perl #128889]|https://rt.perl.org/Public/Bug/Display.html?id=128889> -L<[perl #128890]|https://rt.perl.org/Public/Bug/Display.html?id=128890> -L<[perl #128893]|https://rt.perl.org/Public/Bug/Display.html?id=128893> -L<[perl #128909]|https://rt.perl.org/Public/Bug/Display.html?id=128909> -L<[perl #128919]|https://rt.perl.org/Public/Bug/Display.html?id=128919> - -=item * - -A regression in v5.24 with C<tr/\N{U+...}/foo/> when the code point was between -128 and 255 has been fixed. -L<[perl #128734]|https://rt.perl.org/Public/Bug/Display.html?id=128734>. - -=item * - -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. -L<[perl #128738]|https://rt.perl.org/Public/Bug/Display.html?id=128738> - -=item * - -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. -L<[perl #128951]|https://rt.perl.org/Public/Bug/Display.html?id=128951> - -=item * - -An assertion failure with C<%: = 0> has been fixed. -L<[perl #128238]|https://rt.perl.org/Public/Bug/Display.html?id=128238> - -=item * - -In Perl 5.18, the parsing of C<"$foo::$bar"> was accidentally changed, such -that it would be treated as C<$foo."::".$bar>. The previous behavior, which -was to parse it as C<$foo:: . $bar>, has been restored. -L<[perl #128478]|https://rt.perl.org/Public/Bug/Display.html?id=128478> - -=item * - -Since Perl 5.20, line numbers have been off by one when perl is invoked with -the B<-x> switch. This has been fixed. -L<[perl #128508]|https://rt.perl.org/Public/Bug/Display.html?id=128508> - -=item * - -Vivifying a subroutine stub in a deleted stash (I<e.g.>, -C<delete $My::{"Foo::"}; \&My::Foo::foo>) no longer crashes. It had begun -crashing in Perl 5.18. -L<[perl #128532]|https://rt.perl.org/Public/Bug/Display.html?id=128532> - -=item * - -Some obscure cases of subroutines and file handles being freed at the same time -could result in crashes, but have been fixed. The crash was introduced in Perl -5.22. -L<[perl #128597]|https://rt.perl.org/Public/Bug/Display.html?id=128597> - -=item * - -Code that looks for a variable name associated with an uninitialized value -could cause an assertion failure in cases where magic is involved, such as -C<$ISA[0][0]>. This has now been fixed. -L<[perl #128253]|https://rt.perl.org/Public/Bug/Display.html?id=128253> - -=item * - -A crash caused by code generating the warning "Subroutine STASH::NAME -redefined" in cases such as C<sub P::f{} undef *P::; *P::f =sub{};> has been -fixed. In these cases, where the STASH is missing, the warning will now appear -as "Subroutine NAME redefined". -L<[perl #128257]|https://rt.perl.org/Public/Bug/Display.html?id=128257> - -=item * - -Fixed an assertion triggered by some code that handles deprecated behavior in -formats, I<e.g.>, in cases like this: - - format STDOUT = - @ - 0"$x" - -L<[perl #128255]|https://rt.perl.org/Public/Bug/Display.html?id=128255> - -=item * - -A possible divide by zero in string transformation code on Windows has been -avoided, fixing a crash when collating an empty string. -L<[perl #128618]|https://rt.perl.org/Public/Bug/Display.html?id=128618> - -=item * - -Some regular expression parsing glitches could lead to assertion failures with -regular expressions such as C</(?E<lt>=/> and C</(?E<lt>!/>. This has now been fixed. -L<[perl #128170]|https://rt.perl.org/Public/Bug/Display.html?id=128170> - -=item * - -C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly -warn when syntax warnings are enabled. -L<[perl #127333]|https://rt.perl.org/Public/Bug/Display.html?id=127333> - -=item * - -socket() now leaves the error code returned by the system in C<$!> on -failure. -L<[perl #128316]|https://rt.perl.org/Public/Bug/Display.html?id=128316> - -=item * - -Assignment variants of any bitwise ops under the C<bitwise> feature would -crash if the left-hand side was an array or hash. -L<[perl #128204]|https://rt.perl.org/Public/Bug/Display.html?id=128204> - -=item * - -C<require> followed by a single colon (as in C<foo() ? require : ...> is -now parsed correctly as C<require> with implicit C<$_>, rather than -C<require "">. -L<[perl #128307]|https://rt.perl.org/Public/Bug/Display.html?id=128307> - -=item * - -Scalar C<keys %hash> can now be assigned to consistently in all scalar -lvalue contexts. Previously it worked for some contexts but not others. - -=item * - -List assignment to C<vec> or C<substr> with an array or hash for its first -argument used to result in crashes or "Can't coerce" error messages at run -time, unlike scalar assignment, which would give an error at compile time. -List assignment now gives a compile-time error, too. -L<[perl #128260]|https://rt.perl.org/Public/Bug/Display.html?id=128260> - -=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. -L<[perl #127952]|https://rt.perl.org/Public/Bug/Display.html?id=127952> - -=item * - -C<reset> with an argument no longer crashes when encountering stash entries -other than globs. -L<[perl #128106]|https://rt.perl.org/Public/Bug/Display.html?id=128106> - -=item * - -Assignment of hashes to, and deletion of, typeglobs named C<*::::::> no -longer causes crashes. -L<[perl #128086]|https://rt.perl.org/Public/Bug/Display.html?id=128086> - -=item * - -Perl wasn't correctly handling true/false values in the LHS of a list -assign; specifically the truth values returned by boolean operators. -This could trigger an assertion failure in something like the following: - - for ($x > $y) { - ($_, ...) = (...); # here $_ is aliased to a truth value - } - -This was a regression from v5.24. -L<[perl #129991]|https://rt.perl.org/Public/Bug/Display.html?id=129991> - -=item * - -Assertion failure with user-defined Unicode-like properties. -L<[perl #130010]|https://rt.perl.org/Public/Bug/Display.html?id=130010> - -=item * - -Fix error message for unclosed C<\N{> in a regex. An unclosed C<\N{> -could give the wrong error message: -C<"\N{NAME} must be resolved by the lexer">. - -=item * - -List assignment in list context where the LHS contained aggregates and -where there were not enough RHS elements, used to skip scalar lvalues. -Previously, C<(($a,$b,@c,$d) = (1))> in list context returned C<($a)>; now -it returns C<($a,$b,$d)>. C<(($a,$b,$c) = (1))> is unchanged: it still -returns C<($a,$b,$c)>. This can be seen in the following: - - sub inc { $_++ for @_ } - inc(($a,$b,@c,$d) = (10)) - -Formerly, the values of C<($a,$b,$d)> would be left as C<(11,undef,undef)>; -now they are C<(11,1,1)>. - -=item * - -Code like this: C</(?{ s!!! })/> could trigger infinite recursion on the C -stack (not the normal perl stack) when the last successful pattern in -scope is itself. We avoid the segfault by simply forbidding the use of -the empty pattern when it would resolve to the currently executing -pattern. -L<[perl #129903]|https://rt.perl.org/Public/Bug/Display.html?id=129903> - -=item * - -Avoid reading beyond the end of the line buffer in perl's lexer when -there's a short UTF-8 character at the end. -L<[perl #128997]|https://rt.perl.org/Public/Bug/Display.html?id=128997> - -=item * - -Alternations in regular expressions were sometimes failing to match -a utf8 string against a utf8 alternate. -L<[perl #129950]|https://rt.perl.org/Public/Bug/Display.html?id=129950> - -=item * - -Make C<do "a\0b"> fail silently (and return C<undef> and set C<$!>) -instead of throwing an error. -L<[perl #129928]|https://rt.perl.org/Public/Bug/Display.html?id=129928> - -=item * - -C<chdir> with no argument didn't ensure that there was stack space -available for returning its result. -L<[perl #129130]|https://rt.perl.org/Public/Bug/Display.html?id=129130> - -=item * - -All error messages related to C<do> now refer to C<do>; some formerly -claimed to be from C<require> instead. - -=item * - -Executing C<undef $x> where C<$x> is tied or magical no longer incorrectly -blames the variable for an uninitialized-value warning encountered by the -tied/magical code. - -=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. -L<[perl #127877]|https://rt.perl.org/Public/Bug/Display.html?id=127877> - -=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, but has now -been fixed. - -=item * - -C<< "string$scalar-E<gt>$*" >> now correctly prefers concatenation -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. -L<[perl #128171]|https://rt.perl.org/Public/Bug/Display.html?id=128171> - -=item * - -C<do> or C<require> with an argument which is a reference or typeglob -which, when stringified, -contains a null character, started crashing in Perl 5.20, but has now been -fixed. -L<[perl #128182]|https://rt.perl.org/Public/Bug/Display.html?id=128182> - -=item * - -Improve the error message for a missing C<tie()> package/method. This -brings the error messages in line with the ones used for normal method -calls. - -=item * - -Parsing bad POSIX charclasses no longer leaks memory. -L<[perl #128313]|https://rt.perl.org/Public/Bug/Display.html?id=128313> +XXX =back -=head1 Known Problems - -=over 4 - -=item * - -G++ 6 handles subnormal (denormal) floating point values differently -than gcc 6 or g++ 5 resulting in "flush-to-zero". The end result is -that if you specify very small values using the hexadecimal floating -point format, like C<0x1.fffffffffffffp-1022>, they become zeros. -L<[perl #131388]|https://rt.perl.org/Ticket/Display.html?id=131388> - -=back - =head1 Errata From Previous Releases =over 4 =item * -Fixed issues with recursive regexes. The behavior was fixed in Perl 5.24. -L<[perl #126182]|https://rt.perl.org/Public/Bug/Display.html?id=126182> +XXX Add anything here that we forgot to add, or were mistaken about, in +the perldelta of a previous release. =back =head1 Obituary -Jon Portnoy (AVENJ), a prolific Perl author and admired Gentoo community -member, has passed away on August 10, 2016. He will be remembered and -missed by all those who he came in contact with, and enriched with his -intellect, wit, and spirit. - -It is with great sadness that we also note Kip Hampton's passing. Probably -best known as the author of the Perl & XML column on XML.com, he was a -core contributor to AxKit, an XML server platform that became an Apache -Foundation project. He was a frequent speaker in the early days at -OSCON, and most recently at YAPC::NA in Madison. He was frequently on -irc.perl.org as ubu, generally in the #axkit-dahut community, the -group responsible for YAPC::NA Asheville in 2011. - -Kip and his constant contributions to the community will be greatly -missed. +XXX If any significant core contributor has died, we've added a short obituary +here. =head1 Acknowledgements -Perl 5.26.0 represents approximately 13 months of development since Perl 5.24.0 -and contains approximately 360,000 lines of changes across 2,600 files from 86 -authors. - -Excluding auto-generated files, documentation and release tools, there were -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.26.0: - -Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alex Vandiver, Andreas -König, Andreas Voegele, Andrew Fresh, Andy Lester, Aristotle Pagaltzis, Chad -Granum, Chase Whitener, Chris 'BinGOs' Williams, Chris Lamb, Christian Hansen, -Christian Millour, Colin Newell, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan -Collins, Daniel Dragan, Dave Cross, Dave Rolsky, David Golden, David H. -Gutteridge, David Mitchell, Dominic Hargreaves, Doug Bell, E. Choroba, Ed Avis, -Father Chrysostomos, François Perrad, Hauke D, H.Merijn Brand, Hugo van der -Sanden, Ivan Pozdeev, James E Keenan, James Raspass, Jarkko Hietaniemi, Jerry -D. Hedden, Jim Cromie, J. Nick Koston, John Lightsey, Karen Etheridge, Karl -Williamson, Leon Timmermans, Lukas Mai, Matthew Horsfall, Maxwell Carey, Misty -De Meo, Neil Bowers, Nicholas Clark, Nicolas R., Niko Tyni, Pali, Paul -Marquess, Peter Avalos, Petr Písař, Pino Toscano, Rafael Garcia-Suarez, Reini -Urban, Renee Baecker, Ricardo Signes, Richard Levitte, Rick Delaney, Salvador -Fandiño, Samuel Thibault, Sawyer X, Sébastien Aperghis-Tramoni, Sergey -Aleynikov, Shlomi Fish, Smylers, Stefan Seifert, Steffen Müller, Stevan -Little, Steve Hay, Steven Humphrey, Sullivan Beck, Theo Buehler, Thomas Sibley, -Todd Rinaldo, Tomasz Konojacki, Tony Cook, Unicode Consortium, Yaroslav Kuzmin, -Yves Orton, Zefram. - -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 -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for -helping Perl to flourish. - -For a more complete list of all of Perl's historical contributors, please see -the F<AUTHORS> file in the Perl source distribution. +XXX Generate this with: + + perl Porting/acknowledgements.pl v5.25.5..HEAD =head1 Reporting Bugs -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 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 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 C<perlbug@perl.org> to be analysed by the Perl porting team. +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 see diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index def671b2f2..a78be4b0a5 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -307,7 +307,7 @@ utils : $(utils1) $(utils2) $(utils3) $(utils4) $(utils5) extra.pods : miniperl @ @extra_pods.com -PERLDELTA_CURRENT = [.pod]perl5260delta.pod +PERLDELTA_CURRENT = [.pod]perl5270delta.pod $(PERLDELTA_CURRENT) : [.pod]perldelta.pod Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT) diff --git a/win32/GNUmakefile b/win32/GNUmakefile index 555db9f715..4f8b190762 100644 --- a/win32/GNUmakefile +++ b/win32/GNUmakefile @@ -1637,7 +1637,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5260delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5270delta.pod $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl .. $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. @@ -1734,7 +1734,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5260delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5270delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \ perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \ perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \ diff --git a/win32/Makefile b/win32/Makefile index ad53d66b5e..cfb9e1ab30 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1260,7 +1260,7 @@ utils: $(PERLEXE) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5260delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5270delta.pod cd ..\win32 $(PERLEXE) $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl .. @@ -1359,7 +1359,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5260delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5270delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \ perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \ perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \ diff --git a/win32/makefile.mk b/win32/makefile.mk index b6922d23f3..7f9d31ba47 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1574,7 +1574,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5260delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5270delta.pod $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl .. $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. @@ -1672,7 +1672,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5260delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5270delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \ perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \ perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \ diff --git a/win32/pod.mak b/win32/pod.mak index 6ce64383e5..5597d2f426 100644 --- a/win32/pod.mak +++ b/win32/pod.mak @@ -47,6 +47,7 @@ POD = perl.pod \ perl5240delta.pod \ perl5241delta.pod \ perl5260delta.pod \ + perl5270delta.pod \ perl561delta.pod \ perl56delta.pod \ perl581delta.pod \ @@ -189,6 +190,7 @@ MAN = perl.man \ perl5240delta.man \ perl5241delta.man \ perl5260delta.man \ + perl5270delta.man \ perl561delta.man \ perl56delta.man \ perl581delta.man \ @@ -330,6 +332,7 @@ HTML = perl.html \ perl5240delta.html \ perl5241delta.html \ perl5260delta.html \ + perl5270delta.html \ perl561delta.html \ perl56delta.html \ perl581delta.html \ @@ -472,6 +475,7 @@ TEX = perl.tex \ perl5240delta.tex \ perl5241delta.tex \ perl5260delta.tex \ + perl5270delta.tex \ perl561delta.tex \ perl56delta.tex \ perl581delta.tex \ |