1PERL5260DELTA(1)       Perl Programmers Reference Guide       PERL5260DELTA(1)
2
3
4

NAME

6       perl5260delta - what is new for perl v5.26.0
7

DESCRIPTION

9       This document describes the differences between the 5.24.0 release and
10       the 5.26.0 release.
11

Notice

13       This release includes three updates with widespread effects:
14
15       •   "." no longer in @INC
16
17           For security reasons, the current directory (".") is no longer
18           included by default at the end of the module search path (@INC).
19           This may have widespread implications for the building, testing and
20           installing of modules, and for the execution of scripts.  See the
21           section "Removal of the current directory (".") from @INC" for the
22           full details.
23
24       •   "do" may now warn
25
26           "do" now gives a deprecation warning when it fails to load a file
27           which it would have loaded had "." been in @INC.
28
29       •   In regular expression patterns, a literal left brace "{" should be
30           escaped
31
32           See "Unescaped literal "{" characters in regular expression
33           patterns are no longer permissible".
34

Core Enhancements

36   Lexical subroutines are no longer experimental
37       Using the "lexical_subs" feature introduced in v5.18 no longer emits a
38       warning.  Existing code that disables the "experimental::lexical_subs"
39       warning category that the feature previously used will continue to
40       work.  The "lexical_subs" feature has no effect; all Perl code can use
41       lexical subroutines, regardless of what feature declarations are in
42       scope.
43
44   Indented Here-documents
45       This adds a new modifier "~" to here-docs that tells the parser that it
46       should look for "/^\s*$DELIM\n/" as the closing delimiter.
47
48       These syntaxes are all supported:
49
50           <<~EOF;
51           <<~\EOF;
52           <<~'EOF';
53           <<~"EOF";
54           <<~`EOF`;
55           <<~ 'EOF';
56           <<~ "EOF";
57           <<~ `EOF`;
58
59       The "~" modifier will strip, from each line in the here-doc, the same
60       whitespace that appears before the delimiter.
61
62       Newlines will be copied as-is, and lines that don't include the proper
63       beginning whitespace will cause perl to croak.
64
65       For example:
66
67           if (1) {
68             print <<~EOF;
69               Hello there
70               EOF
71           }
72
73       prints "Hello there\n" with no leading whitespace.
74
75   New regular expression modifier "/xx"
76       Specifying two "x" characters to modify a regular expression pattern
77       does everything that a single one does, but additionally TAB and SPACE
78       characters within a bracketed character class are generally ignored and
79       can be added to improve readability, like "/[ ^ A-Z d-f p-x ]/xx".
80       Details are at "/x and /xx" in perlre.
81
82   "@{^CAPTURE}", "%{^CAPTURE}", and "%{^CAPTURE_ALL}"
83       "@{^CAPTURE}" exposes the capture buffers of the last match as an
84       array.  So $1 is "${^CAPTURE}[0]".  This is a more efficient equivalent
85       to code like "substr($matched_string,$-[0],$+[0]-$-[0])", and you don't
86       have to keep track of the $matched_string either.  This variable has no
87       single character equivalent.  Note that, like the other regex magic
88       variables, the contents of this variable is dynamic; if you wish to
89       store it beyond the lifetime of the match you must copy it to another
90       array.
91
92       "%{^CAPTURE}" is equivalent to "%+" (i.e., named captures).  Other than
93       being more self-documenting there is no difference between the two
94       forms.
95
96       "%{^CAPTURE_ALL}" is equivalent to "%-" (i.e., all named captures).
97       Other than being more self-documenting there is no difference between
98       the two forms.
99
100   Declaring a reference to a variable
101       As an experimental feature, Perl now allows the referencing operator to
102       come after my(), state(), our(), or local().  This syntax must be
103       enabled with "use feature 'declared_refs'".  It is experimental, and
104       will warn by default unless "no warnings 'experimental::refaliasing'"
105       is in effect.  It is intended mainly for use in assignments to
106       references.  For example:
107
108           use experimental 'refaliasing', 'declared_refs';
109           my \$a = \$b;
110
111       See "Assigning to References" in perlref for more details.
112
113   Unicode 9.0 is now supported
114       A list of changes is at
115       <http://www.unicode.org/versions/Unicode9.0.0/>.  Modules that are
116       shipped with core Perl but not maintained by p5p do not necessarily
117       support Unicode 9.0.  Unicode::Normalize does work on 9.0.
118
119   Use of "\p{script}" uses the improved Script_Extensions property
120       Unicode 6.0 introduced an improved form of the Script ("sc") property,
121       and called it Script_Extensions ("scx").  Perl now uses this improved
122       version when a property is specified as just "\p{script}".  This should
123       make programs more accurate when determining if a character is used in
124       a given script, but there is a slight chance of breakage for programs
125       that very specifically needed the old behavior.  The meaning of
126       compound forms, like "\p{sc=script}" are unchanged.  See "Scripts" in
127       perlunicode.
128
129   Perl can now do default collation in UTF-8 locales on platforms that
130       support it
131       Some platforms natively do a reasonable job of collating and sorting in
132       UTF-8 locales.  Perl now works with those.  For portability and full
133       control, Unicode::Collate is still recommended, but now you may not
134       need to do anything special to get good-enough results, depending on
135       your application.  See "Category "LC_COLLATE": Collation: Text
136       Comparisons and Sorting" in perllocale.
137
138   Better locale collation of strings containing embedded "NUL" characters
139       In locales that have multi-level character weights, "NUL"s are now
140       ignored at the higher priority ones.  There are still some gotchas in
141       some strings, though.  See "Collation of strings containing embedded
142       "NUL" characters" in perllocale.
143
144   "CORE" subroutines for hash and array functions callable via reference
145       The hash and array functions in the "CORE" namespace ("keys", "each",
146       "values", "push", "pop", "shift", "unshift" and "splice") can now be
147       called with ampersand syntax ("&CORE::keys(\%hash") and via reference
148       ("my $k = \&CORE::keys; $k->(\%hash)").  Previously they could only be
149       used when inlined.
150
151   New Hash Function For 64-bit Builds
152       We have switched to a hybrid hash function to better balance
153       performance for short and long keys.
154
155       For short keys, 16 bytes and under, we use an optimised variant of One
156       At A Time Hard, and for longer keys we use Siphash 1-3.  For very long
157       keys this is a big improvement in performance.  For shorter keys there
158       is a modest improvement.
159

Security

161   Removal of the current directory (".") from @INC
162       The perl binary includes a default set of paths in @INC.  Historically
163       it has also included the current directory (".") as the final entry,
164       unless run with taint mode enabled ("perl -T").  While convenient, this
165       has security implications: for example, where a script attempts to load
166       an optional module when its current directory is untrusted (such as
167       /tmp), it could load and execute code from under that directory.
168
169       Starting with v5.26, "." is always removed by default, not just under
170       tainting.  This has major implications for installing modules and
171       executing scripts.
172
173       The following new features have been added to help ameliorate these
174       issues.
175
176Configure -Udefault_inc_excludes_dot
177
178           There is a new Configure option, "default_inc_excludes_dot"
179           (enabled by default) which builds a perl executable without ".";
180           unsetting this option using "-U" reverts perl to the old behaviour.
181           This may fix your path issues but will reintroduce all the security
182           concerns, so don't build a perl executable like this unless you're
183           really confident that such issues are not a concern in your
184           environment.
185
186       •   "PERL_USE_UNSAFE_INC"
187
188           There is a new environment variable recognised by the perl
189           interpreter.  If this variable has the value 1 when the perl
190           interpreter starts up, then "." will be automatically appended to
191           @INC (except under tainting).
192
193           This allows you restore the old perl interpreter behaviour on a
194           case-by-case basis.  But note that this is intended to be a
195           temporary crutch, and this feature will likely be removed in some
196           future perl version.  It is currently set by the "cpan" utility and
197           "Test::Harness" to ease installation of CPAN modules which have not
198           been updated to handle the lack of dot.  Once again, don't use this
199           unless you are sure that this will not reintroduce any security
200           concerns.
201
202       •   A new deprecation warning issued by "do".
203
204           While it is well-known that "use" and "require" use @INC to search
205           for the file to load, many people don't realise that "do "file""
206           also searches @INC if the file is a relative path.  With the
207           removal of ".", a simple "do "file.pl"" will fail to read in and
208           execute "file.pl" from the current directory.  Since this is
209           commonly expected behaviour, a new deprecation warning is now
210           issued whenever "do" fails to load a file which it otherwise would
211           have found if a dot had been in @INC.
212
213       Here are some things script and module authors may need to do to make
214       their software work in the new regime.
215
216       •   Script authors
217
218           If the issue is within your own code (rather than within included
219           modules), then you have two main options.  Firstly, if you are
220           confident that your script will only be run within a trusted
221           directory (under which you expect to find trusted files and
222           modules), then add "." back into the path; e.g.:
223
224               BEGIN {
225                   my $dir = "/some/trusted/directory";
226                   chdir $dir or die "Can't chdir to $dir: $!\n";
227                   # safe now
228                   push @INC, '.';
229               }
230
231               use "Foo::Bar"; # may load /some/trusted/directory/Foo/Bar.pm
232               do "config.pl"; # may load /some/trusted/directory/config.pl
233
234           On the other hand, if your script is intended to be run from within
235           untrusted directories (such as /tmp), then your script suddenly
236           failing to load files may be indicative of a security issue.  You
237           most likely want to replace any relative paths with full paths; for
238           example,
239
240               do "foo_config.pl"
241
242           might become
243
244               do "$ENV{HOME}/foo_config.pl"
245
246           If you are absolutely certain that you want your script to load and
247           execute a file from the current directory, then use a "./" prefix;
248           for example:
249
250               do "./foo_config.pl"
251
252       •   Installing and using CPAN modules
253
254           If you install a CPAN module using an automatic tool like "cpan",
255           then this tool will itself set the "PERL_USE_UNSAFE_INC"
256           environment variable while building and testing the module, which
257           may be sufficient to install a distribution which hasn't been
258           updated to be dot-aware.  If you want to install such a module
259           manually, then you'll need to replace the traditional invocation:
260
261               perl Makefile.PL && make && make test && make install
262
263           with something like
264
265               (export PERL_USE_UNSAFE_INC=1; \
266                perl Makefile.PL && make && make test && make install)
267
268           Note that this only helps build and install an unfixed module.
269           It's possible for the tests to pass (since they were run under
270           "PERL_USE_UNSAFE_INC=1"), but for the module itself to fail to
271           perform correctly in production.  In this case, you may have to
272           temporarily modify your script until a fixed version of the module
273           is released.  For example:
274
275               use Foo::Bar;
276               {
277                   local @INC = (@INC, '.');
278                   # assuming read_config() needs '.' in @INC
279                   $config = Foo::Bar->read_config();
280               }
281
282           This is only rarely expected to be necessary.  Again, if doing
283           this, assess the resultant risks first.
284
285       •   Module Authors
286
287           If you maintain a CPAN distribution, it may need updating to run in
288           a dotless environment.  Although "cpan" and other such tools will
289           currently set the "PERL_USE_UNSAFE_INC" during module build, this
290           is a temporary workaround for the set of modules which rely on "."
291           being in @INC for installation and testing, and this may mask
292           deeper issues.  It could result in a module which passes tests and
293           installs, but which fails at run time.
294
295           During build, test, and install, it will normally be the case that
296           any perl processes will be executing directly within the root
297           directory of the untarred distribution, or a known subdirectory of
298           that, such as t/.  It may well be that Makefile.PL or t/foo.t will
299           attempt to include local modules and configuration files using
300           their direct relative filenames, which will now fail.
301
302           However, as described above, automatic tools like cpan will (for
303           now) set the "PERL_USE_UNSAFE_INC" environment variable, which
304           introduces dot during a build.
305
306           This makes it likely that your existing build and test code will
307           work, but this may mask issues with your code which only manifest
308           when used after install.  It is prudent to try and run your build
309           process with that variable explicitly disabled:
310
311               (export PERL_USE_UNSAFE_INC=0; \
312                perl Makefile.PL && make && make test && make install)
313
314           This is more likely to show up any potential problems with your
315           module's build process, or even with the module itself.  Fixing
316           such issues will ensure both that your module can again be
317           installed manually, and that it will still build once the
318           "PERL_USE_UNSAFE_INC" crutch goes away.
319
320           When fixing issues in tests due to the removal of dot from @INC,
321           reinsertion of dot into @INC should be performed with caution, for
322           this too may suppress real errors in your runtime code.  You are
323           encouraged wherever possible to apply the aforementioned approaches
324           with explicit absolute/relative paths, or to relocate your needed
325           files into a subdirectory and insert that subdirectory into @INC
326           instead.
327
328           If your runtime code has problems under the dotless @INC, then the
329           comments above on how to fix for script authors will mostly apply
330           here too.  Bear in mind though that it is considered bad form for a
331           module to globally add a dot to @INC, since it introduces both a
332           security risk and hides issues of accidentally requiring dot in
333           @INC, as explained above.
334
335   Escaped colons and relative paths in PATH
336       On Unix systems, Perl treats any relative paths in the "PATH"
337       environment variable as tainted when starting a new process.
338       Previously, it was allowing a backslash to escape a colon (unlike the
339       OS), consequently allowing relative paths to be considered safe if the
340       PATH was set to something like "/\:.".  The check has been fixed to
341       treat "." as tainted in that example.
342
343   New "-Di" switch is now required for PerlIO debugging output
344       This is used for debugging of code within PerlIO to avoid recursive
345       calls.  Previously this output would be sent to the file specified by
346       the "PERLIO_DEBUG" environment variable if perl wasn't running setuid
347       and the "-T" or "-t" switches hadn't been parsed yet.
348
349       If perl performed output at a point where it hadn't yet parsed its
350       switches this could result in perl creating or overwriting the file
351       named by "PERLIO_DEBUG" even when the "-T" switch had been supplied.
352
353       Perl now requires the "-Di" switch to be present before it will produce
354       PerlIO debugging output.  By default this is written to "stderr", but
355       can optionally be redirected to a file by setting the "PERLIO_DEBUG"
356       environment variable.
357
358       If perl is running setuid or the "-T" switch was supplied,
359       "PERLIO_DEBUG" is ignored and the debugging output is sent to "stderr"
360       as for any other "-D" switch.
361

