NAME
perldelta - what is new for perl v5.31.9
DESCRIPTION
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.
Core Enhancements
Unicode 13.0 (beta) is supported
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.
New Unicode properties Identifier_Status
and Identifier_Type
supported
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.
It is now possible to write qr/\p{Name=...}/
, or \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.
The POSIX::mblen()
, mbtowc
, and wctomb
functions now work on shift state locales and are thread-safe on C99 and above compilers when executed on a platform that has locale thread-safety; the length parameters are now optional.
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
.
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.
Incompatible Changes
Certain pattern matching features are now prohibited in compiling Unicode property value wildcard subpatterns
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.
Stop pretending POSIX::mbstowcs
and POSIX::wcstombs
are supported
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.
A bug fix for (?[...])
may have caused some patterns to no longer compile
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.
Modules and Pragmata
Updated Modules and Pragmata
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.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 returnundef
.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.
Documentation
Changes to Existing Documentation
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]
Diagnostics
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.
New Diagnostics
New Errors
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".
New Warnings
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.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{}
.
Changes to Existing Diagnostics
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.
-
now has extra text added at the end, when raised during regular expression pattern compilation, marking where precisely in the pattern it occured.
-
now has extra text added at the end, when raised during regular expression pattern compilation, marking where precisely in the pattern it occured.
"\c%c" is more clearly written simply as "%s"
now has extra text added at the end, when raised during regular expression pattern compilation, marking where precisely in the pattern it occured.
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.
-
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
, andF
in lower case. Now they are all consistently upper case.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/
, andExpecting '(?flags:(?[...' in regex; marked by <-- HERE in m/%s/
.
Testing
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.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.
Platform Support
Platform-Specific Notes
- VMS
-
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
, andscalbnl
.
Selected Bug Fixes
Previously "require" in perlfunc would only treat the special built-in SV
&PL_sv_undef
as a value in%INC
as if a previousrequire
has failed, treating other undefined SVs as if the previousrequire
has succeeded. This could cause unexpected success fromrequire
eg. onlocal %INC = %INC;
. This has been fixed [GH #17428](?{...})
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
oruse re
(with appropriate options) of compiled Unicode propery wildcard subpatterns no longer has extraneous output.
Acknowledgements
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.
Reporting Bugs
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.
Give Thanks
If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you can do so by running the perlthanks
program:
perlthanks
This will send an email to the Perl 5 Porters list with your show of thanks.
SEE ALSO
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.