1PERL5260DELTA(1) Perl Programmers Reference Guide PERL5260DELTA(1)
2
3
4
6 perl5260delta - what is new for perl v5.26.0
7
9 This document describes the differences between the 5.24.0 release and
10 the 5.26.0 release.
11
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
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
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
176 • Configure -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
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
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
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
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
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
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
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
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
1364 • Configure 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
1398 • Configure: 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
1414 • Configure 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
1426 • make_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
1435 • Configure 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
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
1484 • t/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
1504 • t/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
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
1556 • configure.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
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
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
1857 • perldb 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
2095 • socket() 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
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
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
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
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
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
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
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)