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


Annotate this POD


Source   Latest Release: perl-5.28.0-RC1


perldelta - what is new for perl v5.27.7


This document describes differences between the 5.27.6 release and the 5.27.7 release.

If you are upgrading from an earlier release such as 5.27.5, first read perl5276delta, which describes differences between 5.27.5 and 5.27.6.

Core Enhancements ^

The sprintf %j format size modifier is now available with pre-C99 compilers

The actual size used depends on the platform, so remains unportable.

Incompatible Changes ^

Smartmatch and switch simplification

The experimental smart match operator (~~) and switch (given/when) constructs have been drastically simplified, in a way that will require most uses of them to be updated.

The smart match operator no longer has its large table of matching rules. Instead there is just one rule: the right-hand operand must overload the operator. Overloaded objects now bear the entire responsibility for determining what kind of match to perform. The operator also no longer implicitly enreferences certain kinds of operand (such as arrays); instead the operands get regular scalar context.

The when construct no longer has its complicated rules about how to treat its argument. Instead it has been split into two distinct constructs. whereso always uses the argument as a truth value, and whereis always smart matches. Like the smart match operator, these also no longer implicitly enreference certain kinds of argument, instead supplying regular scalar context.

The default construct, which was misleading and essentially useless, has been removed.

The given construct also no longer implicitly enreferences certain kinds of arguments, instead supplying regular scalar context. In this case, the implicit enreferencement was undocumented anyway.

Flow control of switch constructs has been unified with loop flow control. The concept of "topicalizer" (referring to a given block or a foreach loop acting on $_) has been abolished. A given construct now counts as a one-iteration loop, so responds to the loop control keywords. The break keyword has consequently been removed, in favour of using next or last to exit a given. The implicit jump at the end of a when block is now a next, and so is applicable not just to given and some kinds of foreach but to any loop.

It is known that these changes will break some users of autodie, the documentation of which has long recommended some uses of these experimental features that are not portable across these changes.

Over-radix digits in floating point literals

Octal and binary floating point literals used to permit any hexadecimal digit to appear after the radix point. The digits are now restricted to those appropriate for the radix, as digits before the radix point always were.

Return type of unpackstring()

The return types of the C API functions unpackstring() and unpack_str() have changed from I32 to SSize_t, in order to accommodate datasets of more than two billion items.

Deprecations ^

Assignment to $[ will be fatal in Perl 5.30

Assigning a non-zero value to $[ has been deprecated since Perl 5.12, but was never given a deadline for removal. This has now been scheduled for Perl 5.30.

hostname() won't accept arguments in Perl 5.32

Passing arguments to Sys::Hostname::hostname() was already deprecated, but didn't have a removal date. This has now been scheduled for Perl 5.32. [perl #124349]

Module removals

Locale::Codes and its associated Country, Currency and Language modules

Modules and Pragmata ^

Updated Modules and Pragmata

Documentation ^

Changes to Existing Documentation

We have attempted to update the documentation to reflect the changes listed in this document. If you find any we have missed, send email to

Additionally, the following selected changes have been made:


The API functions perl_parse(), perl_run(), and perl_destruct() are now documented comprehensively, where previously the only documentation was a reference to the perlembed tutorial.

The documentation of newGIVENOP() has been belatedly updated to account for the removal of lexical $_.

The API functions newCONSTSUB() and newCONSTSUB_flags() are documented much more comprehensively than before.


The general explanation of operator precedence and associativity has been corrected and clarified. [perl #127391]

The documentation for the \ referencing operator now explains the unusual context that it supplies to its operand. [perl #131061]


The means to disambiguate between code blocks and hash constructors, already documented in perlref, are now documented in perlsyn too. [perl #130958]


There is now a note that warnings generated by built-in functions are documented in perldiag and warnings. [perl #116080]

The documentation for the exists operator no longer says that autovivification behaviour "may be fixed in a future release". We've determined that we're not going to change the default behaviour. [perl #127712]

A couple of small details in the documentation for the bless operator have been clarified. [perl #124428]

The description of @INC hooks in the documentation for require has been corrected to say that filter subroutines receive a useless first argument. [perl #115754]

The documentation of ref has been rewritten for clarity.

The documentation of use now explains what syntactically qualifies as a version number for its module version checking feature.

The documentation of warn has been updated to reflect that since Perl 5.14 it has treated complex exception objects in a manner equivalent to die. [perl #121372]

The documentation of die and warn has been revised for clarity.


For each binary table or property, the documentation now includes which characters in the range \x00-\xFF it matches, as well as a list of the first few ranges of code points matched above that.


The documentation about DESTROY methods has been corrected, updated, and revised, especially in regard to how they interact with exceptions. [perl #122753]


The documentation about set-id scripts has been updated and revised. [perl #74142]

A section about using sudo to run Perl scripts has been added.


The examples in perlembed have been made more portable in the way they exit, and the example that gets an exit code from the embedded Perl interpreter now gets it from the right place. The examples that pass a constructed argv to Perl now show the mandatory null argv[argc].


The description of the conditions under which DB::sub() will be called has been clarified. [perl #131672]


The internal functions newXS_len_flags() and newATTRSUB_x() are now documented.


The precise rules for identifying smoke-me branches are now stated.

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

Changes to Existing Diagnostics

Configuration and Compilation ^

Platform Support ^

Platform-Specific Notes


We now set $Config{libpth} correctly for 64-bit builds using Visual C++ versions earlier than 14.1.

Internal Changes ^

Selected Bug Fixes ^

Acknowledgements ^

Perl 5.27.7 represents approximately 4 weeks of development since Perl 5.27.6 and contains approximately 21,000 lines of changes across 580 files from 21 authors.

Excluding auto-generated files, documentation and release tools, there were approximately 12,000 lines of changes to 360 .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.27.7:

Aaron Crane, Ævar Arnfjörð Bjarmason, Alberto Simões, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari Mannsåker, David Mitchell, Father Chrysostomos, James E Keenan, Jarkko Hietaniemi, J. Nick Koston, Karen Etheridge, Karl Williamson, Marco Fontani, Nicolas R., Sawyer X, Steve Hay, Sullivan Beck, 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 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 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.

syntax highlighting: