NAME

DESCRIPTION

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

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

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

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]

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]

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

New Warnings

(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

Windows

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]

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

As a valued partner and proud supporter of MetaCPAN, StickerYou is
happy to offer a 10% discount on all Custom Stickers,
Business Labels, Roll Labels,
Vinyl Lettering or Custom Decals. StickerYou.com
is your one-stop shop to make your business stick.
Use code METACPAN10 at checkout to apply your discount.