++ed by:

167 PAUSE users
146 non-PAUSE users.

Chris Williams
and 1 contributors


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.


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

  • arybase has been upgraded from version 0.14 to 0.15.

  • B has been upgraded from version 1.72 to 1.73.

  • B::Debug has been upgraded from version 1.25 to 1.26. NOTE: B::Debug is deprecated and may be removed from a future version of Perl.

  • B::Deparse has been upgraded from version 1.45 to 1.46.

  • Carp has been upgraded from version 1.44 to 1.45.

  • Compress::Raw::Zlib has been upgraded from version 2.075 to 2.076.

  • CPAN has been upgraded from version 2.18 to 2.20.

  • Data::Dumper has been upgraded from version 2.167_02 to 2.169. Quoting of glob names now obeys the Useqq option [perl #119831]. Attempts to set an option to undef through a combined getter/setter method are no longer mistaken for getter calls [perl #113090].

  • Devel::PPPort has been upgraded from version 3.36 to 3.37.

  • Digest::SHA has been upgraded from version 5.98 to 6.00.

  • DynaLoader has been upgraded from version 1.44 to 1.45. Its documentation now shows the use of __PACKAGE__ and direct object syntax [perl #132247].

  • experimental has been upgraded from version 0.017 to 0.019.

  • ExtUtils::CBuilder has been upgraded from version 0.280229 to 0.280230.

  • ExtUtils::Typemaps has been upgraded from version 3.36 to 3.37.

  • feature has been upgraded from version 1.49 to 1.50.

  • File::Fetch has been upgraded from version 0.54 to 0.56.

  • File::Spec has been upgraded from version 3.70 to 3.71.

  • Filter::Util::Call has been upgraded from version 1.57 to 1.58.

  • GDBM_File has been upgraded from version 1.16 to 1.17. Its documentation now explains that each and delete don't mix in hashes tied to this module [perl #117449]. It will now retry opening with an acceptable block size if asking gdbm to default the block size failed [perl #119623].

  • JSON::PP has been upgraded from version 2.94 to 2.97000.

  • Locale::Codes has been upgraded from version 3.54 to 3.55

    NOTE: Locale::Codes scheduled to be removed from core in Perl 5.30.

  • Module::CoreList has been upgraded from version 5.20171120 to 5.20171220.

  • Opcode has been upgraded from version 1.41 to 1.42.

  • overload has been upgraded from version 1.28 to 1.29.

  • Pod::Functions has been upgraded from version 1.11 to 1.12.

  • Pod::Html has been upgraded from version 1.2203 to 1.23. A title for the HTML document will now be automatically generated by default from a "NAME" section in the POD document, as it used to be before the module was rewritten to use Pod::Simple::XHTML to do the core of its job. [perl #110520]

  • POSIX has been upgraded from version 1.80 to 1.81.

  • Sys::Hostname has been upgraded from version 1.21 to 1.22.

  • Test::Simple has been upgraded from version 1.302111 to 1.302120.

  • threads has been upgraded from version 2.19 to 2.21. The documentation now better describes the problems that arise when returning values from threads, and no longer warns about creating threads in BEGIN blocks. [perl #96538]

  • threads::shared has been upgraded from version 1.57 to 1.58.

  • Time::HiRes has been upgraded from version 1.9747 to 1.9748.

  • Time::Piece has been upgraded from version 1.3202 to 1.3203.

  • Unicode::Collate has been upgraded from version 1.23 to 1.25.

  • Unicode::UCD has been upgraded from version 0.68 to 0.69.

  • warnings has been upgraded from version 1.38 to 1.39. It now includes new functions with names ending in _at_level, allowing callers to specify the exact call frame. [perl #132468]

  • XSLoader has been upgraded from version 0.28 to 0.29. Its documentation now shows the use of __PACKAGE__, and direct object syntax for example DynaLoader usage [perl #132247].


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 perlbug@perl.org.

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.


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

  • Old package separator used in string

    (W syntax) You used the old package separator, "'", in a variable named inside a double-quoted string; e.g., "In $name's house". This is equivalent to "In $name::s house". If you meant the former, put a backslash before the apostrophe ("In $name\'s house").

Changes to Existing Diagnostics

  • The warning about useless use of a concatenation operator in void context is now generated for expressions with multiple concatenations, such as $a.$b.$c, which used to mistakenly not warn. [perl #6997]

  • Warnings that a variable or subroutine "masks earlier declaration in same ...", or that an our variable has been redeclared, have been moved to a new warnings category "shadow". Previously they were in category "misc".

  • The deprecation warning from Sys::Hostname::hostname() saying that it doesn't accept arguments now states the Perl version in which the warning will be upgraded to an error. [perl #124349]

  • The perldiag entry for the error regarding a set-id script has been expanded to make clear that the error is reporting a specific security vulnerability, and to advise how to fix it.

Configuration and Compilation

  • Where an HTML version of the doucmentation is installed, the HTML documents now use relative links to refer to each other. Links from the index page of perlipc to the individual section documents are now correct. [perl #110056]

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

  • XS modules can now automatically get reentrant versions of system functions on threaded perls.

    By saying

     #define PERL_REENTRANT

    near the beginning of an XS file, it will be compiled so that whatever reentrant functions perl knows about on that system will automatically and invisibly be used instead of the plain, non-reentrant versions. For example, if you write getpwnam() in your code, on a system that has pwnam_r() all calls to the former will be translated invisibly into the latter. This does not happen except on threaded perls, as they aren't needed otherwise. Be aware that which functions have reentrant versions varies from system to system.

  • The PERL_NO_OP_PARENT build define is no longer supported, which means that perl is now always built with PERL_OP_PARENT enabled.

Selected Bug Fixes

  • pack and unpack can now handle repeat counts and lengths that exceed two billion. [perl #119367]

  • Digits past the radix point in octal and binary floating point literals now have the correct weight on platforms where a floating point significand doesn't fit into an integer type.

  • exit(0) in a UNITCHECK or CHECK block no longer permits the main program to run, and exit(0) in a BEGIN block no longer permits INIT blocks to run before exiting. [perl #2754]

  • The canonical truth value no longer has a spurious special meaning as a callable. It used to be a magic placeholder for a missing import or unimport method. It is now treated like any other string 1. [perl #126042]

  • system now reduces its arguments to strings in the parent process, so any effects of stringifying them (such as overload methods being called or warnings being emitted) are visible in the way the program expects. [perl #121105]

  • The readpipe() built-in function now checks at compile time that it has only one parameter expression, and puts it in scalar context, thus ensuring that it doesn't corrupt the stack at runtime. [perl #4574]

  • sort now performs correct reference counting when aliasing $a and $b, thus avoiding premature destruction and leakage of scalars if they are re-aliased during execution of the sort comparator. [perl #92264]

  • reverse with no operand, reversing $_ by default, is no longer in danger of corrupting the stack. [perl #132544]

  • exec, system, et al are no longer liable to have their argument lists corrupted by reentrant calls and by magic such as tied scalars. [perl #129888]

  • Perl's own malloc no longer gets confused by attempts to allocate more than a gigabyte on a 64-bit platform. [perl #119829]

  • Stacked file test operators in a sort comparator expression no longer cause a crash. [perl #129347]

  • An identity tr/// transformation on a reference is no longer mistaken for that reference for the purposes of deciding whether it can be assigned to. [perl #130578]

  • Lengthy hexadecimal, octal, or binary floating point literals no longer cause undefined behaviour when parsing digits that are of such low significance that they can't affect the floating point value. [perl #131894]

  • open $$scalarref... and similar invocations no longer leak the file handle. [perl #115814]

  • Some convoluted kinds of regexp no longer cause an arithmetic overflow when compiled. [perl #131893]

  • The default typemap, by avoiding newGVgen, now no longer leaks when XSUBs return file handles (PerlIO * or FILE *). [perl #115814]

  • Creating a BEGIN block as an XS subroutine with a prototype no longer crashes because of the early freeing of the subroutine.


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 https://rt.perl.org/ . There may also be information at http://www.perl.org/ , 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 perlbug@perl.org 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.