View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
Tony Cook > perl > perldelta


Annotate this POD


Source   Latest Release: perl-5.28.0-RC3


perldelta - what is new for perl v5.19.9


This document describes differences between the 5.19.8 release and the 5.19.9 release.

If you are upgrading from an earlier release such as 5.19.7, first read perl5198delta, which describes differences between 5.19.7 and 5.19.8.

Core Enhancements ^

UTF-8 locales now supported better under use locale

A UTF-8 locale is one in which the character set is Unicode and the encoding is UTF-8. Now, the POSIX LC_CTYPE category operations under such a locale (within the scope of use locale), which include case changing (like lc(), "\U"), and character classification (\w, \D, qr/[[:punct:]]/ work just as if not under locale, except taint rules are followed. Prior to this, Perl only handled single-byte locales. This resolves [perl #56820].

use locale now compiles on systems without locale ability

Previously doing this caused the program to not compile. Within its scope the program behaves as if in the "C" locale. Thus programs written for platforms that support locales can run on locale-less platforms without change. Attempts to change the locale away from the "C" locale will, of course, fail.


On some operating systems Perl can be compiled in such a way that any attempt to modify string buffers shared by multiple SVs will crash. This way XS authors can test that their modules handle copy-on-write scalars correctly. See "Copy on Write" in perlguts for detail.

This feature was actually added in 5.19.8, but was unintentionally omitted from its delta document.

-DL runtime option now added for tracing locale setting

This is designed for Perl core developers to aid in field debugging bugs regarding locales.

Subroutine signatures

Declarative syntax to unwrap argument list into lexical variables. sub foo ($a,$b) {...} checks the number of arguments and puts the arguments into lexical variables. Signatures are not equivalent to the existing idiom of sub foo { my($a,$b) = @_; ... }. Signatures are only available by enabling a non-default feature, and generate warnings about being experimental. The syntactic clash with prototypes is managed by disabling the short prototype syntax when signatures are enabled.

See "Signatures" in perlsub for details.

More locale initialization fallback options

If there was an error with locales during Perl start-up, it immediately gave up and tried to use the "C" locale. Now it first tries using other locales given by the environment variables, as detailed in "ENVIRONMENT" in perllocale. For example, if LC_ALL and LANG are both set, and using the LC_ALL locale fails, Perl will now try the LANG locale, and only if that fails, will it fall back to "C". On Windows machines, Perl will try, ahead of using "C", the system default locale if all the locales given by environment variables fail.

Incompatible Changes ^

Tainting happens under more circumstances; now conforms to documentation

This affects regular expression matching and changing the case of a string (lc, "\U", etc.) within the scope of use locale. The result is now tainted based on the operation, no matter what the contents of the string were, as the documentation (perlsec, "SECURITY" in perllocale) indicates it should. Previously, for the case change operation, if the string contained no characters whose case change could be affected by the locale, the result would not be tainted. For example, the result of uc() on an empty string or one containing only above-Latin1 code points is now tainted, and wasn't before. This leads to more consistent tainting results. Regular expression patterns taint their non-binary results (like $&, $2) if and only if the pattern contains elements whose matching depends on the current (potentially tainted) locale. Like the case changing functions, the actual contents of the string being matched now do not matter, whereas formerly it did. For example, if the pattern contains a \w, the results will be tainted even if the match did not have to use that portion of the pattern to succeed or fail, because what a \w matches depends on locale. However, for example, a . in a pattern will not enable tainting, because the dot matches any single character, and what the current locale is doesn't change in any way what matches and what doesn't.

Quote-like escape changes

The character after \c in a double-quoted string ("..." or qq(...)) or regular expression must now be a printable character and may not be {.

A literal { after \B or \b is now fatal.

These were deprecated in perl v5.14.

Deprecations ^

Performance Enhancements ^

Modules and Pragmata ^

Updated Modules and Pragmata

Documentation ^

Changes to Existing Documentation



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

New Warnings

Configuration and Compilation ^

Platform Support ^

New Platforms


Perl can now be built for Android, either natively or through cross-compilation, for all three currently available architectures (ARM, MIPS, and x86), on a wide range of versions.

Platform-Specific Notes


Skip access checks on remotes in opendir(). [perl #121002]


Fixed a build error in cygwin.c on Cygwin 1.7.28.

Tests now handle the errors that occur when cygserver isn't running.

Internal Changes ^

Regexp Engine Changes That Affect The Pluggable Regex Engine Interface

Many flags that used to be exposed via regexp.h and used to populate the extflags member of struct regexp have been removed. These fields were technically private to Perl's own regexp engine and should not have been exposed there in the first place.

The affected flags are:


As well as the follow flag masks:


All have been renamed to PREGf_ equivalents and moved to regcomp.h.

The behavior previously achieved by setting one or more of the RXf_ANCH_ flags (via the RXf_ANCH mask) have now been replaced by a *single* flag bit in extflags:


pluggable regex engines which previously used to set these flags should now set this flag ALONE.

Selected Bug Fixes ^

Known Problems ^

Errata From Previous Releases ^


This pod file contains a statement saying that RXf_SPLIT (and its alias RXf_PMf_SPLIT) and RXf_SKIPWHITE were no longer used and #defined to 0. This was the case for a short period, but the change was reverted before Perl 5.18 was released. As such it was not true in Perl 5.18.x, and is also not true now. Both flags continue to be used. The incorrect entry has been removed from perl5180delta.pod in this release.

Acknowledgements ^

Perl 5.19.9 represents approximately 4 weeks of development since Perl 5.19.8 and contains approximately 47,000 lines of changes across 610 files from 32 authors.

Excluding auto-generated files, documentation and release tools, there were approximately 34,000 lines of changes to 420 .pm, .t, .c and .h files.

Perl continues to flourish into its third decade thanks to a vibrant community of users and developers. The following people are known to have contributed the improvements that became Perl 5.19.9:

Abigail, Alan Haggai Alavi, Brad Gilbert, Brian Fraser, Chris 'BinGOs' Williams, Craig A. Berry, Daniel Dragan, David Golden, David Mitchell, Father Chrysostomos, Gavin Shelley, H.Merijn Brand, Hauke D, James E Keenan, Jerry D. Hedden, Jess Robinson, John Peacock, Karl Williamson, Matthew Horsfall, Neil Williams, Peter Martini, Piotr Roszatycki, Rafael Garcia-Suarez, Reini Urban, Ricardo Signes, Steffen Müller, Steve Hay, Sullivan Beck, Tom Hukins, Tony Cook, Yves Orton, Zefram.

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

syntax highlighting: