You are viewing the version of this documentation from Perl 5.14.0. View the latest version



perl5139delta - what is new for perl v5.13.9


This document describes differences between the 5.13.8 release and the 5.13.9 release.

If you are upgrading from an earlier release such as 5.13.7, first read perl5138delta, which describes differences between 5.13.7 and 5.13.8.

Core Enhancements

New regular expression modifier /a

The /a regular expression modifier restricts \s to match precisely the five characters [ \f\n\r\t], \d to match precisely the 10 characters [0-9], \w to match precisely the 63 characters [A-Za-z0-9_], and the Posix ([[:posix:]]) character classes to match only the appropriate ASCII characters. The complements, of course, match everything but; and \b and \B are correspondingly affected. Otherwise, /a behaves like the /u modifier, in that case-insensitive matching uses Unicode semantics; for example, "k" will match the Unicode \N{KELVIN SIGN} under /i matching, and code points in the Latin1 range, above ASCII will have Unicode semantics when it comes to case-insensitive matching. Like its cousins (/u, /l, and /d), and in spite of the terminology, /a in 5.14 will not actually be able to be used as a suffix at the end of a regular expression (this restriction is planned to be lifted in 5.16). It must occur either as an infix modifier, such as (?a:...) or ((?a)..., or it can be turned on within the lexical scope of use re '/a'. Turning on /a turns off the other "character set" modifiers.

Any unsigned value can be encoded as a character

With this release, Perl is adopting a model that any unsigned value can be treated as a code point and encoded internally (as utf8) without warnings -- not just the code points that are legal in Unicode. However, unless utf8 warnings have been explicitly lexically turned off, outputting or performing a Unicode-defined operation (such as upper-casing) on such a code point will generate a warning. Attempting to input these using strict rules (such as with the :encoding('UTF-8') layer) will continue to fail. Prior to this release the handling was very inconsistent, and incorrect in places. Also, the Unicode non-characters, some of which previously were erroneously considered illegal in places by Perl, contrary to the Unicode standard, are now always legal internally. But inputting or outputting them will work the same as for the non-legal Unicode code points, as the Unicode standard says they are illegal for "open interchange".

Regular expression debugging output improvement

Regular expression debugging output (turned on by use re 'debug';) now uses hexadecimal when escaping non-ASCII characters, instead of octal.


Restrict \p{IsUserDefined} to In\w+ and Is\w+

In "User-Defined Character Properties" in perlunicode, it says you can create custom properties by defining subroutines whose names begin with "In" or "Is". However, perl doesn't actually enforce that naming restriction, so \p{foo::bar} will call foo::Bar() if it exists.

This commit finally enforces this convention. Note that this broke a number of existing tests for properties, since they didn't always use an Is/In prefix.

Incompatible Changes

All objects are destroyed

It used to be possible to prevent a destructor from being called during global destruction by artificially increasing the reference count of an object.

Now such objects will will be destroyed, as a result of a bug fix [perl #81230].

This has the potential to break some XS modules. (In fact, it break some. See "Known Problems", below.)

Modules and Pragmata

New Modules and Pragmata

Updated Modules and Pragmata


Changes to Existing Documentation

All documentation




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

Changes to Existing Diagnostics

Utility Changes




Platform Support

Discontinued Platforms

Apollo DomainOS

The last vestiges of support for this platform have been excised from the Perl distribution. It was officially discontinued in version 5.12.0. It had not worked for years before that.

MacOS Classic

The last vestiges of support for this platform have been excised from the Perl distribution. It was officially discontinued in an earlier version.

Platform-Specific Notes

  • Updated MakeMaker to build man pages on cygwin.

  • Improved rebase behaviour

    If a dll is updated on cygwin reuse the old imagebase address. This solves most rebase errors, esp when updating on core dll's. See for more information.

  • Support the standard cyg dll prefix, which is e.g. needed for FFI's.

  • Updated build hints file


DTrace is now supported on Solaris. There used to be build failures, but these have been fixed [perl #73630].

Internal Changes

Selected Bug Fixes

Known Problems


Perl 5.13.9 represents approximately one month of development since Perl 5.13.8 and contains approximately 48000 lines of changes across 809 files from 35 authors and committers:

Abigail, Ævar Arnfjörð Bjarmason, brian d foy, Chris 'BinGOs' Williams, Craig A. Berry, David Golden, David Leadbeater, David Mitchell, Father Chrysostomos, Florian Ragwitz, Gerard Goossen, H.Merijn Brand, Jan Dubois, Jerry D. Hedden, Jesse Vincent, John Peacock, Karl Williamson, Leon Timmermans, Michael Parker, Michael Stevens, Nicholas Clark, Nuno Carvalho, Paul "LeoNerd" Evans, Peter J. Acklam, Peter Martini, Rainer Tammer, Reini Urban, Renee Baecker, Ricardo Signes, Robin Barker, Tony Cook, Vadim Konovalov, Vincent Pit, Zefram, and Zsbán Ambrus.

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.

Reporting Bugs

If you find what you think is a bug, you might check the articles recently posted to the comp.lang.perl.misc newsgroup and the perl bug database at . There may also be information at , the Perl Home Page.

If you believe you have an unreported bug, please run the perlbug program included with your release. Be sure to trim your bug down to a tiny but sufficient test case. Your bug report, along with the output of perl -V, will be sent off to to be analysed by the Perl porting team.

If the bug you are reporting has security implications, which make it inappropriate to send to a publicly archived mailing list, then please send it to This points to a closed subscription unarchived mailing list, which includes all the core committers, who be able to help assess the impact of issues, figure out a resolution, and help co-ordinate the release of patches to mitigate or fix the problem across all platforms on which Perl is supported. Please only use this address for security issues in the Perl core, not for modules independently distributed on CPAN.


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.