++ed by:

180 PAUSE users
177 non-PAUSE users.

Renee Baecker
and 1 contributors


perldelta - 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.

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 return undef.

  • 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.


Changes to Existing Documentation

Additionally, the following selected changes have been made:


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

New Warnings

Changes to Existing Diagnostics


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


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.

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 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]

  • (?{...}) 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.


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:


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.