NAME
perl5277delta - what is new for perl v5.27.7
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
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
anddelete
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 exampleDynaLoader
usage [perl #132247].
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 perlbug@perl.org.
Additionally, the following selected changes have been made:
perlapi
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.
perlop
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]
perlsyn
The means to disambiguate between code blocks and hash constructors, already documented in perlref, are now documented in perlsyn too. [perl #130958]
perlfunc
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.
perluniprops
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.
perlobj
The documentation about DESTROY
methods has been corrected, updated, and revised, especially in regard to how they interact with exceptions. [perl #122753]
perlsec
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.
perlembed
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]
.
perldebguts
The description of the conditions under which DB::sub()
will be called has been clarified. [perl #131672]
perlintern
The internal functions newXS_len_flags()
and newATTRSUB_x()
are now documented.
perlgit
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
Can't "goto" into a "given" block
(F) A "goto" statement was executed to jump into the middle of a
given
block. You can't get there from here. See "goto" in perlfunc.
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
- 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 writegetpwnam()
in your code, on a system that haspwnam_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 withPERL_OP_PARENT
enabled.
Selected Bug Fixes
pack
andunpack
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 aUNITCHECK
orCHECK
block no longer permits the main program to run, andexit(0)
in aBEGIN
block no longer permitsINIT
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
orunimport
method. It is now treated like any other string1
. [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 *
orFILE *
). [perl #115814]Creating a
BEGIN
block as an XS subroutine with a prototype no longer crashes because of the early freeing of the subroutine.
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 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:
perlthanks
This will send an email to the Perl 5 Porters list with your show of thanks.
SEE ALSO
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.