Incompatible Changes

363   Unescaped literal "{" characters in regular expression patterns are no
364       longer permissible
365       You have to now say something like "\{" or "[{]" to specify to match a
366       LEFT CURLY BRACKET; otherwise, it is a fatal pattern compilation error.
367       This change will allow future extensions to the language.
368
369       These have been deprecated since v5.16, with a deprecation message
370       raised for some uses starting in v5.22.  Unfortunately, the code added
371       to raise the message was buggy and failed to warn in some cases where
372       it should have.  Therefore, enforcement of this ban for these cases is
373       deferred until Perl 5.30, but the code has been fixed to raise a
374       default-on deprecation message for them in the meantime.
375
376       Some uses of literal "{" occur in contexts where we do not foresee the
377       meaning ever being anything but the literal, such as the very first
378       character in the pattern, or after a "|" meaning alternation.  Thus
379
380        qr/{fee|{fie/
381
382       matches either of the strings "{fee" or "{fie".  To avoid forcing
383       unnecessary code changes, these uses do not need to be escaped, and no
384       warning is raised about them, and there are no current plans to change
385       this.
386
387       But it is always correct to escape "{", and the simple rule to remember
388       is to always do so.
389
390       See Unescaped left brace in regex is illegal here.
391
392   scalar(%hash) return signature changed
393       The value returned for scalar(%hash) will no longer show information
394       about the buckets allocated in the hash.  It will simply return the
395       count of used keys.  It is thus equivalent to "0+keys(%hash)".
396
397       A form of backward compatibility is provided via
398       Hash::Util::bucket_ratio() which provides the same behavior as
399       scalar(%hash) provided in Perl 5.24 and earlier.
400
401   "keys" returned from an lvalue subroutine
402       "keys" returned from an lvalue subroutine can no longer be assigned to
403       in list context.
404
405           sub foo : lvalue { keys(%INC) }
406           (foo) = 3; # death
407           sub bar : lvalue { keys(@_) }
408           (bar) = 3; # also an error
409
410       This makes the lvalue sub case consistent with "(keys %hash) = ..." and
411       "(keys @_) = ...", which are also errors.  [GH #15339]
412       <https://github.com/Perl/perl5/issues/15339>
413
414   The "${^ENCODING}" facility has been removed
415       The special behaviour associated with assigning a value to this
416       variable has been removed.  As a consequence, the encoding pragma's
417       default mode is no longer supported.  If you still need to write your
418       source code in encodings other than UTF-8, use a source filter such as
419       Filter::Encoding on CPAN or encoding's "Filter" option.
420
421   POSIX::tmpnam() has been removed
422       The fundamentally unsafe tmpnam() interface was deprecated in Perl 5.22
423       and has now been removed.  In its place, you can use, for example, the
424       File::Temp interfaces.
425
426   require ::Foo::Bar is now illegal.
427       Formerly, "require ::Foo::Bar" would try to read /Foo/Bar.pm.  Now any
428       bareword require which starts with a double colon dies instead.
429
430   Literal control character variable names are no longer permissible
431       A variable name may no longer contain a literal control character under
432       any circumstances.  These previously were allowed in single-character
433       names on ASCII platforms, but have been deprecated there since Perl
434       5.20.  This affects things like "$\cT", where \cT is a literal control
435       (such as a "NAK" or "NEGATIVE ACKNOWLEDGE" character) in the source
436       code.
437
438   "NBSP" is no longer permissible in "\N{...}"
439       The name of a character may no longer contain non-breaking spaces.  It
440       has been deprecated to do so since Perl 5.22.
441

Deprecations

443   String delimiters that aren't stand-alone graphemes are now deprecated
444       For Perl to eventually allow string delimiters to be Unicode grapheme
445       clusters (which look like a single character, but may be a sequence of
446       several ones), we have to stop allowing a single character delimiter
447       that isn't a grapheme by itself.  These are unlikely to exist in actual
448       code, as they would typically display as attached to the character in
449       front of them.
450
451   "\cX" that maps to a printable is no longer deprecated
452       This means we have no plans to remove this feature.  It still raises a
453       warning, but only if syntax warnings are enabled.  The feature was
454       originally intended to be a way to express non-printable characters
455       that don't have a mnemonic ("\t" and "\n" are mnemonics for two non-
456       printable characters, but most non-printables don't have a mnemonic.)
457       But the feature can be used to specify a few printable characters,
458       though those are more clearly expressed as the printable itself.  See
459       <http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html>.
460

Performance Enhancements

462       •   A hash in boolean context is now sometimes faster, e.g.
463
464               if (!%h) { ... }
465
466           This was already special-cased, but some cases were missed (such as
467           "grep %$_, @AoH"), and even the ones which weren't have been
468           improved.
469
470       •   New Faster Hash Function on 64 bit builds
471
472           We use a different hash function for short and long keys.  This
473           should improve performance and security, especially for long keys.
474
475       •   readline is faster
476
477           Reading from a file line-by-line with readline() or "<>" should now
478           typically be faster due to a better implementation of the code that
479           searches for the next newline character.
480
481       •   Assigning one reference to another, e.g. "$ref1 = $ref2" has been
482           optimized in some cases.
483
484       •   Remove some exceptions to creating Copy-on-Write strings. The
485           string buffer growth algorithm has been slightly altered so that
486           you're less likely to encounter a string which can't be COWed.
487
488       •   Better optimise array and hash assignment: where an array or hash
489           appears in the LHS of a list assignment, such as "(..., @a) =
490           (...);", it's likely to be considerably faster, especially if it
491           involves emptying the array/hash. For example, this code runs about
492           a third faster compared to Perl 5.24.0:
493
494               my @a;
495               for my $i (1..10_000_000) {
496                   @a = (1,2,3);
497                   @a = ();
498               }
499
500       •   Converting a single-digit string to a number is now substantially
501           faster.
502
503       •   The "split" builtin is now slightly faster in many cases: in
504           particular for the two specially-handled forms
505
506               my    @a = split ...;
507               local @a = split ...;
508
509       •   The rather slow implementation for the experimental subroutine
510           signatures feature has been made much faster; it is now comparable
511           in speed with the traditional "my ($a, $b, @c) = @_".
512
513       •   Bareword constant strings are now permitted to take part in
514           constant folding.  They were originally exempted from constant
515           folding in August 1999, during the development of Perl 5.6, to
516           ensure that "use strict "subs"" would still apply to bareword
517           constants.  That has now been accomplished a different way, so
518           barewords, like other constants, now gain the performance benefits
519           of constant folding.
520
521           This also means that void-context warnings on constant expressions
522           of barewords now report the folded constant operand, rather than
523           the operation; this matches the behaviour for non-bareword
524           constants.
525

Modules and Pragmata

527   Updated Modules and Pragmata
528       •   IO::Compress has been upgraded from version 2.069 to 2.074.
529
530       •   Archive::Tar has been upgraded from version 2.04 to 2.24.
531
532       •   arybase has been upgraded from version 0.11 to 0.12.
533
534       •   attributes has been upgraded from version 0.27 to 0.29.
535
536           The deprecation message for the ":unique" and ":locked" attributes
537           now mention that they will disappear in Perl 5.28.
538
539       •   B has been upgraded from version 1.62 to 1.68.
540
541       •   B::Concise has been upgraded from version 0.996 to 0.999.
542
543           Its output is now more descriptive for "op_private" flags.
544
545       •   B::Debug has been upgraded from version 1.23 to 1.24.
546
547       •   B::Deparse has been upgraded from version 1.37 to 1.40.
548
549       •   B::Xref has been upgraded from version 1.05 to 1.06.
550
551           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
552           <https://github.com/Perl/perl5/issues/15721>
553
554       •   base has been upgraded from version 2.23 to 2.25.
555
556       •   bignum has been upgraded from version 0.42 to 0.47.
557
558       •   Carp has been upgraded from version 1.40 to 1.42.
559
560       •   charnames has been upgraded from version 1.43 to 1.44.
561
562       •   Compress::Raw::Bzip2 has been upgraded from version 2.069 to 2.074.
563
564       •   Compress::Raw::Zlib has been upgraded from version 2.069 to 2.074.
565
566       •   Config::Perl::V has been upgraded from version 0.25 to 0.28.
567
568       •   CPAN has been upgraded from version 2.11 to 2.18.
569
570       •   CPAN::Meta has been upgraded from version 2.150005 to 2.150010.
571
572       •   Data::Dumper has been upgraded from version 2.160 to 2.167.
573
574           The XS implementation now supports Deparse.
575
576       •   DB_File has been upgraded from version 1.835 to 1.840.
577
578       •   Devel::Peek has been upgraded from version 1.23 to 1.26.
579
580       •   Devel::PPPort has been upgraded from version 3.32 to 3.35.
581
582       •   Devel::SelfStubber has been upgraded from version 1.05 to 1.06.
583
584           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
585           <https://github.com/Perl/perl5/issues/15721>
586
587       •   diagnostics has been upgraded from version 1.34 to 1.36.
588
589           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
590           <https://github.com/Perl/perl5/issues/15721>
591
592       •   Digest has been upgraded from version 1.17 to 1.17_01.
593
594       •   Digest::MD5 has been upgraded from version 2.54 to 2.55.
595
596       •   Digest::SHA has been upgraded from version 5.95 to 5.96.
597
598       •   DynaLoader has been upgraded from version 1.38 to 1.42.
599
600       •   Encode has been upgraded from version 2.80 to 2.88.
601
602       •   encoding has been upgraded from version 2.17 to 2.19.
603
604           This module's default mode is no longer supported.  It now dies
605           when imported, unless the "Filter" option is being used.
606
607       •   encoding::warnings has been upgraded from version 0.12 to 0.13.
608
609           This module is no longer supported.  It emits a warning to that
610           effect and then does nothing.
611
612       •   Errno has been upgraded from version 1.25 to 1.28.
613
614           It now documents that using "%!" automatically loads Errno for you.
615
616           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
617           <https://github.com/Perl/perl5/issues/15721>
618
619       •   ExtUtils::Embed has been upgraded from version 1.33 to 1.34.
620
621           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
622           <https://github.com/Perl/perl5/issues/15721>
623
624       •   ExtUtils::MakeMaker has been upgraded from version 7.10_01 to 7.24.
625
626       •   ExtUtils::Miniperl has been upgraded from version 1.05 to 1.06.
627
628       •   ExtUtils::ParseXS has been upgraded from version 3.31 to 3.34.
629
630       •   ExtUtils::Typemaps has been upgraded from version 3.31 to 3.34.
631
632       •   feature has been upgraded from version 1.42 to 1.47.
633
634       •   File::Copy has been upgraded from version 2.31 to 2.32.
635
636       •   File::Fetch has been upgraded from version 0.48 to 0.52.
637
638       •   File::Glob has been upgraded from version 1.26 to 1.28.
639
640           It now Issues a deprecation message for File::Glob::glob().
641
642       •   File::Spec has been upgraded from version 3.63 to 3.67.
643
644       •   FileHandle has been upgraded from version 2.02 to 2.03.
645
646       •   Filter::Simple has been upgraded from version 0.92 to 0.93.
647
648           It no longer treats "no MyFilter" immediately following "use
649           MyFilter" as end-of-file.  [GH #11853]
650           <https://github.com/Perl/perl5/issues/11853>
651
652       •   Getopt::Long has been upgraded from version 2.48 to 2.49.
653
654       •   Getopt::Std has been upgraded from version 1.11 to 1.12.
655
656       •   Hash::Util has been upgraded from version 0.19 to 0.22.
657
658       •   HTTP::Tiny has been upgraded from version 0.056 to 0.070.
659
660           Internal 599-series errors now include the redirect history.
661
662       •   I18N::LangTags has been upgraded from version 0.40 to 0.42.
663
664           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
665           <https://github.com/Perl/perl5/issues/15721>
666
667       •   IO has been upgraded from version 1.36 to 1.38.
668
669       •   IO::Socket::IP has been upgraded from version 0.37 to 0.38.
670
671       •   IPC::Cmd has been upgraded from version 0.92 to 0.96.
672
673       •   IPC::SysV has been upgraded from version 2.06_01 to 2.07.
674
675       •   JSON::PP has been upgraded from version 2.27300 to 2.27400_02.
676
677       •   lib has been upgraded from version 0.63 to 0.64.
678
679           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
680           <https://github.com/Perl/perl5/issues/15721>
681
682       •   List::Util has been upgraded from version 1.42_02 to 1.46_02.
683
684       •   Locale::Codes has been upgraded from version 3.37 to 3.42.
685
686       •   Locale::Maketext has been upgraded from version 1.26 to 1.28.
687
688       •   Locale::Maketext::Simple has been upgraded from version 0.21 to
689           0.21_01.
690
691       •   Math::BigInt has been upgraded from version 1.999715 to 1.999806.
692
693       •   Math::BigInt::FastCalc has been upgraded from version 0.40 to
694           0.5005.
695
696       •   Math::BigRat has been upgraded from version 0.260802 to 0.2611.
697
698       •   Math::Complex has been upgraded from version 1.59 to 1.5901.
699
700       •   Memoize has been upgraded from version 1.03 to 1.03_01.
701
702       •   Module::CoreList has been upgraded from version 5.20170420 to
703           5.20170530.
704
705       •   Module::Load::Conditional has been upgraded from version 0.64 to
706           0.68.
707
708       •   Module::Metadata has been upgraded from version 1.000031 to
709           1.000033.
710
711       •   mro has been upgraded from version 1.18 to 1.20.
712
713       •   Net::Ping has been upgraded from version 2.43 to 2.55.
714
715           IPv6 addresses and "AF_INET6" sockets are now supported, along with
716           several other enhancements.
717
718       •   NEXT has been upgraded from version 0.65 to 0.67.
719
720       •   Opcode has been upgraded from version 1.34 to 1.39.
721
722       •   open has been upgraded from version 1.10 to 1.11.
723
724       •   OS2::Process has been upgraded from version 1.11 to 1.12.
725
726           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
727           <https://github.com/Perl/perl5/issues/15721>
728
729       •   overload has been upgraded from version 1.26 to 1.28.
730
731           Its compilation speed has been improved slightly.
732
733       •   parent has been upgraded from version 0.234 to 0.236.
734
735       •   perl5db.pl has been upgraded from version 1.50 to 1.51.
736
737           It now ignores /dev/tty on non-Unix systems.  [GH #12244]
738           <https://github.com/Perl/perl5/issues/12244>
739
740       •   Perl::OSType has been upgraded from version 1.009 to 1.010.
741
742       •   perlfaq has been upgraded from version 5.021010 to 5.021011.
743
744       •   PerlIO has been upgraded from version 1.09 to 1.10.
745
746       •   PerlIO::encoding has been upgraded from version 0.24 to 0.25.
747
748       •   PerlIO::scalar has been upgraded from version 0.24 to 0.26.
749
750       •   Pod::Checker has been upgraded from version 1.60 to 1.73.
751
752       •   Pod::Functions has been upgraded from version 1.10 to 1.11.
753
754       •   Pod::Html has been upgraded from version 1.22 to 1.2202.
755
756       •   Pod::Perldoc has been upgraded from version 3.25_02 to 3.28.
757
758       •   Pod::Simple has been upgraded from version 3.32 to 3.35.
759
760       •   Pod::Usage has been upgraded from version 1.68 to 1.69.
761
762       •   POSIX has been upgraded from version 1.65 to 1.76.
763
764           This remedies several defects in making its symbols exportable.
765           [GH #15260] <https://github.com/Perl/perl5/issues/15260>
766
767           The POSIX::tmpnam() interface has been removed, see
768           "POSIX::tmpnam() has been removed".
769
770           The following deprecated functions have been removed:
771
772               POSIX::isalnum
773               POSIX::isalpha
774               POSIX::iscntrl
775               POSIX::isdigit
776               POSIX::isgraph
777               POSIX::islower
778               POSIX::isprint
779               POSIX::ispunct
780               POSIX::isspace
781               POSIX::isupper
782               POSIX::isxdigit
783               POSIX::tolower
784               POSIX::toupper
785
786           Trying to import POSIX subs that have no real implementations (like
787           POSIX::atend()) now fails at import time, instead of waiting until
788           runtime.
789
790       •   re has been upgraded from version 0.32 to 0.34
791
792           This adds support for the new "/xx" regular expression pattern
793           modifier, and a change to the use re 'strict' experimental feature.
794           When re 'strict' is enabled, a warning now will be generated for
795           all unescaped uses of the two characters "}" and "]" in regular
796           expression patterns (outside bracketed character classes) that are
797           taken literally.  This brings them more in line with the ")"
798           character which is always a metacharacter unless escaped.  Being a
799           metacharacter only sometimes, depending on an action at a distance,
800           can lead to silently having the pattern mean something quite
801           different than was intended, which the "re 'strict'" mode is
802           intended to minimize.
803
804       •   Safe has been upgraded from version 2.39 to 2.40.
805
806       •   Scalar::Util has been upgraded from version 1.42_02 to 1.46_02.
807
808       •   Storable has been upgraded from version 2.56 to 2.62.
809
810           Fixes [GH #15714] <https://github.com/Perl/perl5/issues/15714>.
811
812       •   Symbol has been upgraded from version 1.07 to 1.08.
813
814       •   Sys::Syslog has been upgraded from version 0.33 to 0.35.
815
816       •   Term::ANSIColor has been upgraded from version 4.04 to 4.06.
817
818       •   Term::ReadLine has been upgraded from version 1.15 to 1.16.
819
820           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
821           <https://github.com/Perl/perl5/issues/15721>
822
823       •   Test has been upgraded from version 1.28 to 1.30.
824
825           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
826           <https://github.com/Perl/perl5/issues/15721>
827
828       •   Test::Harness has been upgraded from version 3.36 to 3.38.
829
830       •   Test::Simple has been upgraded from version 1.001014 to 1.302073.
831
832       •   Thread::Queue has been upgraded from version 3.09 to 3.12.
833
834       •   Thread::Semaphore has been upgraded from 2.12 to 2.13.
835
836           Added the "down_timed" method.
837
838       •   threads has been upgraded from version 2.07 to 2.15.
839
840       •   threads::shared has been upgraded from version 1.51 to 1.56.
841
842       •   Tie::Hash::NamedCapture has been upgraded from version 0.09 to
843           0.10.
844
845       •   Time::HiRes has been upgraded from version 1.9733 to 1.9741.
846
847           It now builds on systems with C++11 compilers (such as G++ 6 and
848           Clang++ 3.9).
849
850           Now uses "clockid_t".
851
852       •   Time::Local has been upgraded from version 1.2300 to 1.25.
853
854       •   Unicode::Collate has been upgraded from version 1.14 to 1.19.
855
856       •   Unicode::UCD has been upgraded from version 0.64 to 0.68.
857
858           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
859           <https://github.com/Perl/perl5/issues/15721>
860
861       •   version has been upgraded from version 0.9916 to 0.9917.
862
863       •   VMS::DCLsym has been upgraded from version 1.06 to 1.08.
864
865           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
866           <https://github.com/Perl/perl5/issues/15721>
867
868       •   warnings has been upgraded from version 1.36 to 1.37.
869
870       •   XS::Typemap has been upgraded from version 0.14 to 0.15.
871
872       •   XSLoader has been upgraded from version 0.21 to 0.27.
873
874           Fixed a security hole in which binary files could be loaded from a
875           path outside of @INC.
876
877           It now uses 3-arg open() instead of 2-arg open().  [GH #15721]
878           <https://github.com/Perl/perl5/issues/15721>
879

Documentation

881   New Documentation
882       perldeprecation
883
884       This file documents all upcoming deprecations, and some of the
885       deprecations which already have been removed.  The purpose of this
886       documentation is two-fold: document what will disappear, and by which
887       version, and serve as a guide for people dealing with code which has
888       features that no longer work after an upgrade of their perl.
889
890   Changes to Existing Documentation
891       We have attempted to update the documentation to reflect the changes
892       listed in this document.  If you find any we have missed, send email to
893       perlbug@perl.org <mailto:perlbug@perl.org>.
894
895       Additionally, all references to Usenet have been removed, and the
896       following selected changes have been made:
897
898       perlfunc
899
900       •   Removed obsolete text about defined() on aggregates that should
901           have been deleted earlier, when the feature was removed.
902
903       •   Corrected documentation of eval(), and evalbytes().
904
905       •   Clarified documentation of seek(), tell() and sysseek() emphasizing
906           that positions are in bytes and not characters.  [GH #15438]
907           <https://github.com/Perl/perl5/issues/15438>
908
909       •   Clarified documentation of sort() concerning the variables $a and
910           $b.
911
912       •   In split() noted that certain pattern modifiers are legal, and
913           added a caution about its use in Perls before v5.11.
914
915       •   Removed obsolete documentation of study(), noting that it is now a
916           no-op.
917
918       •   Noted that vec() doesn't work well when the string contains
919           characters whose code points are above 255.
920
921       perlguts
922
923       •   Added advice on formatted printing of operands of "Size_t" and
924           "SSize_t"
925
926       perlhack
927
928       •   Clarify what editor tab stop rules to use, and note that we are
929           migrating away from using tabs, replacing them with sequences of
930           SPACE characters.
931
932       perlhacktips
933
934       •   Give another reason to use "cBOOL" to cast an expression to
935           boolean.
936
937       •   Note that the macros "TRUE" and "FALSE" are available to express
938           boolean values.
939
940       perlinterp
941
942       •   perlinterp has been expanded to give a more detailed example of how
943           to hunt around in the parser for how a given operator is handled.
944
945       perllocale
946
947       •   Some locales aren't compatible with Perl.  Note that these can
948           cause core dumps.
949
950       perlmod
951
952       •   Various clarifications have been added.
953
954       perlmodlib
955
956       •   Updated the site mirror list.
957
958       perlobj
959
960       •   Added a section on calling methods using their fully qualified
961           names.
962
963       •   Do not discourage manual @ISA.
964
965       perlootut
966
967       •   Mention "Moo" more.
968
969       perlop
970
971       •   Note that white space must be used for quoting operators if the
972           delimiter is a word character (i.e., matches "\w").
973
974       •   Clarify that in regular expression patterns delimited by single
975           quotes, no variable interpolation is done.
976
977       perlre
978
979       •   The first part was extensively rewritten to incorporate various
980           basic points, that in earlier versions were mentioned in sort of an
981           appendix on Version 8 regular expressions.
982
983       •   Note that it is common to have the "/x" modifier and forget that
984           this means that "#" has to be escaped.
985
986       perlretut
987
988       •   Add introductory material.
989
990       •   Note that a metacharacter occurring in a context where it can't
991           mean that, silently loses its meta-ness and matches literally.
992           "use re 'strict'" can catch some of these.
993
994       perlunicode
995
996       •   Corrected the text about Unicode BYTE ORDER MARK handling.
997
998       •   Updated the text to correspond with changes in Unicode UTS#18,
999           concerning regular expressions, and Perl compatibility with what it
1000           says.
1001
1002       perlvar
1003
1004       •   Document @ISA.  It was documented in other places, but not in
1005           perlvar.
1006

Diagnostics

1008   New Diagnostics
1009       New Errors
1010
1011       •   A signature parameter must start with '$', '@' or '%'
1012
1013       •   Bareword in require contains "%s"
1014
1015       •   Bareword in require maps to empty filename
1016
1017       •   Bareword in require maps to disallowed filename "%s"
1018
1019       •   Bareword in require must not start with a double-colon: "%s"
1020
1021       •   %s: command not found
1022
1023           (A) You've accidentally run your script through bash or another
1024           shell instead of Perl.  Check the "#!" line, or manually feed your
1025           script into Perl yourself.  The "#!" line at the top of your file
1026           could look like:
1027
1028             #!/usr/bin/perl
1029
1030       •   %s: command not found: %s
1031
1032           (A) You've accidentally run your script through zsh or another
1033           shell instead of Perl.  Check the "#!" line, or manually feed your
1034           script into Perl yourself.  The "#!" line at the top of your file
1035           could look like:
1036
1037             #!/usr/bin/perl
1038
1039       •   The experimental declared_refs feature is not enabled
1040
1041           (F) To declare references to variables, as in "my \%x", you must
1042           first enable the feature:
1043
1044               no warnings "experimental::declared_refs";
1045               use feature "declared_refs";
1046
1047           See "Declaring a reference to a variable".
1048
1049       •   Illegal character following sigil in a subroutine signature
1050
1051       •   Indentation on line %d of here-doc doesn't match delimiter
1052
1053       •   Infinite recursion via empty pattern.
1054
1055           Using the empty pattern (which re-executes the last successfully-
1056           matched pattern) inside a code block in another regex, as in "/(?{
1057           s!!new! })/", has always previously yielded a segfault.  It now
1058           produces this error.
1059
1060       •   Malformed UTF-8 string in "%s"
1061
1062       •   Multiple slurpy parameters not allowed
1063
1064       •   '#' not allowed immediately following a sigil in a subroutine
1065           signature
1066
1067       •   panic: unknown OA_*: %x
1068
1069       •   Unescaped left brace in regex is illegal here
1070
1071           Unescaped left braces are now illegal in some contexts in regular
1072           expression patterns.  In other contexts, they are still just
1073           deprecated; they will be illegal in Perl 5.30.
1074
1075       •   Version control conflict marker
1076
1077           (F) The parser found a line starting with "<<<<<<<", ">>>>>>>", or
1078           "=======".  These may be left by a version control system to mark
1079           conflicts after a failed merge operation.
1080
1081       New Warnings
1082
1083       •   Can't determine class of operator %s, assuming "BASEOP"
1084
1085       •   Declaring references is experimental
1086
1087           (S experimental::declared_refs) This warning is emitted if you use
1088           a reference constructor on the right-hand side of my(), state(),
1089           our(), or local().  Simply suppress the warning if you want to use
1090           the feature, but know that in doing so you are taking the risk of
1091           using an experimental feature which may change or be removed in a
1092           future Perl version:
1093
1094               no warnings "experimental::declared_refs";
1095               use feature "declared_refs";
1096               $fooref = my \$foo;
1097
1098           See "Declaring a reference to a variable".
1099
1100       •   do "%s" failed, '.' is no longer in @INC
1101
1102           Since "." is now removed from @INC by default, "do" will now
1103           trigger a warning recommending to fix the "do" statement.
1104
1105       •   File::Glob::glob() will disappear in perl 5.30. Use
1106           File::Glob::bsd_glob() instead.
1107
1108       •   Unescaped literal '%c' in regex; marked by <-- HERE in m/%s/
1109
1110       •   Use of unassigned code point or non-standalone grapheme for a
1111           delimiter will be a fatal error starting in Perl 5.30
1112
1113           See "Deprecations"
1114
1115   Changes to Existing Diagnostics
1116       •   When a "require" fails, we now do not provide @INC when the
1117           "require" is for a file instead of a module.
1118
1119       •   When @INC is not scanned for a "require" call, we no longer display
1120           @INC to avoid confusion.
1121
1122       •   Attribute "locked" is deprecated, and will disappear in Perl 5.28
1123
1124           This existing warning has had the and will disappear text added in
1125           this release.
1126
1127       •   Attribute "unique" is deprecated, and will disappear in Perl 5.28
1128
1129           This existing warning has had the and will disappear text added in
1130           this release.
1131
1132       •   Calling POSIX::%s() is deprecated
1133
1134           This warning has been removed, as the deprecated functions have
1135           been removed from POSIX.
1136
1137       •   Constants from lexical variables potentially modified elsewhere are
1138           deprecated. This will not be allowed in Perl 5.32
1139
1140           This existing warning has had the this will not be allowed text
1141           added in this release.
1142
1143       •   Deprecated use of my() in false conditional. This will be a fatal
1144           error in Perl 5.30
1145
1146           This existing warning has had the this will be a fatal error text
1147           added in this release.
1148
1149       •   dump() better written as CORE::dump(). dump() will no longer be
1150           available in Perl 5.30
1151
1152           This existing warning has had the no longer be available text added
1153           in this release.
1154
1155       •   Experimental %s on scalar is now forbidden
1156
1157           This message is now followed by more helpful text.  [GH #15291]
1158           <https://github.com/Perl/perl5/issues/15291>
1159
1160       •   Experimental "%s" subs not enabled
1161
1162           This warning was been removed, as lexical subs are no longer
1163           experimental.
1164
1165       •   Having more than one /%c regexp modifier is deprecated
1166
1167           This deprecation warning has been removed, since "/xx" now has a
1168           new meaning.
1169
1170       •   %s() is deprecated on ":utf8" handles. This will be a fatal error
1171           in Perl 5.30 .
1172
1173           where "%s" is one of "sysread", "recv", "syswrite", or "send".
1174
1175           This existing warning has had the this will be a fatal error text
1176           added in this release.
1177
1178           This warning is now enabled by default, as all "deprecated"
1179           category warnings should be.
1180
1181       •   $* is no longer supported. Its use will be fatal in Perl 5.30
1182
1183           This existing warning has had the its use will be fatal text added
1184           in this release.
1185
1186       •   $# is no longer supported. Its use will be fatal in Perl 5.30
1187
1188           This existing warning has had the its use will be fatal text added
1189           in this release.
1190
1191       •   Malformed UTF-8 character%s
1192
1193           Details as to the exact problem have been added at the end of this
1194           message
1195
1196       •   Missing or undefined argument to %s
1197
1198           This warning used to warn about "require", even if it was actually
1199           "do" which being executed. It now gets the operation name right.
1200
1201       •   NO-BREAK SPACE in a charnames alias definition is deprecated
1202
1203           This warning has been removed as the behavior is now an error.
1204
1205       •   Odd name/value argument for subroutine '%s'
1206
1207           This warning now includes the name of the offending subroutine.
1208
1209       •   Opening dirhandle %s also as a file. This will be a fatal error in
1210           Perl 5.28
1211
1212           This existing warning has had the this will be a fatal error text
1213           added in this release.
1214
1215       •   Opening filehandle %s also as a directory. This will be a fatal
1216           error in Perl 5.28
1217
1218           This existing warning has had the this will be a fatal error text
1219           added in this release.
1220
1221       •   panic: ck_split, type=%u
1222
1223           panic: pp_split, pm=%p, s=%p
1224
1225           These panic errors have been removed.
1226
1227       •   Passing malformed UTF-8 to "%s" is deprecated
1228
1229           This warning has been changed to the fatal Malformed UTF-8 string
1230           in "%s"
1231
1232       •   Setting $/ to a reference to %s as a form of slurp is deprecated,
1233           treating as undef. This will be fatal in Perl 5.28
1234
1235           This existing warning has had the this will be fatal text added in
1236           this release.
1237
1238       •   "${^ENCODING}" is no longer supported. Its use will be fatal in
1239           Perl 5.28
1240
1241           This warning used to be: "Setting "${^ENCODING}" is deprecated".
1242
1243           The special action of the variable "${^ENCODING}" was formerly used
1244           to implement the "encoding" pragma. As of Perl 5.26, rather than
1245           being deprecated, assigning to this variable now has no effect
1246           except to issue the warning.
1247
1248       •   Too few arguments for subroutine '%s'
1249
1250           This warning now includes the name of the offending subroutine.
1251
1252       •   Too many arguments for subroutine '%s'
1253
1254           This warning now includes the name of the offending subroutine.
1255
1256       •   Unescaped left brace in regex is deprecated here (and will be fatal
1257           in Perl 5.30), passed through in regex; marked by <-- HERE in m/%s/
1258
1259           This existing warning has had the here (and will be fatal...) text
1260           added in this release.
1261
1262       •   Unknown charname '' is deprecated. Its use will be fatal in Perl
1263           5.28
1264
1265           This existing warning has had the its use will be fatal text added
1266           in this release.
1267
1268       •   Use of bare << to mean <<"" is deprecated. Its use will be fatal in
1269           Perl 5.28
1270
1271           This existing warning has had the its use will be fatal text added
1272           in this release.
1273
1274       •   Use of code point 0x%s is deprecated; the permissible max is 0x%s.
1275           This will be fatal in Perl 5.28
1276
1277           This existing warning has had the this will be fatal text added in
1278           this release.
1279
1280       •   Use of comma-less variable list is deprecated. Its use will be
1281           fatal in Perl 5.28
1282
1283           This existing warning has had the its use will be fatal text added
1284           in this release.
1285
1286       •   Use of inherited "AUTOLOAD" for non-method %s() is deprecated. This
1287           will be fatal in Perl 5.28
1288
1289           This existing warning has had the this will be fatal text added in
1290           this release.
1291
1292       •   Use of strings with code points over 0xFF as arguments to %s
1293           operator is deprecated. This will be a fatal error in Perl 5.28
1294
1295           This existing warning has had the this will be a fatal error text
1296           added in this release.
1297

Utility Changes

1299   c2ph and pstruct
1300       •   These old utilities have long since superceded by h2xs, and are now
1301           gone from the distribution.
1302
1303   Porting/pod_lib.pl
1304       •   Removed spurious executable bit.
1305
1306       •   Account for the possibility of DOS file endings.
1307
1308   Porting/sync-with-cpan
1309       •   Many improvements.
1310
1311   perf/benchmarks
1312       •   Tidy file, rename some symbols.
1313
1314   Porting/checkAUTHORS.pl
1315       •   Replace obscure character range with "\w".
1316
1317   t/porting/regen.t
1318       •   Try to be more helpful when tests fail.
1319
1320   utils/h2xs.PL
1321       •   Avoid infinite loop for enums.
1322
1323   perlbug
1324       •   Long lines in the message body are now wrapped at 900 characters,
1325           to stay well within the 1000-character limit imposed by SMTP mail
1326           transfer agents.  This is particularly likely to be important for
1327           the list of arguments to Configure, which can readily exceed the
1328           limit if, for example, it names several non-default installation
1329           paths.  This change also adds the first unit tests for perlbug.
1330           [perl #128020]
1331           <https://rt.perl.org/Public/Bug/Display.html?id=128020>
1332

Configuration and Compilation

1334       •   "-Ddefault_inc_excludes_dot" has added, and enabled by default.
1335
1336       •   The "dtrace" build process has further changes [GH #15718]
1337           <https://github.com/Perl/perl5/issues/15718>:
1338
1339           •   If the "-xnolibs" is available, use that so a dtrace perl can
1340               be built within a FreeBSD jail.
1341
1342           •   On systems that build a dtrace object file (FreeBSD, Solaris,
1343               and SystemTap's dtrace emulation), copy the input objects to a
1344               separate directory and process them there, and use those
1345               objects in the link, since "dtrace -G" also modifies these
1346               objects.
1347
1348           •   Add libelf to the build on FreeBSD 10.x, since dtrace adds
1349               references to libelf symbols.
1350
1351           •   Generate a dummy dtrace_main.o if "dtrace -G" fails to build
1352               it.  A default build on Solaris generates probes from the
1353               unused inline functions, while they don't on FreeBSD, which
1354               causes "dtrace -G" to fail.
1355
1356       •   You can now disable perl's use of the "PERL_HASH_SEED" and
1357           "PERL_PERTURB_KEYS" environment variables by configuring perl with
1358           "-Accflags=NO_PERL_HASH_ENV".
1359
1360       •   You can now disable perl's use of the "PERL_HASH_SEED_DEBUG"
1361           environment variable by configuring perl with
1362           "-Accflags=-DNO_PERL_HASH_SEED_DEBUG".
1363
1364Configure now zeroes out the alignment bytes when calculating the
1365           bytes for 80-bit "NaN" and "Inf" to make builds more reproducible.
1366           [GH #15725] <https://github.com/Perl/perl5/issues/15725>
1367
1368       •   Since v5.18, for testing purposes we have included support for
1369           building perl with a variety of non-standard, and non-recommended
1370           hash functions.  Since we do not recommend the use of these
1371           functions, we have removed them and their corresponding build
1372           options.  Specifically this includes the following build options:
1373
1374               PERL_HASH_FUNC_SDBM
1375               PERL_HASH_FUNC_DJB2
1376               PERL_HASH_FUNC_SUPERFAST
1377               PERL_HASH_FUNC_MURMUR3
1378               PERL_HASH_FUNC_ONE_AT_A_TIME
1379               PERL_HASH_FUNC_ONE_AT_A_TIME_OLD
1380               PERL_HASH_FUNC_MURMUR_HASH_64A
1381               PERL_HASH_FUNC_MURMUR_HASH_64B
1382
1383       •   Remove "Warning: perl appears in your path"
1384
1385           This install warning is more or less obsolete, since most platforms
1386           already will have a /usr/bin/perl or similar provided by the OS.
1387
1388       •   Reduce verbosity of "make install.man"
1389
1390           Previously, two progress messages were emitted for each manpage:
1391           one by installman itself, and one by the function in install_lib.pl
1392           that it calls to actually install the file.  Disabling the second
1393           of those in each case saves over 750 lines of unhelpful output.
1394
1395       •   Cleanup for "clang -Weverything" support.  [GH #15683]
1396           <https://github.com/Perl/perl5/issues/15683>
1397
1398Configure: signbit scan was assuming too much, stop assuming
1399           negative 0.
1400
1401       •   Various compiler warnings have been silenced.
1402
1403       •   Several smaller changes have been made to remove impediments to
1404           compiling under C++11.
1405
1406       •   Builds using "USE_PAD_RESET" now work again; this configuration had
1407           bit-rotted.
1408
1409       •   A probe for "gai_strerror" was added to Configure that checks if
1410           the gai_strerror() routine is available and can be used to
1411           translate error codes returned by getaddrinfo() into human readable
1412           strings.
1413
1414Configure now aborts if both "-Duselongdouble" and "-Dusequadmath"
1415           are requested.  [GH #14944]
1416           <https://github.com/Perl/perl5/issues/14944>
1417
1418       •   Fixed a bug in which Configure could append "-quadmath" to the
1419           archname even if it was already present.  [GH #15423]
1420           <https://github.com/Perl/perl5/issues/15423>
1421
1422       •   Clang builds with "-DPERL_GLOBAL_STRUCT" or
1423           "-DPERL_GLOBAL_STRUCT_PRIVATE" have been fixed (by disabling Thread
1424           Safety Analysis for these configurations).
1425
1426make_ext.pl no longer updates a module's pm_to_blib file when no
1427           files require updates.  This could cause dependencies, perlmain.c
1428           in particular, to be rebuilt unnecessarily.  [GH #15060]
1429           <https://github.com/Perl/perl5/issues/15060>
1430
1431       •   The output of "perl -V" has been reformatted so that each
1432           configuration and compile-time option is now listed one per line,
1433           to improve readability.
1434
1435Configure now builds "miniperl" and "generate_uudmap" if you invoke
1436           it with "-Dusecrosscompiler" but not "-Dtargethost=somehost".  This
1437           means you can supply your target platform "config.sh", generate the
1438           headers and proceed to build your cross-target perl.  [GH #15126]
1439           <https://github.com/Perl/perl5/issues/15126>
1440
1441       •   Perl built with "-Accflags=-DPERL_TRACE_OPS" now only dumps the
1442           operator counts when the environment variable "PERL_TRACE_OPS" is
1443           set to a non-zero integer.  This allows "make test" to pass on such
1444           a build.
1445
1446       •   When building with GCC 6 and link-time optimization (the "-flto"
1447           option to "gcc"), Configure was treating all probed symbols as
1448           present on the system, regardless of whether they actually exist.
1449           This has been fixed.  [GH #15322]
1450           <https://github.com/Perl/perl5/issues/15322>
1451
1452       •   The t/test.pl library is used for internal testing of Perl itself,
1453           and also copied by several CPAN modules.  Some of those modules
1454           must work on older versions of Perl, so t/test.pl must in turn
1455           avoid newer Perl features.  Compatibility with Perl 5.8 was
1456           inadvertently removed some time ago; it has now been restored.  [GH
1457           #15302] <https://github.com/Perl/perl5/issues/15302>
1458
1459       •   The build process no longer emits an extra blank line before
1460           building each "simple" extension (those with only *.pm and *.pod
1461           files).
1462

Testing

1464       Tests were added and changed to reflect the other additions and changes
1465       in this release.  Furthermore, these substantive changes were made:
1466
1467       •   A new test script, comp/parser_run.t, has been added that is like
1468           comp/parser.t but with test.pl included so that runperl() and the
1469           like are available for use.
1470
1471       •   Tests for locales were erroneously using locales incompatible with
1472           Perl.
1473
1474       •   Some parts of the test suite that try to exhaustively test edge
1475           cases in the regex implementation have been restricted to running
1476           for a maximum of five minutes.  On slow systems they could
1477           otherwise take several hours, without significantly improving our
1478           understanding of the correctness of the code under test.
1479
1480       •   A new internal facility allows analysing the time taken by the
1481           individual tests in Perl's own test suite; see
1482           Porting/harness-timer-report.pl.
1483
1484t/re/regexp_nonull.t has been added to test that the regular
1485           expression engine can handle scalars that do not have a null byte
1486           just past the end of the string.
1487
1488       •   A new test script, t/op/decl-refs.t, has been added to test the new
1489           feature "Declaring a reference to a variable".
1490
1491       •   A new test script, t/re/keep_tabs.t has been added to contain tests
1492           where "\t" characters should not be expanded into spaces.
1493
1494       •   A new test script, t/re/anyof.t, has been added to test that the
1495           ANYOF nodes generated by bracketed character classes are as
1496           expected.
1497
1498       •   There is now more extensive testing of the Unicode-related API
1499           macros and functions.
1500
1501       •   Several of the longer running API test files have been split into
1502           multiple test files so that they can be run in parallel.
1503
1504t/harness now tries really hard not to run tests which are located
1505           outside of the Perl source tree.  [GH #14578]
1506           <https://github.com/Perl/perl5/issues/14578>
1507
1508       •   Prevent debugger tests (lib/perl5db.t) from failing due to the
1509           contents of $ENV{PERLDB_OPTS}.  [GH #15782]
1510           <https://github.com/Perl/perl5/issues/15782>
1511

Platform Support

1513   New Platforms
1514       NetBSD/VAX
1515           Perl now compiles under NetBSD on VAX machines.  However, it's not
1516           possible for that platform to implement floating-point infinities
1517           and NaNs compatible with most modern systems, which implement the
1518           IEEE-754 floating point standard.  The hexadecimal floating point
1519           ("0x...p[+-]n" literals, "printf %a") is not implemented, either.
1520           The "make test" passes 98% of tests.
1521
1522           •   Test fixes and minor updates.
1523
1524           •   Account for lack of "inf", "nan", and -0.0 support.
1525
1526   Platform-Specific Notes
1527       Darwin
1528           •   Don't treat "-Dprefix=/usr" as special: instead require an
1529               extra option "-Ddarwin_distribution" to produce the same
1530               results.
1531
1532           •   OS X El Capitan doesn't implement the clock_gettime() or
1533               clock_getres() APIs; emulate them as necessary.
1534
1535           •   Deprecated syscall(2) on macOS 10.12.
1536
1537       EBCDIC
1538           Several tests have been updated to work (or be skipped) on EBCDIC
1539           platforms.
1540
1541       HP-UX
1542           The Net::Ping UDP test is now skipped on HP-UX.
1543
1544       Hurd
1545           The hints for Hurd have been improved, enabling malloc wrap and
1546           reporting the GNU libc used (previously it was an empty string when
1547           reported).
1548
1549       VAX VAX floating point formats are now supported on NetBSD.
1550
1551       VMS
1552           •   The path separator for the "PERL5LIB" and "PERLLIB" environment
1553               entries is now a colon (":") when running under a Unix shell.
1554               There is no change when running under DCL (it's still "|").
1555
1556configure.com now recognizes the VSI-branded C compiler and no
1557               longer recognizes the "DEC"-branded C compiler (as there hasn't
1558               been such a thing for 15 or more years).
1559
1560       Windows
1561           •   Support for compiling perl on Windows using Microsoft Visual
1562               Studio 2015 (containing Visual C++ 14.0) has been added.
1563
1564               This version of VC++ includes a completely rewritten C run-time
1565               library, some of the changes in which mean that work done to
1566               resolve a socket close() bug in perl #120091 and perl #118059
1567               is not workable in its current state with this version of VC++.
1568               Therefore, we have effectively reverted that bug fix for VS2015
1569               onwards on the basis that being able to build with VS2015
1570               onwards is more important than keeping the bug fix.  We may
1571               revisit this in the future to attempt to fix the bug again in a
1572               way that is compatible with VS2015.
1573
1574               These changes do not affect compilation with GCC or with Visual
1575               Studio versions up to and including VS2013, i.e., the bug fix
1576               is retained (unchanged) for those compilers.
1577
1578               Note that you may experience compatibility problems if you mix
1579               a perl built with GCC or VS <= VS2013 with XS modules built
1580               with VS2015, or if you mix a perl built with VS2015 with XS
1581               modules built with GCC or VS <= VS2013.  Some incompatibility
1582               may arise because of the bug fix that has been reverted for
1583               VS2015 builds of perl, but there may well be incompatibility
1584               anyway because of the rewritten CRT in VS2015 (e.g., see
1585               discussion at <http://stackoverflow.com/questions/30412951>).
1586
1587           •   It now automatically detects GCC versus Visual C and sets the
1588               VC version number on Win32.
1589
1590       Linux
1591           Drop support for Linux a.out executable format. Linux has used ELF
1592           for over twenty years.
1593
1594       OpenBSD 6
1595           OpenBSD 6 still does not support returning "pid", "gid", or "uid"
1596           with "SA_SIGINFO".  Make sure to account for it.
1597
1598       FreeBSD
1599           t/uni/overload.t: Skip hanging test on FreeBSD.
1600
1601       DragonFly BSD
1602           DragonFly BSD now has support for setproctitle().  [GH #15703]
1603           <https://github.com/Perl/perl5/issues/15703>.
1604

Internal Changes

1606       •   A new API function sv_setpv_bufsize() allows simultaneously setting
1607           the length and the allocated size of the buffer in an "SV", growing
1608           the buffer if necessary.
1609
1610       •   A new API macro SvPVCLEAR() sets its "SV" argument to an empty
1611           string, like Perl-space "$x = ''", but with several optimisations.
1612
1613       •   Several new macros and functions for dealing with Unicode and
1614           UTF-8-encoded strings have been added to the API, as well as some
1615           changes in the functionality of existing functions (see "Unicode
1616           Support" in perlapi for more details):
1617
1618           •   New versions of the API macros like "isALPHA_utf8" and
1619               "toLOWER_utf8" have been added, each with the suffix "_safe",
1620               like "isSPACE_utf8_safe".  These take an extra parameter,
1621               giving an upper limit of how far into the string it is safe to
1622               read.  Using the old versions could cause attempts to read
1623               beyond the end of the input buffer if the UTF-8 is not well-
1624               formed, and their use now raises a deprecation warning.
1625               Details are at "Character classification" in perlapi.
1626
1627           •   Macros like "isALPHA_utf8" and "toLOWER_utf8" now die if they
1628               detect that their input UTF-8 is malformed.  A deprecation
1629               warning had been issued since Perl 5.18.
1630
1631           •   Several new macros for analysing the validity of utf8
1632               sequences. These are:
1633
1634               "UTF8_GOT_ABOVE_31_BIT" "UTF8_GOT_CONTINUATION"
1635               "UTF8_GOT_EMPTY" "UTF8_GOT_LONG" "UTF8_GOT_NONCHAR"
1636               "UTF8_GOT_NON_CONTINUATION" "UTF8_GOT_OVERFLOW"
1637               "UTF8_GOT_SHORT" "UTF8_GOT_SUPER" "UTF8_GOT_SURROGATE"
1638               "UTF8_IS_INVARIANT" "UTF8_IS_NONCHAR" "UTF8_IS_SUPER"
1639               "UTF8_IS_SURROGATE" "UVCHR_IS_INVARIANT" "isUTF8_CHAR_flags"
1640               "isSTRICT_UTF8_CHAR" "isC9_STRICT_UTF8_CHAR"
1641
1642           •   Functions that are all extensions of the "is_utf8_string_*()"
1643               functions, that apply various restrictions to the UTF-8
1644               recognized as valid:
1645
1646               "is_strict_utf8_string", "is_strict_utf8_string_loc",
1647               "is_strict_utf8_string_loclen",
1648
1649               "is_c9strict_utf8_string", "is_c9strict_utf8_string_loc",
1650               "is_c9strict_utf8_string_loclen",
1651
1652               "is_utf8_string_flags", "is_utf8_string_loc_flags",
1653               "is_utf8_string_loclen_flags",
1654
1655               "is_utf8_fixed_width_buf_flags",
1656               "is_utf8_fixed_width_buf_loc_flags",
1657               "is_utf8_fixed_width_buf_loclen_flags".
1658
1659               "is_utf8_invariant_string".  "is_utf8_valid_partial_char".
1660               "is_utf8_valid_partial_char_flags".
1661
1662           •   The functions "utf8n_to_uvchr" and its derivatives have had
1663               several changes of behaviour.
1664
1665               Calling them, while passing a string length of 0 is now
1666               asserted against in DEBUGGING builds, and otherwise, returns
1667               the Unicode REPLACEMENT CHARACTER.   If you have nothing to
1668               decode, you shouldn't call the decode function.
1669
1670               They now return the Unicode REPLACEMENT CHARACTER if called
1671               with UTF-8 that has the overlong malformation and that
1672               malformation is allowed by the input parameters.  This
1673               malformation is where the UTF-8 looks valid syntactically, but
1674               there is a shorter sequence that yields the same code point.
1675               This has been forbidden since Unicode version 3.1.
1676
1677               They now accept an input flag to allow the overflow
1678               malformation.  This malformation is when the UTF-8 may be
1679               syntactically valid, but the code point it represents is not
1680               capable of being represented in the word length on the
1681               platform.  What "allowed" means, in this case, is that the
1682               function doesn't return an error, and it advances the parse
1683               pointer to beyond the UTF-8 in question, but it returns the
1684               Unicode REPLACEMENT CHARACTER as the value of the code point
1685               (since the real value is not representable).
1686
1687               They no longer abandon searching for other malformations when
1688               the first one is encountered.  A call to one of these functions
1689               thus can generate multiple diagnostics, instead of just one.
1690
1691           •   valid_utf8_to_uvchr() has been added to the API (although it
1692               was present in core earlier). Like utf8_to_uvchr_buf(), but
1693               assumes that the next character is well-formed.  Use with
1694               caution.
1695
1696           •   A new function, "utf8n_to_uvchr_error", has been added for use
1697               by modules that need to know the details of UTF-8 malformations
1698               beyond pass/fail.  Previously, the only ways to know why a
1699               sequence was ill-formed was to capture and parse the generated
1700               diagnostics or to do your own analysis.
1701
1702           •   There is now a safer version of utf8_hop(), called
1703               utf8_hop_safe().  Unlike utf8_hop(), utf8_hop_safe() won't
1704               navigate before the beginning or after the end of the supplied
1705               buffer.
1706
1707           •   Two new functions, utf8_hop_forward() and utf8_hop_back() are
1708               similar to utf8_hop_safe() but are for when you know which
1709               direction you wish to travel.
1710
1711           •   Two new macros which return useful utf8 byte sequences:
1712
1713               "BOM_UTF8"
1714
1715               "REPLACEMENT_CHARACTER_UTF8"
1716
1717       •   Perl is now built with the "PERL_OP_PARENT" compiler define enabled
1718           by default.  To disable it, use the "PERL_NO_OP_PARENT" compiler
1719           define.  This flag alters how the "op_sibling" field is used in
1720           "OP" structures, and has been available optionally since perl 5.22.
1721
1722           See "Internal Changes" in perl5220delta for more details of what
1723           this build option does.
1724
1725       •   Three new ops, "OP_ARGELEM", "OP_ARGDEFELEM", and "OP_ARGCHECK"
1726           have been added.  These are intended principally to implement the
1727           individual elements of a subroutine signature, plus any overall
1728           checking required.
1729
1730       •   The "OP_PUSHRE" op has been eliminated and the "OP_SPLIT" op has
1731           been changed from class "LISTOP" to "PMOP".
1732
1733           Formerly the first child of a split would be a "pushre", which
1734           would have the "split"'s regex attached to it. Now the regex is
1735           attached directly to the "split" op, and the "pushre" has been
1736           eliminated.
1737
1738       •   The op_class() API function has been added.  This is like the
1739           existing OP_CLASS() macro, but can more accurately determine what
1740           struct an op has been allocated as.  For example OP_CLASS() might
1741           return "OA_BASEOP_OR_UNOP" indicating that ops of this type are
1742           usually allocated as an "OP" or "UNOP"; while op_class() will
1743           return "OPclass_BASEOP" or "OPclass_UNOP" as appropriate.
1744
1745       •   All parts of the internals now agree that the "sassign" op is a
1746           "BINOP"; previously it was listed as a "BASEOP" in regen/opcodes,
1747           which meant that several parts of the internals had to be special-
1748           cased to accommodate it.  This oddity's original motivation was to
1749           handle code like "$x ||= 1"; that is now handled in a simpler way.
1750
1751       •   The output format of the op_dump() function (as used by "perl -Dx")
1752           has changed: it now displays an "ASCII-art" tree structure, and
1753           shows more low-level details about each op, such as its address and
1754           class.
1755
1756       •   The "PADOFFSET" type has changed from being unsigned to signed, and
1757           several pad-related variables such as "PL_padix" have changed from
1758           being of type "I32" to type "PADOFFSET".
1759
1760       •   The "DEBUGGING"-mode output for regex compilation and execution has
1761           been enhanced.
1762
1763       •   Several obscure SV flags have been eliminated, sometimes along with
1764           the macros which manipulate them: "SVpbm_VALID", "SVpbm_TAIL",
1765           "SvTAIL_on", "SvTAIL_off", "SVrepl_EVAL", "SvEVALED".
1766
1767       •   An OP "op_private" flag has been eliminated: "OPpRUNTIME". This
1768           used to often get set on "PMOP" ops, but had become meaningless
1769           over time.
1770

Selected Bug Fixes

1772       •   Perl no longer panics when switching into some locales on machines
1773           with buggy strxfrm() implementations in their libc.  [GH #13768]
1774           <https://github.com/Perl/perl5/issues/13768>
1775
1776       •   " $-{$name} " would leak an "AV" on each access if the regular
1777           expression had no named captures.  The same applies to access to
1778           any hash tied with Tie::Hash::NamedCapture and "all => 1".  [GH
1779           #15882] <https://github.com/Perl/perl5/issues/15882>
1780
1781       •   Attempting to use the deprecated variable $# as the object in an
1782           indirect object method call could cause a heap use after free or
1783           buffer overflow.  [GH #15599]
1784           <https://github.com/Perl/perl5/issues/15599>
1785
1786       •   When checking for an indirect object method call, in some rare
1787           cases the parser could reallocate the line buffer but then continue
1788           to use pointers to the old buffer.  [GH #15585]
1789           <https://github.com/Perl/perl5/issues/15585>
1790
1791       •   Supplying a glob as the format argument to "formline" would cause
1792           an assertion failure.  [GH #15862]
1793           <https://github.com/Perl/perl5/issues/15862>
1794
1795       •   Code like " $value1 =~ qr/.../ ~~ $value2 " would have the match
1796           converted into a "qr//" operator, leaving extra elements on the
1797           stack to confuse any surrounding expression.  [GH #15859]
1798           <https://github.com/Perl/perl5/issues/15859>
1799
1800       •   Since v5.24 in some obscure cases, a regex which included code
1801           blocks from multiple sources (e.g., via embedded via "qr//"
1802           objects) could end up with the wrong current pad and crash or give
1803           weird results.  [GH #15657]
1804           <https://github.com/Perl/perl5/issues/15657>
1805
1806       •   Occasionally local()s in a code block within a patterns weren't
1807           being undone when the pattern matching backtracked over the code
1808           block.  [GH #15056] <https://github.com/Perl/perl5/issues/15056>
1809
1810       •   Using substr() to modify a magic variable could access freed memory
1811           in some cases.  [GH #15871]
1812           <https://github.com/Perl/perl5/issues/15871>
1813
1814       •   Under "use utf8", the entire source code is now checked for being
1815           UTF-8 well formed, not just quoted strings as before.  [GH #14973]
1816           <https://github.com/Perl/perl5/issues/14973>.
1817
1818       •   The range operator ".." on strings now handles its arguments
1819           correctly when in the scope of the "unicode_strings" feature.  The
1820           previous behaviour was sufficiently unexpected that we believe no
1821           correct program could have made use of it.
1822
1823       •   The "split" operator did not ensure enough space was allocated for
1824           its return value in scalar context.  It could then write a single
1825           pointer immediately beyond the end of the memory block allocated
1826           for the stack.  [GH #15749]
1827           <https://github.com/Perl/perl5/issues/15749>
1828
1829       •   Using a large code point with the "W" pack template character with
1830           the current output position aligned at just the right point could
1831           cause a write of a single zero byte immediately beyond the end of
1832           an allocated buffer.  [GH #15572]
1833           <https://github.com/Perl/perl5/issues/15572>
1834
1835       •   Supplying a format's picture argument as part of the format
1836           argument list where the picture specifies modifying the argument
1837           could cause an access to the new freed compiled format.  [GH
1838           #15566] <https://github.com/Perl/perl5/issues/15566>
1839
1840       •   The sort() operator's built-in numeric comparison function didn't
1841           handle large integers that weren't exactly representable by a
1842           double.  This now uses the same code used to implement the "<=>"
1843           operator.  [GH #15768] <https://github.com/Perl/perl5/issues/15768>
1844
1845       •   Fix issues with "/(?{ ... <<EOF })/" that broke Method::Signatures.
1846           [GH #15779] <https://github.com/Perl/perl5/issues/15779>
1847
1848       •   Fixed an assertion failure with "chop" and "chomp", which could be
1849           triggered by "chop(@x =~ tr/1/1/)".  [GH #15738]
1850           <https://github.com/Perl/perl5/issues/15738>.
1851
1852       •   Fixed a comment skipping error in patterns under "/x"; it could
1853           stop skipping a byte early, which could be in the middle of a UTF-8
1854           character.  [GH #15790]
1855           <https://github.com/Perl/perl5/issues/15790>.
1856
1857perldb now ignores /dev/tty on non-Unix systems.  [GH #12244]
1858           <https://github.com/Perl/perl5/issues/12244>;
1859
1860       •   Fix assertion failure for "{}->$x" when $x isn't defined.  [GH
1861           #15791] <https://github.com/Perl/perl5/issues/15791>.
1862
1863       •   Fix an assertion error which could be triggered when a lookahead
1864           string in patterns exceeded a minimum length.  [GH #15796]
1865           <https://github.com/Perl/perl5/issues/15796>.
1866
1867       •   Only warn once per literal number about a misplaced "_".  [GH
1868           #9989] <https://github.com/Perl/perl5/issues/9989>.
1869
1870       •   The "tr///" parse code could be looking at uninitialized data after
1871           a perse error.  [GH #15624]
1872           <https://github.com/Perl/perl5/issues/15624>.
1873
1874       •   In a pattern match, a back-reference ("\1") to an unmatched capture
1875           could read back beyond the start of the string being matched.  [GH
1876           #15634] <https://github.com/Perl/perl5/issues/15634>.
1877
1878       •   "use re 'strict'" is supposed to warn if you use a range (such as
1879           "/(?[ [ X-Y ] ])/") whose start and end digit aren't from the same
1880           group of 10.  It didn't do that for five groups of mathematical
1881           digits starting at "U+1D7E".
1882
1883       •   A sub containing a "forward" declaration with the same name (e.g.,
1884           "sub c { sub c; }") could sometimes crash or loop infinitely.  [GH
1885           #15557] <https://github.com/Perl/perl5/issues/15557>
1886
1887       •   A crash in executing a regex with a non-anchored UTF-8 substring
1888           against a target string that also used UTF-8 has been fixed.  [GH
1889           #15628] <https://github.com/Perl/perl5/issues/15628>
1890
1891       •   Previously, a shebang line like "#!perl -i u" could be erroneously
1892           interpreted as requesting the "-u" option.  This has been fixed.
1893           [GH #15623] <https://github.com/Perl/perl5/issues/15623>
1894
1895       •   The regex engine was previously producing incorrect results in some
1896           rare situations when backtracking past an alternation that matches
1897           only one thing; this showed up as capture buffers ($1, $2, etc.)
1898           erroneously containing data from regex execution paths that weren't
1899           actually executed for the final match.  [GH #15666]
1900           <https://github.com/Perl/perl5/issues/15666>
1901
1902       •   Certain regexes making use of the experimental "regex_sets" feature
1903           could trigger an assertion failure.  This has been fixed.  [GH
1904           #15620] <https://github.com/Perl/perl5/issues/15620>
1905
1906       •   Invalid assignments to a reference constructor (e.g., "\eval=time")
1907           could sometimes crash in addition to giving a syntax error.  [GH
1908           #14815] <https://github.com/Perl/perl5/issues/14815>
1909
1910       •   The parser could sometimes crash if a bareword came after
1911           "evalbytes".  [GH #15586]
1912           <https://github.com/Perl/perl5/issues/15586>
1913
1914       •   Autoloading via a method call would warn erroneously ("Use of
1915           inherited AUTOLOAD for non-method") if there was a stub present in
1916           the package into which the invocant had been blessed.  The warning
1917           is no longer emitted in such circumstances.  [GH #9094]
1918           <https://github.com/Perl/perl5/issues/9094>
1919
1920       •   The use of "splice" on arrays with non-existent elements could
1921           cause other operators to crash.  [GH #15577]
1922           <https://github.com/Perl/perl5/issues/15577>
1923
1924       •   A possible buffer overrun when a pattern contains a fixed utf8
1925           substring.  [GH #15534]
1926           <https://github.com/Perl/perl5/issues/15534>
1927
1928       •   Fixed two possible use-after-free bugs in perl's lexer.  [GH
1929           #15549] <https://github.com/Perl/perl5/issues/15549>
1930
1931       •   Fixed a crash with "s///l" where it thought it was dealing with
1932           UTF-8 when it wasn't.  [GH #15543]
1933           <https://github.com/Perl/perl5/issues/15543>
1934
1935       •   Fixed a place where the regex parser was not setting the syntax
1936           error correctly on a syntactically incorrect pattern.  [GH #15565]
1937           <https://github.com/Perl/perl5/issues/15565>
1938
1939       •   The "&." operator (and the "&" operator, when it treats its
1940           arguments as strings) were failing to append a trailing null byte
1941           if at least one string was marked as utf8 internally.  Many code
1942           paths (system calls, regexp compilation) still expect there to be a
1943           null byte in the string buffer just past the end of the logical
1944           string.  An assertion failure was the result.  [GH #15606]
1945           <https://github.com/Perl/perl5/issues/15606>
1946
1947       •   Avoid a heap-after-use error in the parser when creating an error
1948           messge for a syntactically invalid heredoc.  [GH #15527]
1949           <https://github.com/Perl/perl5/issues/15527>
1950
1951       •   Fix a segfault when run with "-DC" options on DEBUGGING builds.
1952           [GH #15563] <https://github.com/Perl/perl5/issues/15563>
1953
1954       •   Fixed the parser error handling in subroutine attributes for an
1955           '":attr(foo"' that does not have an ending '")"'.
1956
1957       •   Fix the perl lexer to correctly handle a backslash as the last char
1958           in quoted-string context. This actually fixed two bugs, [GH #15546]
1959           <https://github.com/Perl/perl5/issues/15546> and [GH #15582]
1960           <https://github.com/Perl/perl5/issues/15582>.
1961
1962       •   In the API function "gv_fetchmethod_pvn_flags", rework separator
1963           parsing to prevent possible string overrun with an invalid "len"
1964           argument.  [GH #15598] <https://github.com/Perl/perl5/issues/15598>
1965
1966       •   Problems with in-place array sorts: code like "@a = sort { ... }
1967           @a", where the source and destination of the sort are the same
1968           plain array, are optimised to do less copying around.  Two side-
1969           effects of this optimisation were that the contents of @a as seen
1970           by sort routines were partially sorted; and under some
1971           circumstances accessing @a during the sort could crash the
1972           interpreter.  Both these issues have been fixed, and Sort functions
1973           see the original value of @a.  [GH #15387]
1974           <https://github.com/Perl/perl5/issues/15387>
1975
1976       •   Non-ASCII string delimiters are now reported correctly in error
1977           messages for unterminated strings.  [GH #15469]
1978           <https://github.com/Perl/perl5/issues/15469>
1979
1980       •   "pack("p", ...)" used to emit its warning ("Attempt to pack pointer
1981           to temporary value") erroneously in some cases, but has been fixed.
1982
1983       •   @DB::args is now exempt from "used once" warnings.  The warnings
1984           only occurred under -w, because warnings.pm itself uses @DB::args
1985           multiple times.
1986
1987       •   The use of built-in arrays or hash slices in a double-quoted string
1988           no longer issues a warning ("Possible unintended interpolation...")
1989           if the variable has not been mentioned before.  This affected code
1990           like "qq|@DB::args|" and "qq|@SIG{'CHLD', 'HUP'}|".  (The special
1991           variables "@-" and "@+" were already exempt from the warning.)
1992
1993       •   "gethostent" and similar functions now perform a null check
1994           internally, to avoid crashing with the torsocks library.  This was
1995           a regression from v5.22.  [GH #15478]
1996           <https://github.com/Perl/perl5/issues/15478>
1997
1998       •   "defined *{'!'}", "defined *{'['}", and "defined *{'-'}" no longer
1999           leak memory if the typeglob in question has never been accessed
2000           before.
2001
2002       •   Mentioning the same constant twice in a row (which is a syntax
2003           error) no longer fails an assertion under debugging builds.  This
2004           was a regression from v5.20.  [GH #15017]
2005           <https://github.com/Perl/perl5/issues/15017>
2006
2007       •   Many issues relating to "printf "%a"" of hexadecimal floating point
2008           were fixed.  In addition, the "subnormals" (formerly known as
2009           "denormals") floating point numbers are now supported both with the
2010           plain IEEE 754 floating point numbers (64-bit or 128-bit) and the
2011           x86 80-bit "extended precision".  Note that subnormal hexadecimal
2012           floating point literals will give a warning about "exponent
2013           underflow".  [GH #15495]
2014           <https://github.com/Perl/perl5/issues/15495> [GH #15503]
2015           <https://github.com/Perl/perl5/issues/15503> [GH #15504]
2016           <https://github.com/Perl/perl5/issues/15504> [GH #15505]
2017           <https://github.com/Perl/perl5/issues/15505> [GH #15510]
2018           <https://github.com/Perl/perl5/issues/15510> [GH #15512]
2019           <https://github.com/Perl/perl5/issues/15512>
2020
2021       •   A regression in v5.24 with "tr/\N{U+...}/foo/" when the code point
2022           was between 128 and 255 has been fixed.  [GH #15475]
2023           <https://github.com/Perl/perl5/issues/15475>.
2024
2025       •   Use of a string delimiter whose code point is above 2**31 now works
2026           correctly on platforms that allow this.  Previously, certain
2027           characters, due to truncation, would be confused with other
2028           delimiter characters with special meaning (such as "?" in
2029           "m?...?"), resulting in inconsistent behaviour.  Note that this is
2030           non-portable, and is based on Perl's extension to UTF-8, and is
2031           probably not displayable nor enterable by any editor.  [GH #15477]
2032           <https://github.com/Perl/perl5/issues/15477>
2033
2034       •   "@{x" followed by a newline where "x" represents a control or non-
2035           ASCII character no longer produces a garbled syntax error message
2036           or a crash.  [GH #15518]
2037           <https://github.com/Perl/perl5/issues/15518>
2038
2039       •   An assertion failure with "%: = 0" has been fixed.  [GH #15358]
2040           <https://github.com/Perl/perl5/issues/15358>
2041
2042       •   In Perl 5.18, the parsing of "$foo::$bar" was accidentally changed,
2043           such that it would be treated as "$foo."::".$bar".  The previous
2044           behavior, which was to parse it as "$foo:: . $bar", has been
2045           restored.  [GH #15408] <https://github.com/Perl/perl5/issues/15408>
2046
2047       •   Since Perl 5.20, line numbers have been off by one when perl is
2048           invoked with the -x switch.  This has been fixed.  [GH #15413]
2049           <https://github.com/Perl/perl5/issues/15413>
2050
2051       •   Vivifying a subroutine stub in a deleted stash (e.g., "delete
2052           $My::{"Foo::"}; \&My::Foo::foo") no longer crashes.  It had begun
2053           crashing in Perl 5.18.  [GH #15420]
2054           <https://github.com/Perl/perl5/issues/15420>
2055
2056       •   Some obscure cases of subroutines and file handles being freed at
2057           the same time could result in crashes, but have been fixed.  The
2058           crash was introduced in Perl 5.22.  [GH #15435]
2059           <https://github.com/Perl/perl5/issues/15435>
2060
2061       •   Code that looks for a variable name associated with an
2062           uninitialized value could cause an assertion failure in cases where
2063           magic is involved, such as "$ISA[0][0]".  This has now been fixed.
2064           [GH #15364] <https://github.com/Perl/perl5/issues/15364>
2065
2066       •   A crash caused by code generating the warning "Subroutine
2067           STASH::NAME redefined" in cases such as "sub P::f{} undef *P::;
2068           *P::f =sub{};" has been fixed.  In these cases, where the STASH is
2069           missing, the warning will now appear as "Subroutine NAME
2070           redefined".  [GH #15368]
2071           <https://github.com/Perl/perl5/issues/15368>
2072
2073       •   Fixed an assertion triggered by some code that handles deprecated
2074           behavior in formats, e.g., in cases like this:
2075
2076               format STDOUT =
2077               @
2078               0"$x"
2079
2080           [GH #15366] <https://github.com/Perl/perl5/issues/15366>
2081
2082       •   A possible divide by zero in string transformation code on Windows
2083           has been avoided, fixing a crash when collating an empty string.
2084           [GH #15439] <https://github.com/Perl/perl5/issues/15439>
2085
2086       •   Some regular expression parsing glitches could lead to assertion
2087           failures with regular expressions such as "/(?<=/" and "/(?<!/".
2088           This has now been fixed.  [GH #15332]
2089           <https://github.com/Perl/perl5/issues/15332>
2090
2091       •   " until ($x = 1) { ... } " and " ... until $x = 1 " now properly
2092           warn when syntax warnings are enabled.  [GH #15138]
2093           <https://github.com/Perl/perl5/issues/15138>
2094
2095socket() now leaves the error code returned by the system in $! on
2096           failure.  [GH #15383] <https://github.com/Perl/perl5/issues/15383>
2097
2098       •   Assignment variants of any bitwise ops under the "bitwise" feature
2099           would crash if the left-hand side was an array or hash.  [GH
2100           #15346] <https://github.com/Perl/perl5/issues/15346>
2101
2102       •   "require" followed by a single colon (as in "foo() ? require : ..."
2103           is now parsed correctly as "require" with implicit $_, rather than
2104           "require """.  [GH #15380]
2105           <https://github.com/Perl/perl5/issues/15380>
2106
2107       •   Scalar "keys %hash" can now be assigned to consistently in all
2108           scalar lvalue contexts.  Previously it worked for some contexts but
2109           not others.
2110
2111       •   List assignment to "vec" or "substr" with an array or hash for its
2112           first argument used to result in crashes or "Can't coerce" error
2113           messages at run time, unlike scalar assignment, which would give an
2114           error at compile time.  List assignment now gives a compile-time
2115           error, too.  [GH #15370]
2116           <https://github.com/Perl/perl5/issues/15370>
2117
2118       •   Expressions containing an "&&" or "||" operator (or their synonyms
2119           "and" and "or") were being compiled incorrectly in some cases.  If
2120           the left-hand side consisted of either a negated bareword constant
2121           or a negated "do {}" block containing a constant expression, and
2122           the right-hand side consisted of a negated non-foldable expression,
2123           one of the negations was effectively ignored.  The same was true of
2124           "if" and "unless" statement modifiers, though with the left-hand
2125           and right-hand sides swapped.  This long-standing bug has now been
2126           fixed.  [GH #15285] <https://github.com/Perl/perl5/issues/15285>
2127
2128       •   "reset" with an argument no longer crashes when encountering stash
2129           entries other than globs.  [GH #15314]
2130           <https://github.com/Perl/perl5/issues/15314>
2131
2132       •   Assignment of hashes to, and deletion of, typeglobs named *::::::
2133           no longer causes crashes.  [GH #15307]
2134           <https://github.com/Perl/perl5/issues/15307>
2135
2136       •   Perl wasn't correctly handling true/false values in the LHS of a
2137           list assign; specifically the truth values returned by boolean
2138           operators.  This could trigger an assertion failure in something
2139           like the following:
2140
2141               for ($x > $y) {
2142                   ($_, ...) = (...); # here $_ is aliased to a truth value
2143               }
2144
2145           This was a regression from v5.24.  [GH #15690]
2146           <https://github.com/Perl/perl5/issues/15690>
2147
2148       •   Assertion failure with user-defined Unicode-like properties.  [GH
2149           #15696] <https://github.com/Perl/perl5/issues/15696>
2150
2151       •   Fix error message for unclosed "\N{" in a regex.  An unclosed "\N{"
2152           could give the wrong error message: "\N{NAME} must be resolved by
2153           the lexer".
2154
2155       •   List assignment in list context where the LHS contained aggregates
2156           and where there were not enough RHS elements, used to skip scalar
2157           lvalues.  Previously, "(($a,$b,@c,$d) = (1))" in list context
2158           returned "($a)"; now it returns "($a,$b,$d)".  "(($a,$b,$c) = (1))"
2159           is unchanged: it still returns "($a,$b,$c)".  This can be seen in
2160           the following:
2161
2162               sub inc { $_++ for @_ }
2163               inc(($a,$b,@c,$d) = (10))
2164
2165           Formerly, the values of "($a,$b,$d)" would be left as
2166           "(11,undef,undef)"; now they are "(11,1,1)".
2167
2168       •   Code like this: "/(?{ s!!! })/" could trigger infinite recursion on
2169           the C stack (not the normal perl stack) when the last successful
2170           pattern in scope is itself.  We avoid the segfault by simply
2171           forbidding the use of the empty pattern when it would resolve to
2172           the currently executing pattern.  [GH #15669]
2173           <https://github.com/Perl/perl5/issues/15669>
2174
2175       •   Avoid reading beyond the end of the line buffer in perl's lexer
2176           when there's a short UTF-8 character at the end.  [GH #15531]
2177           <https://github.com/Perl/perl5/issues/15531>
2178
2179       •   Alternations in regular expressions were sometimes failing to match
2180           a utf8 string against a utf8 alternate.  [GH #15680]
2181           <https://github.com/Perl/perl5/issues/15680>
2182
2183       •   Make "do "a\0b"" fail silently (and return "undef" and set $!)
2184           instead of throwing an error.  [GH #15676]
2185           <https://github.com/Perl/perl5/issues/15676>
2186
2187       •   "chdir" with no argument didn't ensure that there was stack space
2188           available for returning its result.  [GH #15569]
2189           <https://github.com/Perl/perl5/issues/15569>
2190
2191       •   All error messages related to "do" now refer to "do"; some formerly
2192           claimed to be from "require" instead.
2193
2194       •   Executing "undef $x" where $x is tied or magical no longer
2195           incorrectly blames the variable for an uninitialized-value warning
2196           encountered by the tied/magical code.
2197
2198       •   Code like "$x = $x . "a"" was incorrectly failing to yield a use of
2199           uninitialized value warning when $x was a lexical variable with an
2200           undefined value. That has now been fixed.  [GH #15269]
2201           <https://github.com/Perl/perl5/issues/15269>
2202
2203       •   "undef *_; shift" or "undef *_; pop" inside a subroutine, with no
2204           argument to "shift" or "pop", began crashing in Perl 5.14, but has
2205           now been fixed.
2206
2207       •   "string$scalar->$*" now correctly prefers concatenation overloading
2208           to string overloading if "$scalar->$*" returns an overloaded
2209           object, bringing it into consistency with $$scalar.
2210
2211       •   "/@0{0*->@*/*0" and similar contortions used to crash, but no
2212           longer do, but merely produce a syntax error.  [GH #15333]
2213           <https://github.com/Perl/perl5/issues/15333>
2214
2215       •   "do" or "require" with an argument which is a reference or typeglob
2216           which, when stringified, contains a null character, started
2217           crashing in Perl 5.20, but has now been fixed.  [GH #15337]
2218           <https://github.com/Perl/perl5/issues/15337>
2219
2220       •   Improve the error message for a missing tie() package/method. This
2221           brings the error messages in line with the ones used for normal
2222           method calls.
2223
2224       •   Parsing bad POSIX charclasses no longer leaks memory.  [GH #15382]
2225           <https://github.com/Perl/perl5/issues/15382>
2226

Known Problems

2228       •   G++ 6 handles subnormal (denormal) floating point values
2229           differently than gcc 6 or g++ 5 resulting in "flush-to-zero". The
2230           end result is that if you specify very small values using the
2231           hexadecimal floating point format, like "0x1.fffffffffffffp-1022",
2232           they become zeros.  [GH #15990]
2233           <https://github.com/Perl/perl5/issues/15990>
2234

Errata From Previous Releases

2236       •   Fixed issues with recursive regexes.  The behavior was fixed in
2237           Perl 5.24.  [GH #14935]
2238           <https://github.com/Perl/perl5/issues/14935>
2239

Obituary

2241       Jon Portnoy (AVENJ), a prolific Perl author and admired Gentoo
2242       community member, has passed away on August 10, 2016.  He will be
2243       remembered and missed by all those who he came in contact with, and
2244       enriched with his intellect, wit, and spirit.
2245
2246       It is with great sadness that we also note Kip Hampton's passing.
2247       Probably best known as the author of the Perl & XML column on XML.com,
2248       he was a core contributor to AxKit, an XML server platform that became
2249       an Apache Foundation project.  He was a frequent speaker in the early
2250       days at OSCON, and most recently at YAPC::NA in Madison.  He was
2251       frequently on irc.perl.org as ubu, generally in the #axkit-dahut
2252       community, the group responsible for YAPC::NA Asheville in 2011.
2253
2254       Kip and his constant contributions to the community will be greatly
2255       missed.
2256

Acknowledgements

2258       Perl 5.26.0 represents approximately 13 months of development since
2259       Perl 5.24.0 and contains approximately 360,000 lines of changes across
2260       2,600 files from 86 authors.
2261
2262       Excluding auto-generated files, documentation and release tools, there
2263       were approximately 230,000 lines of changes to 1,800 .pm, .t, .c and .h
2264       files.
2265
2266       Perl continues to flourish into its third decade thanks to a vibrant
2267       community of users and developers.  The following people are known to
2268       have contributed the improvements that became Perl 5.26.0:
2269
2270       Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alex Vandiver, Andreas
2271       König, Andreas Voegele, Andrew Fresh, Andy Lester, Aristotle Pagaltzis,
2272       Chad Granum, Chase Whitener, Chris 'BinGOs' Williams, Chris Lamb,
2273       Christian Hansen, Christian Millour, Colin Newell, Craig A. Berry,
2274       Dagfinn Ilmari Mannsåker, Dan Collins, Daniel Dragan, Dave Cross, Dave
2275       Rolsky, David Golden, David H.  Gutteridge, David Mitchell, Dominic
2276       Hargreaves, Doug Bell, E. Choroba, Ed Avis, Father Chrysostomos,
2277       François Perrad, Hauke D, H.Merijn Brand, Hugo van der Sanden, Ivan
2278       Pozdeev, James E Keenan, James Raspass, Jarkko Hietaniemi, Jerry D.
2279       Hedden, Jim Cromie, J. Nick Koston, John Lightsey, Karen Etheridge,
2280       Karl Williamson, Leon Timmermans, Lukas Mai, Matthew Horsfall, Maxwell
2281       Carey, Misty De Meo, Neil Bowers, Nicholas Clark, Nicolas R., Niko
2282       Tyni, Pali, Paul Marquess, Peter Avalos, Petr Písař, Pino Toscano,
2283       Rafael Garcia-Suarez, Reini Urban, Renee Baecker, Ricardo Signes,
2284       Richard Levitte, Rick Delaney, Salvador Fandiño, Samuel Thibault,
2285       Sawyer X, Sébastien Aperghis-Tramoni, Sergey Aleynikov, Shlomi Fish,
2286       Smylers, Stefan Seifert, Steffen Müller, Stevan Little, Steve Hay,
2287       Steven Humphrey, Sullivan Beck, Theo Buehler, Thomas Sibley, Todd
2288       Rinaldo, Tomasz Konojacki, Tony Cook, Unicode Consortium, Yaroslav
2289       Kuzmin, Yves Orton, Zefram.
2290
2291       The list above is almost certainly incomplete as it is automatically
2292       generated from version control history.  In particular, it does not
2293       include the names of the (very much appreciated) contributors who
2294       reported issues to the Perl bug tracker.
2295
2296       Many of the changes included in this version originated in the CPAN
2297       modules included in Perl's core.  We're grateful to the entire CPAN
2298       community for helping Perl to flourish.
2299
2300       For a more complete list of all of Perl's historical contributors,
2301       please see the AUTHORS file in the Perl source distribution.
2302

Reporting Bugs

2304       If you find what you think is a bug, you might check the perl bug
2305       database at <https://rt.perl.org/>.  There may also be information at
2306       <http://www.perl.org/>, the Perl Home Page.
2307
2308       If you believe you have an unreported bug, please run the perlbug
2309       program included with your release.  Be sure to trim your bug down to a
2310       tiny but sufficient test case.  Your bug report, along with the output
2311       of "perl -V", will be sent off to "perlbug@perl.org" to be analysed by
2312       the Perl porting team.
2313
2314       If the bug you are reporting has security implications which make it
2315       inappropriate to send to a publicly archived mailing list, then see
2316       "SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec for details of
2317       how to report the issue.
2318

Give Thanks

2320       If you wish to thank the Perl 5 Porters for the work we had done in
2321       Perl 5, you can do so by running the "perlthanks" program:
2322
2323           perlthanks
2324
2325       This will send an email to the Perl 5 Porters list with your show of
2326       thanks.
2327

SEE ALSO

2329       The Changes file for an explanation of how to view exhaustive details
2330       on what changed.
2331
2332       The INSTALL file for how to build Perl.
2333
2334       The README file for general stuff.
2335
2336       The Artistic and Copying files for copyright information.
2337
2338
2339
2340perl v5.38.2                      2023-11-30                  PERL5260DELTA(1)
Impressum