perl5319delta - what is new for perl v5.31.9
This document describes differences between the 5.31.8 release and the 5.31.9 release.
If you are upgrading from an earlier release such as 5.31.7, first read perl5318delta, which describes differences between 5.31.7 and 5.31.8.
Using the beta causes us to participate in the soak cycle for Unicode. Final approval for the existing changes has been made by the Unicode consortium, and there are few possibilities that this could break existing programs, as there are few changes to already existing characters.
Information about the changes is at https://unicode.org/versions/beta-13.0.0.html.
Identifier_Status
Identifier_Type
Unicode is in the process of revising its regular expression requirements: https://www.unicode.org/draft/reports/tr18/tr18.html. As part of that they are wanting more properties to be exposed, ones that aren't part of the strict UCD (Unicode character database). These two are used for examining inputs for security purposes. Details on their usage is at https://www.unicode.org/reports/tr39/proposed.html.
qr/\p{Name=...}/
\p{Na=...}
The Unicode Name property is now accessible in regular expression patterns using the above syntaxes, as an alternative to \N{...}. A comparison of the two methods is given in "Comparison of \N{...} and \p{name=...}" in perlunicode.
\N{...}
POSIX::mblen()
mbtowc
wctomb
These functions are always executed under the current C language locale. (See perllocale.) Most locales are stateless, but a few, notably the very rarely encountered ISO 2022, maintain a state between calls to these functions. Previously the state was cleared on every call, but now the state is not reset unless the appropriate parameter is undef.
undef
On threaded perls, the C99 functions mbrlen(3), mbrtowc(3), and wcrtomb(3), when available, are substituted for the plain functions. This makes these functions thread-safe when executing on a locale thread-safe platform.
The string length parameters in mblen and mbtowc are now optional; useful only if you wish to restrict the length parsed in the source string to less than the actual length.
mblen
These few features are either inappropriate or interfere with the algorithm used to accomplish this task. The complete list is in "Wildcards in Property Values" in perlunicode.
POSIX::mbstowcs
POSIX::wcstombs
These functions could never have worked due to a defective interface specification. There is clearly no demand for them, given that no one has ever complained in the many years the functions were claimed to be available, hence so-called "support" for them is now dropped.
(?[...])
See "Selected Bug Fixes". The heuristics previously used may have let some constructs compile (perhaps not with the programmer's intended effect) that should have been errors. None are known, but it is possible that some erroneous constructs no longer compile.
Archive::Tar has been upgraded from version 2.32 to 2.36.
B has been upgraded from version 1.78 to 1.80.
charnames has been upgraded from version 1.45 to 1.46.
Devel::PPPort has been upgraded from version 3.56 to 3.57.
diagnostics has been upgraded from version 1.36 to 1.37.
Encode has been upgraded from version 3.02 to 3.03.
ExtUtils::CBuilder has been upgraded from version 0.280233 to 0.280234.
feature has been upgraded from version 1.57 to 1.58.
A new indirect feature has been added, which is enabled by default but allows turning off indirect object syntax.
indirect
IO has been upgraded from version 1.42 to 1.43.
IO::Socket no longer caches a zero protocol value, since this indicates that the implementation will select a protocol. This means that on platforms that don't implement SO_PROTOCOL for a given socket type the protocol method may return undef.
SO_PROTOCOL
Module::CoreList has been upgraded from version 5.20200120 to 5.20200220.
parent has been upgraded from version 0.237 to 0.238.
perlfaq has been upgraded from version 5.20191102 to 5.20200125.
Pod::Html has been upgraded from version 1.24 to 1.25.
POSIX has been upgraded from version 1.91 to 1.92.
Storable has been upgraded from version 3.18 to 3.19.
Use of note() from Test::More is now optional in tests. This works around a circular dependency with Test::More when installing on very old perls from CPAN.
threads has been upgraded from version 2.23 to 2.24.
Tie::File has been upgraded from version 1.03 to 1.06.
XS::APItest has been upgraded from version 1.06 to 1.07.
Additionally, the following selected changes have been made:
Links to the now defunct https://search.cpan.org site now point at the equivalent https://metacpan.org URL. [GH #17393]
The man page for ExtUtils::XSSymSet is now only installed on VMS, which is the only platform the module is installed on. [GH #17424]
The following additions or changes have been made to diagnostic output, including warnings and fatal error messages. For the complete list of diagnostic messages, see perldiag.
Expecting interpolated extended charclass in regex; marked by <-- HERE in m/%s/
This is a replacement for several error messages listed under "Changes to Existing Diagnostics".
Code point 0x%X is not Unicode, and not portable
This is actually not a new message, but it is now output when the warnings category portable is enabled.
portable
When raised during regular expression pattern compilation, the warning has extra text added at the end marking where precisely in the pattern it occured.
Non-hex character '%c' terminates \x early. Resolved as "%s"
This replaces a warning that was much less specific, and which gave false information. This new warning parallels the similar already-existing one raised for \o{}.
\o{}
Character following "\c" must be printable ASCII
now has extra text added at the end, when raised during regular expression pattern compilation, marking where precisely in the pattern it occured.
Use "%s" instead of "%s"
Sequence "\c{" invalid
"\c%c" is more clearly written simply as "%s"
Non-octal character '%c' terminates \o early. Resolved as "%s"
now includes the phrase "terminates \o early", and has extra text added at the end, when raised during regular expression pattern compilation, marking where precisely in the pattern it occured. In some instances the text of the resolution has been clarified.
'%s' resolved to '\o{%s}%d'
As of Perl 5.32, this message is no longer generated. Instead, "Non-octal character '%c' terminates \o early. Resolved as "%s"" in perldiag is.
Use of code point 0x%s is not allowed; the permissible max is 0x%X
Some instances of this message previously output the hex digits A, B, C, D, E, and F in lower case. Now they are all consistently upper case.
A
B
C
D
E
F
The following three diagnostics have been removed, and replaced by Expecting interpolated extended charclass in regex; marked by <-- HERE in m/%s/ : Expecting close paren for nested extended charclass in regex; marked by <-- HERE in m/%s/, Expecting close paren for wrapper for nested extended charclass in regex; marked by <-- HERE in m/%s/, and Expecting '(?flags:(?[...' in regex; marked by <-- HERE in m/%s/.
Expecting close paren for nested extended charclass in regex; marked by <-- HERE in m/%s/
Expecting close paren for wrapper for nested extended charclass in regex; marked by <-- HERE in m/%s/
Expecting '(?flags:(?[...' in regex; marked by <-- HERE in m/%s/
Tests were added and changed to reflect the other additions and changes in this release. Furthermore, these significant changes were made:
t/run/switches.t no longer uses (and re-uses) the tmpinplace/ directory under t/. This may prevent spurious failures. [GH #17424]
Various bugs in POSIX::mbtowc were fixed. Potential races with other threads are now avoided, and previously the returned wide character could well be garbage.
POSIX::mbtowc
Various bugs in POSIX::wctomb were fixed. Potential races with other threads are now avoided, and previously it would segfault if the string parameter was shared or hadn't been pre-allocated with a string of sufficient length to hold the result.
POSIX::wctomb
With the release of the patch kit C99 V2.0, VSI has provided support for a number of previously-missing C99 features. On systems with that patch kit installed, Perl's configuration process will now detect the presence of the header stdint.h and the following functions: fpclassify, isblank, isless, llrint, llrintl, llround, llroundl, nearbyint, round, scalbn, and scalbnl.
stdint.h
fpclassify
isblank
isless
llrint
llrintl
llround
llroundl
nearbyint
round
scalbn
scalbnl
Previously "require" in perlfunc would only treat the special built-in SV &PL_sv_undef as a value in %INC as if a previous require has failed, treating other undefined SVs as if the previous require has succeeded. This could cause unexpected success from require eg. on local %INC = %INC;. This has been fixed [GH #17428]
&PL_sv_undef
%INC
require
local %INC = %INC;
(?{...}) eval groups in regular expressions no longer unintentionally trigger "EVAL without pos change exceeded limit in regex" [GH #17490].
(?{...})
(?[...]) extended bracketed character classes do not wrongly raise an error on some cases where a previously-compiled such class is interpolated into another. The heuristics previously used have been replaced by a reliable method, and hence the diagnostics generated have changed. See "Diagnostics".
The debug display (say by specifying -Dr or use re (with appropriate options) of compiled Unicode propery wildcard subpatterns no longer has extraneous output.
-Dr
use re
Perl 5.31.9 represents approximately 4 weeks of development since Perl 5.31.8 and contains approximately 82,000 lines of changes across 390 files from 25 authors.
Excluding auto-generated files, documentation and release tools, there were approximately 61,000 lines of changes to 160 .pm, .t, .c and .h files.
Perl continues to flourish into its fourth decade thanks to a vibrant community of users and developers. The following people are known to have contributed the improvements that became Perl 5.31.9:
Alberto Simões, Andrew Fresh, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan Book, David Mitchell, E. Choroba, H.Merijn Brand, Hugo van der Sanden, James E Keenan, Karen Etheridge, Karl Williamson, Leon Timmermans, Marc Green, Matthew Horsfall, Paul Johnson, Petr Písař, Richard Leach, Steve Hay, Todd Rinaldo, Tomasz Konojacki, Tony Cook, Unicode Consortium, Yves Orton.
The list above is almost certainly incomplete as it is automatically generated from version control history. In particular, it does not include the names of the (very much appreciated) contributors who reported issues to the Perl bug tracker.
Many of the changes included in this version originated in the CPAN modules included in Perl's core. We're grateful to the entire CPAN community for helping Perl to flourish.
For a more complete list of all of Perl's historical contributors, please see the AUTHORS file in the Perl source distribution.
If you find what you think is a bug, you might check the perl bug database at https://github.com/Perl/perl5/issues. There may also be information at http://www.perl.org/, the Perl Home Page.
If you believe you have an unreported bug, please open an issue at https://github.com/Perl/perl5/issues. Be sure to trim your bug down to a tiny but sufficient test case.
If the bug you are reporting has security implications which make it inappropriate to send to a public issue tracker, then see "SECURITY VULNERABILITY CONTACT INFORMATION" in perlsec for details of how to report the issue.
If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you can do so by running the perlthanks program:
perlthanks
This will send an email to the Perl 5 Porters list with your show of thanks.
The Changes file for an explanation of how to view exhaustive details on what changed.
The INSTALL file for how to build Perl.
The README file for general stuff.
The Artistic and Copying files for copyright information.
To install blib, copy and paste the appropriate command in to your terminal.
cpanm
cpanm blib
CPAN shell
perl -MCPAN -e shell install blib
For more information on module installation, please visit the detailed CPAN module installation guide.