PERL5200DELTA(1) Perl Programmers Reference Guide PERL5200DELTA(1)
NAME
perl5200delta - what is new for perl v5.20.0
DESCRIPTION
This document describes differences between the 5.18.0 release and the
5.20.0 release.
If you are upgrading from an earlier release such as 5.16.0, first read
perl5180delta, which describes differences between 5.16.0 and 5.18.0.
Core Enhancements
Experimental 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 id-
iom of "sub foo { my($a,$b) = @_; ... }". Signatures are only available by
enabling a non-default feature, and generate warnings about being experi-
mental. The syntactic clash with prototypes is managed by disabling the
short prototype syntax when signatures are enabled.
See "Signatures" in perlsub for details.
"sub"s now take a "prototype" attribute
When declaring or defining a "sub", the prototype can now be specified in-
side of a "prototype" attribute instead of in parens following the name.
For example, "sub foo($$){}" could be rewritten as "sub foo : proto-
type($$){}".
More consistent prototype parsing
Multiple semicolons in subroutine prototypes have long been tolerated and
treated as a single semicolon. There was one case where this did not hap-
pen. A subroutine whose prototype begins with "*" or ";*" can affect
whether a bareword is considered a method name or sub call. This now ap-
plies also to ";;;*".
Whitespace has long been allowed inside subroutine prototypes, so "sub( $ $
)" is equivalent to sub($$), but until now it was stripped when the subrou-
tine was parsed. Hence, whitespace was not allowed in prototypes set by
"Scalar::Util::set_prototype". Now it is permitted, and the parser no
longer strips whitespace. This means "prototype &mysub" returns the origi-
nal prototype, whitespace and all.
"rand" now uses a consistent random number generator
Previously perl would use a platform specific random number generator,
varying between the libc rand(), random() or drand48().
This meant that the quality of perl's random numbers would vary from plat-
form to platform, from the 15 bits of rand() on Windows to 48-bits on POSIX
platforms such as Linux with drand48().
Perl now uses its own internal drand48() implementation on all platforms.
This does not make perl's "rand" cryptographically secure. [perl #115928]
New slice syntax
The new %hash{...} and %array[...] syntax returns a list of key/value (or
index/value) pairs. See "Key/Value Hash Slices" in perldata.
Experimental Postfix Dereferencing
When the "postderef" feature is in effect, the following syntactical equiv-
alencies are set up:
$sref->$*; # same as ${ $sref } # interpolates
$aref->@*; # same as @{ $aref } # interpolates
$href->%*; # same as %{ $href }
$cref->&*; # same as &{ $cref }
$gref->**; # same as *{ $gref }
$aref->$#*; # same as $#{ $aref }
$gref->*{ $slot }; # same as *{ $gref }{ $slot }
$aref->@[ ... ]; # same as @$aref[ ... ] # interpolates
$href->@{ ... }; # same as @$href{ ... } # interpolates
$aref->%[ ... ]; # same as %$aref[ ... ]
$href->%{ ... }; # same as %$href{ ... }
Those marked as interpolating only interpolate if the associated "post-
deref_qq" feature is also enabled. This feature is experimental and will
trigger "experimental::postderef"-category warnings when used, unless they
are suppressed.
For more information, consult the Postfix Dereference Syntax section of
perlref.
Unicode 6.3 now supported
Perl now supports and is shipped with Unicode 6.3 (though Perl may be re-
compiled with any previous Unicode release as well). A detailed list of
Unicode 6.3 changes is at .
New "\p{Unicode}" regular expression pattern property
This is a synonym for "\p{Any}" and matches the set of Unicode-defined code
points 0 - 0x10FFFF.
Better 64-bit support
On 64-bit platforms, the internal array functions now use 64-bit offsets,
allowing Perl arrays to hold more than 2**31 elements, if you have the mem-
ory available.
The regular expression engine now supports strings longer than 2**31 char-
acters. [perl #112790, #116907]
The functions PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt and Per-
lIO_set_ptrcnt now have SSize_t, rather than int, return values and parame-
ters.
"use locale" now works on UTF-8 locales
Until this release, only single-byte locales, such as the ISO 8859 series
were supported. Now, the increasingly common multi-byte UTF-8 locales are
also supported. A UTF-8 locale is one in which the character set is Uni-
code and the encoding is UTF-8. The POSIX "LC_CTYPE" category operations
(case changing (like lc(), "\U"), and character classification ("\w", "\D",
"qr/[[:punct:]]/")) under such a locale work just as if not under locale,
but instead as if under "use feature 'unicode_strings'", except taint rules
are followed. Sorting remains by code point order in this release. [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.
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.
"-DL" runtime option now added for tracing locale setting
This is designed for Perl core developers to aid in field debugging bugs
regarding locales.
-F now implies -a and -a implies -n
Previously -F without -a was a no-op, and -a without -n or -p was a no-op,
with this change, if you supply -F then both -a and -n are implied and if
you supply -a then -n is implied.
You can still use -p for its extra behaviour. [perl #116190]
$a and $b warnings exemption
The special variables $a and $b, used in "sort", are now exempt from "used
once" warnings, even where "sort" is not used. This makes it easier for
CPAN modules to provide functions using $a and $b for similar purposes.
[perl #120462]
Security
Avoid possible read of free()d memory during parsing
It was possible that free()d memory could be read during parsing in the un-
usual circumstance of the Perl program ending with a heredoc and the last
line of the file on disk having no terminating newline character. This has
now been fixed.
Incompatible Changes
"do" can no longer be used to call subroutines
The "do SUBROUTINE(LIST)" form has resulted in a deprecation warning since
Perl v5.0.0, and is now a syntax error.
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.0.
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 expres-
sion patterns taint their non-binary results (like $&, $2) if and only if
the pattern contains elements whose matching depends on the current (poten-
tially tainted) locale. Like the case changing functions, the actual con-
tents 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. How-
ever, 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.
"\p{}", "\P{}" matching has changed for non-Unicode code points.
"\p{}" and "\P{}" are defined by Unicode only on Unicode-defined code
points ("U+0000" through "U+10FFFF"). Their behavior on matching these le-
gal Unicode code points is unchanged, but there are changes for code points
0x110000 and above. Previously, Perl treated the result of matching "\p{}"
and "\P{}" against these as "undef", which translates into "false". For
"\P{}", this was then complemented into "true". A warning was supposed to
be raised when this happened. However, various optimizations could prevent
the warning, and the results were often counter-intuitive, with both a
match and its seeming complement being false. Now all non-Unicode code
points are treated as typical unassigned Unicode code points. This gener-
ally is more Do-What-I-Mean. A warning is raised only if the results are
arguably different from a strict Unicode approach, and from what Perl used
to do. Code that needs to be strictly Unicode compliant can make this
warning fatal, and then Perl always raises the warning.
Details are in "Beyond Unicode code points" in perlunicode.
"\p{All}" has been expanded to match all possible code points
The Perl-defined regular expression pattern element "\p{All}", unused on
CPAN, used to match just the Unicode code points; now it matches all possi-
ble code points; that is, it is equivalent to "qr/./s". Thus "\p{All}" is
no longer synonymous with "\p{Any}", which continues to match just the Uni-
code code points, as Unicode says it should.
Data::Dumper's output may change
Depending on the data structures dumped and the settings set for
Data::Dumper, the dumped output may have changed from previous versions.
If you have tests that depend on the exact output of Data::Dumper, they may
fail.
To avoid this problem in your code, test against the data structure from
evaluating the dumped structure, instead of the dump itself.
Locale decimal point character no longer leaks outside of "use locale" scope
This is actually a bug fix, but some code has come to rely on the bug being
present, so this change is listed here. The current locale that the pro-
gram is running under is not supposed to be visible to Perl code except
within the scope of a "use locale". However, until now under certain cir-
cumstances, the character used for a decimal point (often a comma) leaked
outside the scope. If your code is affected by this change, simply add a
"use locale".
Assignments of Windows sockets error codes to $! now prefer errno.h values
over WSAGetLastError() values
In previous versions of Perl, Windows sockets error codes as returned by
WSAGetLastError() were assigned to $!, and some constants such as
ECONNABORTED, not in errno.h in VC++ (or the various Windows ports of gcc)
were defined to corresponding WSAE* values to allow $! to be tested against
the E* constants exported by Errno and POSIX.
This worked well until VC++ 2010 and later, which introduced new E* con-
stants with values > 100 into errno.h, including some being (re)defined by
perl to WSAE* values. That caused problems when linking XS code against
other libraries which used the original definitions of errno.h constants.
To avoid this incompatibility, perl now maps WSAE* error codes to E* values
where possible, and assigns those values to $!. The E* constants exported
by Errno and POSIX are updated to match so that testing $! against them,
wherever previously possible, will continue to work as expected, and all E*
constants found in errno.h are now exported from those modules with their
original errno.h values.
In order to avoid breakage in existing Perl code which assigns WSAE* values
to $!, perl now intercepts the assignment and performs the same mapping to
E* values as it uses internally when assigning to $! itself.
However, one backwards-incompatibility remains: existing Perl code which
compares $! against the numeric values of the WSAE* error codes that were
previously assigned to $! will now be broken in those cases where a corre-
sponding E* value has been assigned instead. This is only an issue for
those E* values < 100, which were always exported from Errno and POSIX with
their original errno.h values, and therefore could not be used for WSAE*
error code tests (e.g. WSAEINVAL is 10022, but the corresponding EINVAL is
22). (E* values > 100, if present, were redefined to WSAE* values anyway,
so compatibility can be achieved by using the E* constants, which will work
both before and after this change, albeit using different numeric values
under the hood.)
Functions "PerlIO_vsprintf" and "PerlIO_sprintf" have been removed
These two functions, undocumented, unused in CPAN, and problematic, have
been removed.
Deprecations
The "/\C/" character class
The "/\C/" regular expression character class is deprecated. From perl 5.22
onwards it will generate a warning, and from perl 5.24 onwards it will be a
regular expression compiler error. If you need to examine the individual
bytes that make up a UTF8-encoded character, then use utf8::encode() on the
string (or a copy) first.
Literal control characters in variable names
This deprecation affects things like $\cT, where \cT is a literal control
(such as a "NAK" or "NEGATIVE ACKNOWLEDGE" character) in the source code.
Surprisingly, it appears that originally this was intended as the canonical
way of accessing variables like $^T, with the caret form only being added
as an alternative.
The literal control form is being deprecated for two main reasons. It has
what are likely unfixable bugs, such as $\cI not working as an alias for
$^I, and their usage not being portable to non-ASCII platforms: While $^T
will work everywhere, \cT is whitespace in EBCDIC. [perl #119123]
References to non-integers and non-positive integers in $/
Setting $/ to a reference to zero or a reference to a negative integer is
now deprecated, and will behave exactly as though it was set to "undef".
If you want slurp behavior set $/ to "undef" explicitly.
Setting $/ to a reference to a non integer is now forbidden and will throw
an error. Perl has never documented what would happen in this context and
while it used to behave the same as setting $/ to the address of the refer-
ences in future it may behave differently, so we have forbidden this usage.
Character matching routines in POSIX
Use of any of these functions in the "POSIX" module is now deprecated:
"isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower", "is-
print", "ispunct", "isspace", "isupper", and "isxdigit". The functions are
buggy and don't work on UTF-8 encoded strings. See their entries in POSIX
for more information.
A warning is raised on the first call to any of them from each place in the
code that they are called. (Hence a repeated statement in a loop will
raise just the one warning.)
Interpreter-based threads are now discouraged
The "interpreter-based threads" provided by Perl are not the fast, light-
weight system for multitasking that one might expect or hope for. Threads
are implemented in a way that make them easy to misuse. Few people know
how to use them correctly or will be able to provide help.
The use of interpreter-based threads in perl is officially discouraged.
Module removals
The following modules will be removed from the core distribution in a fu-
ture release, and will at that time need to be installed from CPAN. Dis-
tributions on CPAN which require these modules will need to list them as
prerequisites.
The core versions of these modules will now issue "deprecated"-category
warnings to alert you to this fact. To silence these deprecation warnings,
install the modules in question from CPAN.
Note that the planned removal of these modules from core does not reflect a
judgement about the quality of the code and should not be taken as a sug-
gestion that their use be halted. Their disinclusion from core primarily
hinges on their necessity to bootstrapping a fully functional, CPAN-capable
Perl installation, not on concerns over their design.
CGI and its associated CGI:: packages
inc::latest
Package::Constants
Module::Build and its associated Module::Build:: packages
Utility removals
The following utilities will be removed from the core distribution in a fu-
ture release, and will at that time need to be installed from CPAN.
find2perl
s2p
a2p
Performance Enhancements
* Perl has a new copy-on-write mechanism that avoids the need to copy the
internal string buffer when assigning from one scalar to another. This
makes copying large strings appear much faster. Modifying one of the
two (or more) strings after an assignment will force a copy internally.
This makes it unnecessary to pass strings by reference for efficiency.
This feature was already available in 5.18.0, but wasn't enabled by de-
fault. It is the default now, and so you no longer need build perl with
the Configure argument:
-Accflags=-DPERL_NEW_COPY_ON_WRITE
It can be disabled (for now) in a perl build with:
-Accflags=-DPERL_NO_COW
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.
* Perl has an optimizer for regular expression patterns. It analyzes the
pattern to find things such as the minimum length a string has to be to
match, etc. It now better handles code points that are above the
Latin1 range.
* Executing a regex that contains the "^" anchor (or its variant under
the "/m" flag) has been made much faster in several situations.
* Precomputed hash values are now used in more places during method
lookup.
* Constant hash key lookups ($hash{key} as opposed to $hash{$key}) have
long had the internal hash value computed at compile time, to speed up
lookup. This optimisation has only now been applied to hash slices as
well.
* Combined "and" and "or" operators in void context, like those generated
for "unless ($a && $b)" and "if ($a || b)" now short circuit directly
to the end of the statement. [perl #120128]
* In certain situations, when "return" is the last statement in a subrou-
tine's main scope, it will be optimized out. This means code like:
sub baz { return $cat; }
will now behave like:
sub baz { $cat; }
which is notably faster.
[perl #120765]
* Code like:
my $x; # or @x, %x
my $y;
is now optimized to:
my ($x, $y);
In combination with the padrange optimization introduced in v5.18.0,
this means longer uninitialized my variable statements are also opti-
mized, so:
my $x; my @y; my %z;
becomes:
my ($x, @y, %z);
[perl #121077]
* The creation of certain sorts of lists, including array and hash
slices, is now faster.
* The optimisation for arrays indexed with a small constant integer is
now applied for integers in the range -128..127, rather than 0..255.
This should speed up Perl code using expressions like $x[-1], at the
expense of (presumably much rarer) code using expressions like $x[200].
* The first iteration over a large hash (using "keys" or "each") is now
faster. This is achieved by preallocating the hash's internal iterator
state, rather than lazily creating it when the hash is first iterated.
(For small hashes, the iterator is still created only when first
needed. The assumption is that small hashes are more likely to be used
as objects, and therefore never allocated. For large hashes, that's
less likely to be true, and the cost of allocating the iterator is
swamped by the cost of allocating space for the hash itself.)
* When doing a global regex match on a string that came from the "read-
line" or "<>" operator, the data is no longer copied unnecessarily.
[perl #121259]
* Dereferencing (as in "$obj->[0]" or "$obj->{k}") is now faster when
$obj is an instance of a class that has overloaded methods, but doesn't
overload any of the dereferencing methods "@{}", "%{}", and so on.
* Perl's optimiser no longer skips optimising code that follows certain
"eval {}" expressions (including those with an apparent infinite loop).
* The implementation now does a better job of avoiding meaningless work
at runtime. Internal effect-free "null" operations (created as a
side-effect of parsing Perl programs) are normally deleted during com-
pilation. That deletion is now applied in some situations that weren't
previously handled.
* Perl now does less disk I/O when dealing with Unicode properties that
cover up to three ranges of consecutive code points.
Modules and Pragmata
New Modules and Pragmata
* experimental 0.007 has been added to the Perl core.
* IO::Socket::IP 0.29 has been added to the Perl core.
Updated Modules and Pragmata
* Archive::Tar has been upgraded from version 1.90 to 1.96.
* arybase has been upgraded from version 0.06 to 0.07.
* Attribute::Handlers has been upgraded from version 0.94 to 0.96.
* attributes has been upgraded from version 0.21 to 0.22.
* autodie has been upgraded from version 2.13 to 2.23.
* AutoLoader has been upgraded from version 5.73 to 5.74.
* autouse has been upgraded from version 1.07 to 1.08.
* B has been upgraded from version 1.42 to 1.48.
* B::Concise has been upgraded from version 0.95 to 0.992.
* B::Debug has been upgraded from version 1.18 to 1.19.
* B::Deparse has been upgraded from version 1.20 to 1.26.
* base has been upgraded from version 2.18 to 2.22.
* Benchmark has been upgraded from version 1.15 to 1.18.
* bignum has been upgraded from version 0.33 to 0.37.
* Carp has been upgraded from version 1.29 to 1.3301.
* CGI has been upgraded from version 3.63 to 3.65. NOTE: CGI is depre-
cated and may be removed from a future version of Perl.
* charnames has been upgraded from version 1.36 to 1.40.
* Class::Struct has been upgraded from version 0.64 to 0.65.
* Compress::Raw::Bzip2 has been upgraded from version 2.060 to 2.064.
* Compress::Raw::Zlib has been upgraded from version 2.060 to 2.065.
* Config::Perl::V has been upgraded from version 0.17 to 0.20.
* constant has been upgraded from version 1.27 to 1.31.
* CPAN has been upgraded from version 2.00 to 2.05.
* CPAN::Meta has been upgraded from version 2.120921 to 2.140640.
* CPAN::Meta::Requirements has been upgraded from version 2.122 to 2.125.
* CPAN::Meta::YAML has been upgraded from version 0.008 to 0.012.
* Data::Dumper has been upgraded from version 2.145 to 2.151.
* DB has been upgraded from version 1.04 to 1.07.
* DB_File has been upgraded from version 1.827 to 1.831.
* DBM_Filter has been upgraded from version 0.05 to 0.06.
* deprecate has been upgraded from version 0.02 to 0.03.
* Devel::Peek has been upgraded from version 1.11 to 1.16.
* Devel::PPPort has been upgraded from version 3.20 to 3.21.
* diagnostics has been upgraded from version 1.31 to 1.34.
* Digest::MD5 has been upgraded from version 2.52 to 2.53.
* Digest::SHA has been upgraded from version 5.84 to 5.88.
* DynaLoader has been upgraded from version 1.18 to 1.25.
* Encode has been upgraded from version 2.49 to 2.60.
* encoding has been upgraded from version 2.6_01 to 2.12.
* English has been upgraded from version 1.06 to 1.09.
$OLD_PERL_VERSION was added as an alias of $].
* Errno has been upgraded from version 1.18 to 1.20_03.
* Exporter has been upgraded from version 5.68 to 5.70.
* ExtUtils::CBuilder has been upgraded from version 0.280210 to 0.280216.
* ExtUtils::Command has been upgraded from version 1.17 to 1.18.
* ExtUtils::Embed has been upgraded from version 1.30 to 1.32.
* ExtUtils::Install has been upgraded from version 1.59 to 1.67.
* ExtUtils::MakeMaker has been upgraded from version 6.66 to 6.98.
* ExtUtils::Miniperl has been upgraded from version to 1.01.
* ExtUtils::ParseXS has been upgraded from version 3.18 to 3.24.
* ExtUtils::Typemaps has been upgraded from version 3.19 to 3.24.
* ExtUtils::XSSymSet has been upgraded from version 1.2 to 1.3.
* feature has been upgraded from version 1.32 to 1.36.
* fields has been upgraded from version 2.16 to 2.17.
* File::Basename has been upgraded from version 2.84 to 2.85.
* File::Copy has been upgraded from version 2.26 to 2.29.
* File::DosGlob has been upgraded from version 1.10 to 1.12.
* File::Fetch has been upgraded from version 0.38 to 0.48.
* File::Find has been upgraded from version 1.23 to 1.27.
* File::Glob has been upgraded from version 1.20 to 1.23.
* File::Spec has been upgraded from version 3.40 to 3.47.
* File::Temp has been upgraded from version 0.23 to 0.2304.
* FileCache has been upgraded from version 1.08 to 1.09.
* Filter::Simple has been upgraded from version 0.89 to 0.91.
* Filter::Util::Call has been upgraded from version 1.45 to 1.49.
* Getopt::Long has been upgraded from version 2.39 to 2.42.
* Getopt::Std has been upgraded from version 1.07 to 1.10.
* Hash::Util::FieldHash has been upgraded from version 1.10 to 1.15.
* HTTP::Tiny has been upgraded from version 0.025 to 0.043.
* I18N::Langinfo has been upgraded from version 0.10 to 0.11.
* I18N::LangTags has been upgraded from version 0.39 to 0.40.
* if has been upgraded from version 0.0602 to 0.0603.
* inc::latest has been upgraded from version 0.4003 to 0.4205. NOTE:
inc::latest is deprecated and may be removed from a future version of
Perl.
* integer has been upgraded from version 1.00 to 1.01.
* IO has been upgraded from version 1.28 to 1.31.
* IO::Compress::Gzip and friends have been upgraded from version 2.060 to
2.064.
* IPC::Cmd has been upgraded from version 0.80 to 0.92.
* IPC::Open3 has been upgraded from version 1.13 to 1.16.
* IPC::SysV has been upgraded from version 2.03 to 2.04.
* JSON::PP has been upgraded from version 2.27202 to 2.27203.
* List::Util has been upgraded from version 1.27 to 1.38.
* locale has been upgraded from version 1.02 to 1.03.
* Locale::Codes has been upgraded from version 3.25 to 3.30.
* Locale::Maketext has been upgraded from version 1.23 to 1.25.
* Math::BigInt has been upgraded from version 1.9991 to 1.9993.
* Math::BigInt::FastCalc has been upgraded from version 0.30 to 0.31.
* Math::BigRat has been upgraded from version 0.2604 to 0.2606.
* MIME::Base64 has been upgraded from version 3.13 to 3.14.
* Module::Build has been upgraded from version 0.4003 to 0.4205. NOTE:
Module::Build is deprecated and may be removed from a future version of
Perl.
* Module::CoreList has been upgraded from version 2.89 to 3.10.
* Module::Load has been upgraded from version 0.24 to 0.32.
* Module::Load::Conditional has been upgraded from version 0.54 to 0.62.
* Module::Metadata has been upgraded from version 1.000011 to 1.000019.
* mro has been upgraded from version 1.11 to 1.16.
* Net::Ping has been upgraded from version 2.41 to 2.43.
* Opcode has been upgraded from version 1.25 to 1.27.
* Package::Constants has been upgraded from version 0.02 to 0.04. NOTE:
Package::Constants is deprecated and may be removed from a future ver-
sion of Perl.
* Params::Check has been upgraded from version 0.36 to 0.38.
* parent has been upgraded from version 0.225 to 0.228.
* Parse::CPAN::Meta has been upgraded from version 1.4404 to 1.4414.
* Perl::OSType has been upgraded from version 1.003 to 1.007.
* perlfaq has been upgraded from version 5.0150042 to 5.0150044.
* PerlIO has been upgraded from version 1.07 to 1.09.
* PerlIO::encoding has been upgraded from version 0.16 to 0.18.
* PerlIO::scalar has been upgraded from version 0.16 to 0.18.
* PerlIO::via has been upgraded from version 0.12 to 0.14.
* Pod::Escapes has been upgraded from version 1.04 to 1.06.
* Pod::Functions has been upgraded from version 1.06 to 1.08.
* Pod::Html has been upgraded from version 1.18 to 1.21.
* Pod::Parser has been upgraded from version 1.60 to 1.62.
* Pod::Perldoc has been upgraded from version 3.19 to 3.23.
* Pod::Usage has been upgraded from version 1.61 to 1.63.
* POSIX has been upgraded from version 1.32 to 1.38_03.
* re has been upgraded from version 0.23 to 0.26.
* Safe has been upgraded from version 2.35 to 2.37.
* Scalar::Util has been upgraded from version 1.27 to 1.38.
* SDBM_File has been upgraded from version 1.09 to 1.11.
* Socket has been upgraded from version 2.009 to 2.013.
* Storable has been upgraded from version 2.41 to 2.49.
* strict has been upgraded from version 1.07 to 1.08.
* subs has been upgraded from version 1.01 to 1.02.
* Sys::Hostname has been upgraded from version 1.17 to 1.18.
* Sys::Syslog has been upgraded from version 0.32 to 0.33.
* Term::Cap has been upgraded from version 1.13 to 1.15.
* Term::ReadLine has been upgraded from version 1.12 to 1.14.
* Test::Harness has been upgraded from version 3.26 to 3.30.
* Test::Simple has been upgraded from version 0.98 to 1.001002.
* Text::ParseWords has been upgraded from version 3.28 to 3.29.
* Text::Tabs has been upgraded from version 2012.0818 to 2013.0523.
* Text::Wrap has been upgraded from version 2012.0818 to 2013.0523.
* Thread has been upgraded from version 3.02 to 3.04.
* Thread::Queue has been upgraded from version 3.02 to 3.05.
* threads has been upgraded from version 1.86 to 1.93.
* threads::shared has been upgraded from version 1.43 to 1.46.
* Tie::Array has been upgraded from version 1.05 to 1.06.
* Tie::File has been upgraded from version 0.99 to 1.00.
* Tie::Hash has been upgraded from version 1.04 to 1.05.
* Tie::Scalar has been upgraded from version 1.02 to 1.03.
* Tie::StdHandle has been upgraded from version 4.3 to 4.4.
* Time::HiRes has been upgraded from version 1.9725 to 1.9726.
* Time::Piece has been upgraded from version 1.20_01 to 1.27.
* Unicode::Collate has been upgraded from version 0.97 to 1.04.
* Unicode::Normalize has been upgraded from version 1.16 to 1.17.
* Unicode::UCD has been upgraded from version 0.51 to 0.57.
* utf8 has been upgraded from version 1.10 to 1.13.
* version has been upgraded from version 0.9902 to 0.9908.
* vmsish has been upgraded from version 1.03 to 1.04.
* warnings has been upgraded from version 1.18 to 1.23.
* Win32 has been upgraded from version 0.47 to 0.49.
* XS::Typemap has been upgraded from version 0.10 to 0.13.
* XSLoader has been upgraded from version 0.16 to 0.17.
Documentation
New Documentation
perlrepository
This document was removed (actually, renamed perlgit and given a major
overhaul) in Perl v5.14, causing Perl documentation websites to show the
now out of date version in Perl v5.12 as the latest version. It has now
been restored in stub form, directing readers to current information.
Changes to Existing Documentation
perldata
* New sections have been added to document the new index/value array
slice and key/value hash slice syntax.
perldebguts
* The "DB::goto" and "DB::lsub" debugger subroutines are now documented.
[perl #77680]
perlexperiment
* "\s" matching "\cK" is marked experimental.
* ithreads were accepted in v5.8.0 (but are discouraged as of v5.20.0).
* Long doubles are not considered experimental.
* Code in regular expressions, regular expression backtracking verbs, and
lvalue subroutines are no longer listed as experimental. (This also
affects perlre and perlsub.)
perlfunc
* "chop" and "chomp" now note that they can reset the hash iterator.
* "exec"'s handling of arguments is now more clearly documented.
* "eval EXPR" now has caveats about expanding floating point numbers in
some locales.
* "goto EXPR" is now documented to handle an expression that evaluates to
a code reference as if it was "goto &$coderef". This behavior is at
least ten years old.
* Since Perl v5.10, it has been possible for subroutines in @INC to re-
turn a reference to a scalar holding initial source code to prepend to
the file. This is now documented.
* The documentation of "ref" has been updated to recommend the use of
"blessed", "isa" and "reftype" when dealing with references to blessed
objects.
perlguts
* Numerous minor changes have been made to reflect changes made to the
perl internals in this release.
* New sections on Read-Only Values and Copy on Write have been added.
perlhack
* The Super Quick Patch Guide section has been updated.
perlhacktips
* The documentation has been updated to include some more examples of
"gdb" usage.
perllexwarn
* The perllexwarn documentation used to describe the hierarchy of warning
categories understood by the warnings pragma. That description has now
been moved to the warnings documentation itself, leaving perllexwarn as
a stub that points to it. This change consolidates all documentation
for lexical warnings in a single place.
perllocale
* The documentation now mentions fc() and "\F", and includes many clari-
fications and corrections in general.
perlop
* The language design of Perl has always called for monomorphic opera-
tors. This is now mentioned explicitly.
perlopentut
* The "open" tutorial has been completely rewritten by Tom Christiansen,
and now focuses on covering only the basics, rather than providing a
comprehensive reference to all things openable. This rewrite came as
the result of a vigorous discussion on perl5-porters kicked off by a
set of improvements written by Alexander Hartmaier to the existing per-
lopentut. A "more than you ever wanted to know about "open"" document
may follow in subsequent versions of perl.
perlre
* The fact that the regexp engine makes no effort to call (?{}) and
(??{}) constructs any specified number of times (although it will basi-
cally DWIM in case of a successful match) has been documented.
* The "/r" modifier (for non-destructive substitution) is now documented.
[perl #119151]
* The documentation for "/x" and "(?# comment)" has been expanded and
clarified.
perlreguts
* The documentation has been updated in the light of recent changes to
regcomp.c.
perlsub
* The need to predeclare recursive functions with prototypes in order for
the prototype to be honoured in the recursive call is now documented.
[perl #2726]
* A list of subroutine names used by the perl implementation is now in-
cluded. [perl #77680]
perltrap
* There is now a JavaScript section.
perlunicode
* The documentation has been updated to reflect "Bidi_Class" changes in
Unicode 6.3.
perlvar
* A new section explaining the performance issues of $`, $& and $', in-
cluding workarounds and changes in different versions of Perl, has been
added.
* Three English variable names which have long been documented but do not
actually exist have been removed from the documentation. These were
$OLD_PERL_VERSION, $OFMT, and $ARRAY_BASE.
(Actually, "OLD_PERL_VERSION" does exist, starting with this revision,
but remained undocumented until perl 5.22.0.)
perlxs
* Several problems in the "MY_CXT" example have been fixed.
Diagnostics
The following additions or changes have been made to diagnostic output, in-
cluding warnings and fatal error messages. For the complete list of diag-
nostic messages, see perldiag.
New Diagnostics
New Errors
* delete argument is index/value array slice, use array slice
(F) You used index/value array slice syntax (%array[...]) as the argu-
ment to "delete". You probably meant @array[...] with an @ symbol in-
stead.
* delete argument is key/value hash slice, use hash slice
(F) You used key/value hash slice syntax (%hash{...}) as the argument
to "delete". You probably meant @hash{...} with an @ symbol instead.
* Magical list constants are not supported
(F) You assigned a magical array to a stash element, and then tried to
use the subroutine from the same slot. You are asking Perl to do some-
thing it cannot do, details subject to change between Perl versions.
* Added Setting $/ to a %s reference is forbidden
New Warnings
* %s on reference is experimental:
The "auto-deref" feature is experimental.
Starting in v5.14.0, it was possible to use push, pop, keys, and other
built-in functions not only on aggregate types, but on references to
them. The feature was not deployed to its original intended specifica-
tion, and now may become redundant to postfix dereferencing. It has
always been categorized as an experimental feature, and in v5.20.0 it
carries a warning as such.
Warnings will now be issued at compile time when these operations are
detected.
no if $] >= 5.01908, warnings => "experimental::autoderef";
Consider, though, replacing the use of these features, as they may
change behavior again before becoming stable.
* A sequence of multiple spaces in a charnames alias definition is depre-
cated
Trailing white-space in a charnames alias definition is deprecated
These two deprecation warnings involving "\N{...}" were incorrectly im-
plemented. They did not warn by default (now they do) and could not be
made fatal via "use warnings FATAL => 'deprecated'" (now they can).
* Attribute prototype(%s) discards earlier prototype attribute in same
sub
(W misc) A sub was declared as "sub foo : prototype(A) : prototype(B)
{}", for example. Since each sub can only have one prototype, the ear-
lier declaration(s) are discarded while the last one is applied.
* Invalid \0 character in %s for %s: %s\0%s
(W syscalls) Embedded \0 characters in pathnames or other system call
arguments produce a warning as of 5.20. The parts after the \0 were
formerly ignored by system calls.
* Matched non-Unicode code point 0x%X against Unicode property; may not
be portable.
This replaces the message "Code point 0x%X is not Unicode, all \p{}
matches fail; all \P{} matches succeed".
* Missing ']' in prototype for %s : %s
(W illegalproto) A grouping was started with "[" but never closed with
"]".
* Possible precedence issue with control flow operator
(W syntax) There is a possible problem with the mixing of a control
flow operator (e.g. "return") and a low-precedence operator like "or".
Consider:
sub { return $a or $b; }
This is parsed as:
sub { (return $a) or $b; }
Which is effectively just:
sub { return $a; }
Either use parentheses or the high-precedence variant of the operator.
Note this may be also triggered for constructs like:
sub { 1 if die; }
* Postfix dereference is experimental
(S experimental::postderef) This warning is emitted if you use the ex-
perimental postfix dereference syntax. Simply suppress the warning if
you want to use the feature, but know that in doing so you are taking
the risk of using an experimental feature which may change or be re-
moved in a future Perl version:
no warnings "experimental::postderef";
use feature "postderef", "postderef_qq";
$ref->$*;
$aref->@*;
$aref->@[@indices];
... etc ...
* Prototype '%s' overridden by attribute 'prototype(%s)' in %s
(W prototype) A prototype was declared in both the parentheses after
the sub name and via the prototype attribute. The prototype in paren-
theses is useless, since it will be replaced by the prototype from the
attribute before it's ever used.
* Scalar value @%s[%s] better written as $%s[%s]
(W syntax) In scalar context, you've used an array index/value slice
(indicated by %) to select a single element of an array. Generally
it's better to ask for a scalar value (indicated by $). The difference
is that $foo[&bar] always behaves like a scalar, both in the value it
returns and when evaluating its argument, while %foo[&bar] provides a
list context to its subscript, which can do weird things if you're ex-
pecting only one subscript. When called in list context, it also re-
turns the index (what &bar returns) in addition to the value.
* Scalar value @%s{%s} better written as $%s{%s}
(W syntax) In scalar context, you've used a hash key/value slice (indi-
cated by %) to select a single element of a hash. Generally it's bet-
ter to ask for a scalar value (indicated by $). The difference is that
$foo{&bar} always behaves like a scalar, both in the value it returns
and when evaluating its argument, while @foo{&bar} and provides a list
context to its subscript, which can do weird things if you're expecting
only one subscript. When called in list context, it also returns the
key in addition to the value.
* Setting $/ to a reference to %s as a form of slurp is deprecated,
treating as undef
* Unexpected exit %u
(S) exit() was called or the script otherwise finished gracefully when
"PERL_EXIT_WARN" was set in "PL_exit_flags".
* Unexpected exit failure %d
(S) An uncaught die() was called when "PERL_EXIT_WARN" was set in
"PL_exit_flags".
* Use of literal control characters in variable names is deprecated
(D deprecated) Using literal control characters in the source to refer
to the ^FOO variables, like $^X and ${^GLOBAL_PHASE} is now deprecated.
This only affects code like $\cT, where \cT is a control (like a "SOH")
in the source code: ${"\cT"} and $^T remain valid.
* Useless use of greediness modifier
This fixes [Perl #42957].
Changes to Existing Diagnostics
* Warnings and errors from the regexp engine are now UTF-8 clean.
* The "Unknown switch condition" error message has some slight changes.
This error triggers when there is an unknown condition in a "(?(foo))"
conditional. The error message used to read:
Unknown switch condition (?(%s in regex;
But what %s could be was mostly up to luck. For "(?(foobar))", you
might have seen "fo" or "f". For Unicode characters, you would gener-
ally get a corrupted string. The message has been changed to read:
Unknown switch condition (?(...)) in regex;
Additionally, the '<-- HERE' marker in the error will now point to the
correct spot in the regex.
* The "%s "\x%X" does not map to Unicode" warning is now correctly listed
as a severe warning rather than as a fatal error.
* Under rare circumstances, one could get a "Can't coerce readonly REF to
string" instead of the customary "Modification of a read-only value".
This alternate error message has been removed.
* "Ambiguous use of * resolved as operator *": This and similar warnings
about "%" and "&" used to occur in some circumstances where there was
no operator of the type cited, so the warning was completely wrong.
This has been fixed [perl #117535, #76910].
* Warnings about malformed subroutine prototypes are now more consistent
in how the prototypes are rendered. Some of these warnings would trun-
cate prototypes containing nulls. In other cases one warning would
suppress another. The warning about illegal characters in prototypes
no longer says "after '_'" if the bad character came before the under-
score.
* Perl folding rules are not up-to-date for 0x%X; please use the perlbug
utility to report; in regex; marked by <-- HERE in m/%s/
This message is now only in the regexp category, and not in the depre-
cated category. It is still a default (i.e., severe) warning [perl
#89648].
* %%s[%s] in scalar context better written as $%s[%s]
This warning now occurs for any %array[$index] or %hash{key} known to
be in scalar context at compile time. Previously it was worded "Scalar
value %%s[%s] better written as $%s[%s]".
* Switch condition not recognized in regex; marked by <-- HERE in m/%s/:
The description for this diagnostic has been extended to cover all
cases where the warning may occur. Issues with the positioning of the
arrow indicator have also been resolved.
* The error messages for my($a?$b$c) and my(do{}) now mention "condi-
tional expression" and "do block", respectively, instead of reading
'Can't declare null operation in "my"'.
* When "use re "debug"" executes a regex containing a backreference, the
debugging output now shows what string is being matched.
* The now fatal error message "Character following "\c" must be ASCII"
has been reworded as "Character following "\c" must be printable ASCII"
to emphasize that in "\cX", X must be a printable (non-control) ASCII
character.
Utility Changes
a2p
* A possible crash from an off-by-one error when trying to access before
the beginning of a buffer has been fixed. [perl #120244]
bisect.pl
The git bisection tool Porting/bisect.pl has had many enhancements.
It is provided as part of the source distribution but not installed because
it is not self-contained as it relies on being run from within a git check-
out. Note also that it makes no attempt to fix tests, correct runtime bugs
or make something useful to install - its purpose is to make minimal
changes to get any historical revision of interest to build and run as
close as possible to "as-was", and thereby make "git bisect" easy to use.
* Can optionally run the test case with a timeout.
* Can now run in-place in a clean git checkout.
* Can run the test case under "valgrind".
* Can apply user supplied patches and fixes to the source checkout before
building.
* Now has fixups to enable building several more historical ranges of
bleadperl, which can be useful for pinpointing the origins of bugs or
behaviour changes.
find2perl
* find2perl now handles "?" wildcards correctly. [perl #113054]
perlbug
* perlbug now has a "-p" option for attaching patches with a bug report.
* perlbug has been modified to supply the report template with CRLF line
endings on Windows. [GH #13612]
* perlbug now makes as few assumptions as possible about the encoding of
the report. This will likely change in the future to assume UTF-8 by
default but allow a user override.
Configuration and Compilation
* The Makefile.PL for SDBM_File now generates a better Makefile, which
avoids a race condition during parallel makes, which could cause the
build to fail. This is the last known parallel make problem (on *nix
platforms), and therefore we believe that a parallel make should now
always be error free.
* installperl and installman's option handling has been refactored to use
Getopt::Long. Both are used by the Makefile "install" targets, and are
not installed, so these changes are only likely to affect custom in-
stallation scripts.
* Single letter options now also have long names.
* Invalid options are now rejected.
* Command line arguments that are not options are now rejected.
* Each now has a "--help" option to display the usage message.
The behaviour for all valid documented invocations is unchanged.
* Where possible, the build now avoids recursive invocations of make when
building pure-Perl extensions, without removing any parallelism from
the build. Currently around 80 extensions can be processed directly by
the make_ext.pl tool, meaning that 80 invocations of make and 160 invo-
cations of miniperl are no longer made.
* The build system now works correctly when compiling under GCC or Clang
with link-time optimization enabled (the "-flto" option). [perl
#113022]
* Distinct library basenames with "d_libname_unique".
When compiling perl with this option, the library files for XS modules
are named something "unique" -- for example, Hash/Util/Util.so becomes
Hash/Util/PL_Hash__Util.so. This behavior is similar to what currently
happens on VMS, and serves as groundwork for the Android port.
* "sysroot" option to indicate the logical root directory under gcc and
clang.
When building with this option set, both Configure and the compilers
search for all headers and libraries under this new sysroot, instead of
/.
This is a huge time saver if cross-compiling, but can also help on na-
tive builds if your toolchain's files have non-standard locations.
* The cross-compilation model has been renovated. There's several new
options, and some backwards-incompatible changes:
We now build binaries for miniperl and generate_uudmap to be used on
the host, rather than running every miniperl call on the target; this
means that, short of 'make test', we no longer need access to the tar-
get system once Configure is done. You can provide already-built bina-
ries through the "hostperl" and "hostgenerate" options to Configure.
Additionally, if targeting an EBCDIC platform from an ASCII host, or
viceversa, you'll need to run Configure with "-Uhostgenerate", to indi-
cate that generate_uudmap should be run on the target.
Finally, there's also a way of having Configure end early, right after
building the host binaries, by cross-compiling without specifying a
"targethost".
The incompatible changes include no longer using xconfig.h, xlib, or
Cross.pm, so canned config files and Makefiles will have to be updated.
* Related to the above, there is now a way of specifying the location of
sh (or equivalent) on the target system: "targetsh".
For example, Android has its sh in /system/bin/sh, so if cross-compil-
ing from a more normal Unixy system with sh in /bin/sh, "targetsh"
would end up as /system/bin/sh, and "sh" as /bin/sh.
* By default, gcc 4.9 does some optimizations that break perl. The
-fwrapv option disables those optimizations (and probably others), so
for gcc 4.3 and later (since there might be similar problems lurking on
older versions too, but -fwrapv was broken before 4.3, and the opti-
mizations probably won't go away), Configure now adds -fwrapv unless
the user requests -fno-wrapv, which disables -fwrapv, or -fsanitize=un-
defined, which turns the overflows -fwrapv ignores into runtime errors.
[GH #13690]
Testing
* The "test.valgrind" make target now allows tests to be run in parallel.
This target allows Perl's test suite to be run under Valgrind, which
detects certain sorts of C programming errors, though at significant
cost in running time. On suitable hardware, allowing parallel execution
claws back a lot of that additional cost. [perl #121431]
* Various tests in t/porting/ are no longer skipped when the perl .git
directory is outside the perl tree and pointed to by $GIT_DIR. [perl
#120505]
* The test suite no longer fails when the user's interactive shell main-
tains a $PWD environment variable, but the /bin/sh used for running
tests doesn't.
Platform Support
New Platforms
Android
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.
Bitrig
Compile support has been added for Bitrig, a fork of OpenBSD.
FreeMiNT
Support has been added for FreeMiNT, a free open-source OS for the
Atari ST system and its successors, based on the original MiNT that was
officially adopted by Atari.
Synology
Synology ships its NAS boxes with a lean Linux distribution (DSM) on
relative cheap CPU's (like the Marvell Kirkwood mv6282 - ARMv5tel or
Freescale QorIQ P1022 ppc - e500v2) not meant for workstations or de-
velopment. These boxes should build now. The basic problems are the
non-standard location for tools.
Discontinued Platforms
"sfio"
Code related to supporting the "sfio" I/O system has been removed.
Perl 5.004 added support to use the native API of "sfio", AT&T's
Safe/Fast I/O library. This code still built with v5.8.0, albeit with
many regression tests failing, but was inadvertently broken before the
v5.8.1 release, meaning that it has not worked on any version of Perl
released since then. In over a decade we have received no bug reports
about this, hence it is clear that no-one is using this functionality
on any version of Perl that is still supported to any degree.
AT&T 3b1
Configure support for the 3b1, also known as the AT&T Unix PC (and the
similar AT&T 7300), has been removed.
DG/UX
DG/UX was a Unix sold by Data General. The last release was in April
2001. It only runs on Data General's own hardware.
EBCDIC
In the absence of a regular source of smoke reports, code intended to
support native EBCDIC platforms will be removed from perl before
5.22.0.
Platform-Specific Notes
Cygwin
* recv() on a connected handle would populate the returned sender ad-
dress with whatever happened to be in the working buffer. recv()
now uses a workaround similar to the Win32 recv() wrapper and re-
turns an empty string when recvfrom(2) doesn't modify the supplied
address length. [perl #118843]
* Fixed a build error in cygwin.c on Cygwin 1.7.28.
Tests now handle the errors that occur when "cygserver" isn't run-
ning.
GNU/Hurd
The BSD compatibility library "libbsd" is no longer required for
builds.
Linux
The hints file now looks for "libgdbm_compat" only if "libgdbm" itself
is also wanted. The former is never useful without the latter, and in
some circumstances, including it could actually prevent building.
Mac OS
The build system now honors an "ld" setting supplied by the user run-
ning Configure.
MidnightBSD
"objformat" was removed from version 0.4-RELEASE of MidnightBSD and had
been deprecated on earlier versions. This caused the build environment
to be erroneously configured for "a.out" rather than "elf". This has
been now been corrected.
Mixed-endian platforms
The code supporting "pack" and "unpack" operations on mixed endian
platforms has been removed. We believe that Perl has long been unable
to build on mixed endian architectures (such as PDP-11s), so we don't
think that this change will affect any platforms which were able to
build v5.18.0.
VMS
* The "PERL_ENV_TABLES" feature to control the population of %ENV at
perl start-up was broken in Perl 5.16.0 but has now been fixed.
* Skip access checks on remotes in opendir(). [perl #121002]
* A check for glob metacharacters in a path returned by the glob()
operator has been replaced with a check for VMS wildcard charac-
ters. This saves a significant number of unnecessary lstat() calls
such that some simple glob operations become 60-80% faster.
Win32
* "rename" and "link" on Win32 now set $! to ENOSPC and EDQUOT when
appropriate. [perl #119857]
* The BUILD_STATIC and ALL_STATIC makefile options for linking some
or (nearly) all extensions statically (into perl520.dll, and into a
separate perl-static.exe too) were broken for MinGW builds. This
has now been fixed.
The ALL_STATIC option has also been improved to include the Encode
and Win32 extensions (for both VC++ and MinGW builds).
* Support for building with Visual C++ 2013 has been added. There
are currently two possible test failures (see "Testing Perl on Win-
dows" in perlwin32) which will hopefully be resolved soon.
* Experimental support for building with Intel C++ Compiler has been
added. The nmake makefile (win32/Makefile) and the dmake makefile
(win32/makefile.mk) can be used. A "nmake test" will not pass at
this time due to cpan/CGI/t/url.t.
* Killing a process tree with "kill" in perlfunc and a negative sig-
nal, was broken starting in 5.18.0. In this bug, "kill" always re-
turned 0 for a negative signal even for valid PIDs, and no
processes were terminated. This has been fixed [perl #121230].
* The time taken to build perl on Windows has been reduced quite sig-
nificantly (time savings in the region of 30-40% are typically
seen) by reducing the number of, usually failing, I/O calls for
each require() (for miniperl.exe only). [GH #13566]
* About 15 minutes of idle sleeping was removed from running "make
test" due to a bug in which the timeout monitor used for tests
could not be cancelled once the test completes, and the full time-
out period elapsed before running the next test file. [GH #13647]
* On a perl built without pseudo-fork (pseudo-fork builds were not
affected by this bug), killing a process tree with kill() and a
negative signal resulted in kill() inverting the returned value.
For example, if kill() killed 1 process tree PID then it returned 0
instead of 1, and if kill() was passed 2 invalid PIDs then it re-
turned 2 instead of 0. This has probably been the case since the
process tree kill feature was implemented on Win32. It has now
been corrected to follow the documented behaviour. [GH #13595]
* When building a 64-bit perl, an uninitialized memory read in
miniperl.exe, used during the build process, could lead to a 4GB
wperl.exe being created. This has now been fixed. (Note that
perl.exe itself was unaffected, but obviously wperl.exe would have
been completely broken.) [GH #13677]
* Perl can now be built with gcc version 4.8.1 from
. This was previously broken due to an in-
correct definition of DllMain() in one of perl's source files.
Earlier gcc versions were also affected when using version 4 of the
w32api package. Versions of gcc available from
were not affected. [GH #13733]
* The test harness now has no failures when perl is built on a FAT
drive with the Windows OS on an NTFS drive. [GH #6348]
* When cloning the context stack in fork() emulation, Perl_cx_dup()
would crash accessing parameter information for context stack en-
tries that included no parameters, as with "&foo;". [GH #13763]
* Introduced by [GH #12161] , a memory leak on every call to "system" and backticks
( `` ), on most Win32 Perls starting from 5.18.0 has been fixed.
The memory leak only occurred if you enabled pseudo-fork in your
build of Win32 Perl, and were running that build on Server 2003 R2
or newer OS. The leak does not appear on WinXP SP3. [GH #13741]
WinCE
* The building of XS modules has largely been restored. Several
still cannot (yet) be built but it is now possible to build Perl on
WinCE with only a couple of further patches (to Socket and ExtU-
tils::MakeMaker), hopefully to be incorporated soon.
* Perl can now be built in one shot with no user intervention on
WinCE by running "nmake -f Makefile.ce all".
Support for building with EVC (Embedded Visual C++) 4 has been re-
stored. Perl can also be built using Smart Devices for Visual C++
2005 or 2008.
Internal Changes
* The internal representation has changed for the match variables $1, $2
etc., $`, $&, $', ${^PREMATCH}, ${^MATCH} and ${^POSTMATCH}. It uses
slightly less memory, avoids string comparisons and numeric conversions
during lookup, and uses 23 fewer lines of C. This change should not
affect any external code.
* Arrays now use NULL internally to represent unused slots, instead of
&PL_sv_undef. &PL_sv_undef is no longer treated as a special value, so
av_store(av, 0, &PL_sv_undef) will cause element 0 of that array to
hold a read-only undefined scalar. "$array[0] = anything" will croak
and "\$array[0]" will compare equal to "\undef".
* The SV returned by HeSVKEY_force() now correctly reflects the UTF8ness
of the underlying hash key when that key is not stored as a SV. [perl
#79074]
* Certain rarely used functions and macros available to XS code are now
deprecated. These are: "utf8_to_uvuni_buf" (use "utf8_to_uvchr_buf"
instead), "valid_utf8_to_uvuni" (use "utf8_to_uvchr_buf" instead), "NA-
TIVE_TO_NEED" (this did not work properly anyway), and "ASCII_TO_NEED"
(this did not work properly anyway).
Starting in this release, almost never does application code need to
distinguish between the platform's character set and Latin1, on which
the lowest 256 characters of Unicode are based. New code should not
use "utf8n_to_uvuni" (use "utf8_to_uvchr_buf" instead), nor
"uvuni_to_utf8" (use "uvchr_to_utf8" instead),
* The Makefile shortcut targets for many rarely (or never) used testing
and profiling targets have been removed, or merged into the only other
Makefile target that uses them. Specifically, these targets are gone,
along with documentation that referenced them or explained how to use
them:
check.third check.utf16 check.utf8 coretest minitest.prep
minitest.utf16 perl.config.dashg perl.config.dashpg
perl.config.gcov perl.gcov perl.gprof perl.gprof.config
perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
perl.third perl.third.config perl.valgrind.config purecovperl
pureperl quantperl test.deparse test.taintwarn test.third
test.torture test.utf16 test.utf8 test_notty.deparse
test_notty.third test_notty.valgrind test_prep.third
test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
ucheck.valgrind utest utest.third utest.utf16 utest.valgrind
It's still possible to run the relevant commands by "hand" - no under-
lying functionality has been removed.
* It is now possible to keep Perl from initializing locale handling. For
the most part, Perl doesn't pay attention to locale. (See perllocale.)
Nonetheless, until now, on startup, it has always initialized locale
handling to the system default, just in case the program being executed
ends up using locales. (This is one of the first things a locale-aware
program should do, long before Perl knows if it will actually be needed
or not.) This works well except when Perl is embedded in another ap-
plication which wants a locale that isn't the system default. Now, if
the environment variable "PERL_SKIP_LOCALE_INIT" is set at the time
Perl is started, this initialization step is skipped. Prior to this,
on Windows platforms, the only workaround for this deficiency was to
use a hacked-up copy of internal Perl code. Applications that need to
use older Perls can discover if the embedded Perl they are using needs
the workaround by testing that the C preprocessor symbol "HAS_SKIP_LO-
CALE_INIT" is not defined. [RT #38193]
* "BmRARE" and "BmPREVIOUS" have been removed. They were not used any-
where and are not part of the API. For XS modules, they are now #de-
fined as 0.
* "sv_force_normal", which usually croaks on read-only values, used to
allow read-only values to be modified at compile time. This has been
changed to croak on read-only values regardless. This change uncovered
several core bugs.
* Perl's new copy-on-write mechanism (which is now enabled by default),
allows any "SvPOK" scalar to be automatically upgraded to a
copy-on-write scalar when copied. A reference count on the string
buffer is stored in the string buffer itself.
For example:
$ perl -MDevel::Peek -e'$a="abc"; $b = $a; Dump $a; Dump $b'
SV = PV(0x260cd80) at 0x2620ad8
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2619bc0 "abc"\0
CUR = 3
LEN = 16
COW_REFCNT = 1
SV = PV(0x260ce30) at 0x2620b20
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2619bc0 "abc"\0
CUR = 3
LEN = 16
COW_REFCNT = 1
Note that both scalars share the same PV buffer and have a COW_REFCNT
greater than zero.
This means that XS code which wishes to modify the SvPVX() buffer of an
SV should call SvPV_force() or similar first, to ensure a valid (and
unshared) buffer, and to call SvSETMAGIC() afterwards. This in fact has
always been the case (for example hash keys were already
copy-on-write); this change just spreads the COW behaviour to a wider
variety of SVs.
One important difference is that before 5.18.0, shared hash-key scalars
used to have the "SvREADONLY" flag set; this is no longer the case.
This new behaviour can still be disabled by running Configure with -Ac-
cflags=-DPERL_NO_COW. This option will probably be removed in Perl
5.22.
* "PL_sawampersand" is now a constant. The switch this variable provided
(to enable/disable the pre-match copy depending on whether $& had been
seen) has been removed and replaced with copy-on-write, eliminating a
few bugs.
The previous behaviour can still be enabled by running Configure with
-Accflags=-DPERL_SAWAMPERSAND.
* The functions "my_swap", "my_htonl" and "my_ntohl" have been removed.
It is unclear why these functions were ever marked as A, part of the
API. XS code can't call them directly, as it can't rely on them being
compiled. Unsurprisingly, no code on CPAN references them.
* The signature of the Perl_re_intuit_start() regex function has changed;
the function pointer "intuit" in the regex engine plugin structure has
also changed accordingly. A new parameter, "strbeg" has been added;
this has the same meaning as the same-named parameter in
"Perl_regexec_flags". Previously intuit would try to guess the start of
the string from the passed SV (if any), and would sometimes get it
wrong (e.g. with an overloaded SV).
* The signature of the Perl_regexec_flags() regex function has changed;
the function pointer "exec" in the regex engine plugin structure has
also changed to match. The "minend" parameter now has type "SSize_t"
to better support 64-bit systems.
* XS code may use various macros to change the case of a character or
code point (for example toLOWER_utf8()). Only a couple of these were
documented until now; and now they should be used in preference to
calling the underlying functions. See "Character case changing" in
perlapi.
* The code dealt rather inconsistently with uids and gids. Some places
assumed that they could be safely stored in UVs, others in IVs, others
in ints. Four new macros are introduced: SvUID(), sv_setuid(), SvGID(),
and sv_setgid()
* "sv_pos_b2u_flags" has been added to the API. It is similar to
"sv_pos_b2u", but supports long strings on 64-bit platforms.
* "PL_exit_flags" can now be used by perl embedders or other XS code to
have perl "warn" or "abort" on an attempted exit. [perl #52000]
* Compiling with "-Accflags=-PERL_BOOL_AS_CHAR" now allows C99 and C++
compilers to emulate the aliasing of "bool" to "char" that perl does
for C89 compilers. [perl #120314]
* The "sv" argument in "sv_2pv_flags" in perlapi, "sv_2iv_flags" in per-
lapi, "sv_2uv_flags" in perlapi, and "sv_2nv_flags" in perlapi and
their older wrappers sv_2pv, sv_2iv, sv_2uv, sv_2nv, is now non-NULL.
Passing NULL now will crash. When the non-NULL marker was introduced
en masse in 5.9.3 the functions were marked non-NULL, but since the
creation of the SV API in 5.0 alpha 2, if NULL was passed, the func-
tions returned 0 or false-type values. The code that supports "sv" ar-
gument being non-NULL dates to 5.0 alpha 2 directly, and indirectly to
Perl 1.0 (pre 5.0 api). The lack of documentation that the functions
accepted a NULL "sv" was corrected in 5.11.0 and between 5.11.0 and
5.19.5 the functions were marked NULLOK. As an optimization the NULLOK
code has now been removed, and the functions became non-NULL marked
again, because core getter-type macros never pass NULL to these func-
tions and would crash before ever passing NULL.
The only way a NULL "sv" can be passed to sv_2*v* functions is if XS
code directly calls sv_2*v*. This is unlikely as XS code uses Sv*V*
macros to get the underlying value out of the SV. One possible situa-
tion which leads to a NULL "sv" being passed to sv_2*v* functions, is
if XS code defines its own getter type Sv*V* macros, which check for
NULL before dereferencing and checking the SV's flags through public
API Sv*OK* macros or directly using private API "SvFLAGS", and if "sv"
is NULL, then calling the sv_2*v functions with a NULL literal or pass-
ing the "sv" containing a NULL value.
* newATTRSUB is now a macro
The public API newATTRSUB was previously a macro to the private func-
tion Perl_newATTRSUB. Function Perl_newATTRSUB has been removed. newAT-
TRSUB is now macro to a different internal function.
* Changes in warnings raised by utf8n_to_uvchr()
This bottom level function decodes the first character of a UTF-8
string into a code point. It is accessible to "XS" level code, but
it's discouraged from using it directly. There are higher level func-
tions that call this that should be used instead, such as
"utf8_to_uvchr_buf" in perlapi. For completeness though, this docu-
ments some changes to it. Now, tests for malformations are done before
any tests for other potential issues. One of those issues involves
code points so large that they have never appeared in any official
standard (the current standard has scaled back the highest acceptable
code point from earlier versions). It is possible (though not done in
CPAN) to warn and/or forbid these code points, while accepting smaller
code points that are still above the legal Unicode maximum. The warn-
ing message for this now includes the code point if representable on
the machine. Previously it always displayed raw bytes, which is what
it still does for non-representable code points.
* 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:
RXf_NOSCAN
RXf_CANY_SEEN
RXf_GPOS_SEEN
RXf_GPOS_FLOAT
RXf_ANCH_BOL
RXf_ANCH_MBOL
RXf_ANCH_SBOL
RXf_ANCH_GPOS
As well as the follow flag masks:
RXf_ANCH_SINGLE
RXf_ANCH
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:
RXf_IS_ANCHORED
pluggable regex engines which previously used to set these flags should
now set this flag ALONE.
* The Perl core now consistently uses av_tindex() ("the top index of an
array") as a more clearly-named synonym for av_len().
* The obscure interpreter variable "PL_timesbuf" is expected to be re-
moved early in the 5.21.x development series, so that Perl 5.22.0 will
not provide it to XS authors. While the variable still exists in
5.20.0, we hope that this advance warning of the deprecation will help
anyone who is using that variable.
Selected Bug Fixes
Regular Expressions
* Fixed a small number of regexp constructions that could either fail to
match or crash perl when the string being matched against was allocated
above the 2GB line on 32-bit systems. [RT #118175]
* Various memory leaks involving the parsing of the "(?[...])" regular
expression construct have been fixed.
* "(?[...])" now allows interpolation of precompiled patterns consisting
of "(?[...])" with bracketed character classes inside ("$pat =
qr/(?[ [a] ])/; /(?[ $pat ])/"). Formerly, the brackets would confuse
the regular expression parser.
* The "Quantifier unexpected on zero-length expression" warning message
could appear twice starting in Perl v5.10 for a regular expression also
containing alternations (e.g., "a|b") triggering the trie optimisation.
* Perl v5.18 inadvertently introduced a bug whereby interpolating mixed
up- and down-graded UTF-8 strings in a regex could result in malformed
UTF-8 in the pattern: specifically if a downgraded character in the
range "\x80..\xff" followed a UTF-8 string, e.g.
utf8::upgrade( my $u = "\x{e5}");
utf8::downgrade(my $d = "\x{e5}");
/$u$d/
[RT #118297]
* In regular expressions containing multiple code blocks, the values of
$1, $2, etc., set by nested regular expression calls would leak from
one block to the next. Now these variables always refer to the outer
regular expression at the start of an embedded block [perl #117917].
* "/$qr/p" was broken in Perl 5.18.0; the "/p" flag was ignored. This
has been fixed. [perl #118213]
* Starting in Perl 5.18.0, a construct like "/[#](?{})/x" would have its
"#" incorrectly interpreted as a comment. The code block would be
skipped, unparsed. This has been corrected.
* Starting in Perl 5.001, a regular expression like "/[#$a]/x" or
"/[#]$a/x" would have its "#" incorrectly interpreted as a comment, so
the variable would not interpolate. This has been corrected. [perl
#45667]
* Perl 5.18.0 inadvertently made dereferenced regular expressions
("${ qr// }") false as booleans. This has been fixed.
* The use of "\G" in regular expressions, where it's not at the start of
the pattern, is now slightly less buggy (although it is still somewhat
problematic).
* Where a regular expression included code blocks ("/(?{...})/"), and
where the use of constant overloading triggered a re-compilation of the
code block, the second compilation didn't see its outer lexical scope.
This was a regression in Perl 5.18.0.
* The string position set by "pos" could shift if the string changed rep-
resentation internally to or from utf8. This could happen, e.g., with
references to objects with string overloading.
* Taking references to the return values of two "pos" calls with the same
argument, and then assigning a reference to one and "undef" to the
other, could result in assertion failures or memory leaks.
* Elements of @- and @+ now update correctly when they refer to non-exis-
tent captures. Previously, a referenced element ("$ref = \$-[1]")
could refer to the wrong match after subsequent matches.
* The code that parses regex backrefs (or ambiguous backref/octals) such
as \123 did a simple atoi(), which could wrap round to negative values
on long digit strings and cause segmentation faults. This has now been
fixed. [perl #119505]
* Assigning another typeglob to "*^R" no longer makes the regular expres-
sion engine crash.
* The "\N" regular expression escape, when used without the curly braces
(to mean "[^\n]"), was ignoring a following "*" if followed by white-
space under /x. It had been this way since "\N" to mean "[^\n]" was
introduced in 5.12.0.
* "s///", "tr///" and "y///" now work when a wide character is used as
the delimiter. [perl #120463]
* Some cases of unterminated (?...) sequences in regular expressions
(e.g., "/(?") have been fixed to produce the proper error message in-
stead of "panic: memory wrap". Other cases (e.g., "/(?(/") have yet to
be fixed.
* When a reference to a reference to an overloaded object was returned
from a regular expression "(??{...})" code block, an incorrect implicit
dereference could take place if the inner reference had been returned
by a code block previously.
* A tied variable returned from "(??{...})" sees the inner values of
match variables (i.e., the $1 etc. from any matches inside the block)
in its FETCH method. This was not the case if a reference to an over-
loaded object was the last thing assigned to the tied variable. In-
stead, the match variables referred to the outer pattern during the
FETCH call.
* Fix unexpected tainting via regexp using locale. Previously, under cer-
tain conditions, the use of character classes could cause tainting when
it shouldn't. Some character classes are locale-dependent, but before
this patch, sometimes tainting was happening even for character classes
that don't depend on the locale. [perl #120675]
* Under certain conditions, Perl would throw an error if in a lookbehind
assertion in a regexp, the assertion referred to a named subpattern,
complaining the lookbehind was variable when it wasn't. This has been
fixed. [perl #120600], [perl #120618]. The current fix may be improved
on in the future.
* $^R wasn't available outside of the regular expression that initialized
it. [perl #121070]
* A large set of fixes and refactoring for re_intuit_start() was merged,
the highlights are:
* Fixed a panic when compiling the regular expression
"/\x{100}[xy]\x{100}{2}/".
* Fixed a performance regression when performing a global pattern
match against a UTF-8 string. [perl #120692]
* Fixed another performance issue where matching a regular expression
like "/ab.{1,2}x/" against a long UTF-8 string would unnecessarily
calculate byte offsets for a large portion of the string. [perl
#120692]
* Fixed an alignment error when compiling regular expressions when built
with GCC on HP-UX 64-bit.
* On 64-bit platforms "pos" can now be set to a value higher than
2**31-1. [perl #72766]
Perl 5 Debugger and -d
* The debugger's "man" command been fixed. It was broken in the v5.18.0
release. The "man" command is aliased to the names "doc" and "perldoc"
- all now work again.
* @_ is now correctly visible in the debugger, fixing a regression intro-
duced in v5.18.0's debugger. [RT #118169]
* Under copy-on-write builds (the default as of 5.20.0) "${'_<-e'}[0]" no
longer gets mangled. This is the first line of input saved for the de-
bugger's use for one-liners [perl #118627].
* On non-threaded builds, setting "${"_getline") used to stringify
the typeglob and then look it up again. Combined with changes in Perl
5.18.0, this allowed "*foo->bar" to call methods on the "foo" package
(like "foo->bar"). In some cases it could cause the method to be
called on the wrong handle. Now a typeglob argument is treated as a
handle (just like "(\*foo)->bar"), or, if its IO slot is empty, an er-
ror is raised.
* Assigning a vstring to a tied variable or to a subroutine argument
aliased to a nonexistent hash or array element now works, without flat-
tening the vstring into a regular string.
* "pos", "tie", "tied" and "untie" did not work properly on subroutine
arguments aliased to nonexistent hash and array elements [perl #77814,
#27010].
* The "=>" fat arrow operator can now quote built-in keywords even if it
occurs on the next line, making it consistent with how it treats other
barewords.
* Autovivifying a subroutine stub via "\&$glob" started causing crashes
in Perl 5.18.0 if the $glob was merely a copy of a real glob, i.e., a
scalar that had had a glob assigned to it. This has been fixed. [perl
#119051]
* Perl used to leak an implementation detail when it came to referencing
the return values of certain operators. "for ($a+$b) { warn \$_; warn
\$_ }" used to display two different memory addresses, because the "\"
operator was copying the variable. Under threaded builds, it would
also happen for constants ("for(1) { ... }"). This has been fixed.
[perl #21979, #78194, #89188, #109746, #114838, #115388]
* The range operator ".." was returning the same modifiable scalars with
each call, unless it was the only thing in a "foreach" loop header.
This meant that changes to values within the list returned would be
visible the next time the operator was executed. [perl #3105]
* Constant folding and subroutine inlining no longer cause operations
that would normally return new modifiable scalars to return read-only
values instead.
* Closures of the form "sub () { $some_variable }" are no longer inlined,
causing changes to the variable to be ignored by callers of the subrou-
tine. [perl #79908]
* Return values of certain operators such as "ref" would sometimes be
shared between recursive calls to the same subroutine, causing the in-
ner call to modify the value returned by "ref" in the outer call. This
has been fixed.
* "__PACKAGE__" and constants returning a package name or hash key are
now consistently read-only. In various previous Perl releases, they
have become mutable under certain circumstances.
* Enabling "used once" warnings no longer causes crashes on stash circu-
larities created at compile time ("*Foo::Bar::Foo:: = *Foo::").
* Undef constants used in hash keys ("use constant u => undef; $h{+u}")
no longer produce "uninitialized" warnings at compile time.
* Modifying a substitution target inside the substitution replacement no
longer causes crashes.
* The first statement inside a string eval used to use the wrong pragma
setting sometimes during constant folding. "eval 'uc chr 0xe0'" would
randomly choose between Unicode, byte, and locale semantics. This has
been fixed.
* The handling of return values of @INC filters (subroutines returned by
subroutines in @INC) has been fixed in various ways. Previously tied
variables were mishandled, and setting $_ to a reference or typeglob
could result in crashes.
* The "SvPVbyte" XS function has been fixed to work with tied scalars re-
turning something other than a string. It used to return utf8 in those
cases where "SvPV" would.
* Perl 5.18.0 inadvertently made "--" and "++" crash on dereferenced reg-
ular expressions, and stopped "++" from flattening vstrings.
* "bless" no longer dies with "Can't bless non-reference value" if its
first argument is a tied reference.
* "reset" with an argument no longer skips copy-on-write scalars, regular
expressions, typeglob copies, and vstrings. Also, when encountering
those or read-only values, it no longer skips any array or hash with
the same name.
* "reset" with an argument now skips scalars aliased to typeglobs ("for
$z (*foo) { reset "z" }"). Previously it would corrupt memory or
crash.
* "ucfirst" and "lcfirst" were not respecting the bytes pragma. This was
a regression from Perl 5.12. [perl #117355]
* Changes to "UNIVERSAL::DESTROY" now update DESTROY caches in all
classes, instead of causing classes that have already had objects de-
stroyed to continue using the old sub. This was a regression in Perl
5.18. [perl #114864]
* All known false-positive occurrences of the deprecation warning "Use-
less use of '\'; doesn't escape metacharacter '%c'", added in Perl
5.18.0, have been removed. [perl #119101]
* The value of $^E is now saved across signal handlers on Windows. [perl
#85104]
* A lexical filehandle (as in "open my $fh...") is usually given a name
based on the current package and the name of the variable, e.g.
"main::$fh". Under recursion, the filehandle was losing the "$fh" part
of the name. This has been fixed.
* Uninitialized values returned by XSUBs are no longer exempt from unini-
tialized warnings. [perl #118693]
* "elsif ("")" no longer erroneously produces a warning about void con-
text. [perl #118753]
* Passing "undef" to a subroutine now causes @_ to contain the same
read-only undefined scalar that "undef" returns. Furthermore, "exists
$_[0]" will now return true if "undef" was the first argument. [perl
#7508, #109726]
* Passing a non-existent array element to a subroutine does not usually
autovivify it unless the subroutine modifies its argument. This did
not work correctly with negative indices and with non-existent elements
within the array. The element would be vivified immediately. The de-
layed vivification has been extended to work with those. [perl
#118691]
* Assigning references or globs to the scalar returned by $#foo after the
@foo array has been freed no longer causes assertion failures on debug-
ging builds and memory leaks on regular builds.
* On 64-bit platforms, large ranges like 1..1000000000000 no longer
crash, but eat up all your memory instead. [perl #119161]
* "__DATA__" now puts the "DATA" handle in the right package, even if the
current package has been renamed through glob assignment.
* When "die", "last", "next", "redo", "goto" and "exit" unwind the scope,
it is possible for "DESTROY" recursively to call a subroutine or format
that is currently being exited. It that case, sometimes the lexical
variables inside the sub would start out having values from the outer
call, instead of being undefined as they should. This has been fixed.
[perl #119311]
* ${^MPEN} is no longer treated as a synonym for ${^MATCH}.
* Perl now tries a little harder to return the correct line number in
"(caller)[2]". [perl #115768]
* Line numbers inside multiline quote-like operators are now reported
correctly. [perl #3643]
* "#line" directives inside code embedded in quote-like operators are now
respected.
* Line numbers are now correct inside the second here-doc when two
here-doc markers occur on the same line.
* An optimization in Perl 5.18 made incorrect assumptions causing a bad
interaction with the Devel::CallParser CPAN module. If the module was
loaded then lexical variables declared in separate statements following
a my(...) list might fail to be cleared on scope exit.
* &xsub and "goto &xsub" calls now allow the called subroutine to auto-
vivify elements of @_.
* &xsub and "goto &xsub" no longer crash if *_ has been undefined and has
no ARRAY entry (i.e. @_ does not exist).
* &xsub and "goto &xsub" now work with tied @_.
* Overlong identifiers no longer cause a buffer overflow (and a crash).
They started doing so in Perl 5.18.
* The warning "Scalar value @hash{foo} better written as $hash{foo}" now
produces far fewer false positives. In particular, @hash{+function_re-
turning_a_list} and @hash{ qw "foo bar baz" } no longer warn. The same
applies to array slices. [perl #28380, #114024]
* "$! = EINVAL; waitpid(0, WNOHANG);" no longer goes into an internal in-
finite loop. [perl #85228]
* A possible segmentation fault in filehandle duplication has been fixed.
* A subroutine in @INC can return a reference to a scalar containing the
initial contents of the file. However, that scalar was freed prema-
turely if not referenced elsewhere, giving random results.
* "last" no longer returns values that the same statement has accumulated
so far, fixing amongst other things the long-standing bug that "push
@a, last" would try to return the @a, copying it like a scalar in the
process and resulting in the error, "Bizarre copy of ARRAY in last."
[perl #3112]
* In some cases, closing file handles opened to pipe to or from a
process, which had been duplicated into a standard handle, would call
perl's internal waitpid wrapper with a pid of zero. With the fix for
[perl #85228] this zero pid was passed to "waitpid", possibly blocking
the process. This wait for process zero no longer occurs. [perl
#119893]
* "select" used to ignore magic on the fourth (timeout) argument, leading
to effects such as "select" blocking indefinitely rather than the ex-
pected sleep time. This has now been fixed. [perl #120102]
* The class name in "for my class $foo" is now parsed correctly. In the
case of the second character of the class name being followed by a
digit (e.g. 'a1b') this used to give the error "Missing $ on loop vari-
able". [perl #120112]
* Perl 5.18.0 accidentally disallowed "-bareword" under "use strict" and
"use integer". This has been fixed. [perl #120288]
* "-a" at the start of a line (or a hyphen with any single letter that is
not a filetest operator) no longer produces an erroneous 'Use of "-a"
without parentheses is ambiguous' warning. [perl #120288]
* Lvalue context is now properly propagated into bare blocks and "if" and
"else" blocks in lvalue subroutines. Previously, arrays and hashes
would sometimes incorrectly be flattened when returned in lvalue list
context, or "Bizarre copy" errors could occur. [perl #119797]
* Lvalue context is now propagated to the branches of "||" and "&&" (and
their alphabetic equivalents, "or" and "and"). This means "foreach
(pos $x || pos $y) {...}" now allows "pos" to be modified through $_.
* "stat" and "readline" remember the last handle used; the former for the
special "_" filehandle, the latter for "${^LAST_FH}". "eval "*foo if
0"" where *foo was the last handle passed to "stat" or "readline" could
cause that handle to be forgotten if the handle were not opened yet.
This has been fixed.
* Various cases of "delete $::{a}", "delete $::{ENV}" etc. causing a
crash have been fixed. [perl #54044]
* Setting $! to EACCESS before calling "require" could affect "require"'s
behaviour. This has been fixed.
* The "Can't use \1 to mean $1 in expression" warning message now only
occurs on the right-hand (replacement) part of a substitution. For-
merly it could happen in code embedded in the left-hand side, or in any
other quote-like operator.
* Blessing into a reference ("bless $thisref, $thatref") has long been
disallowed, but magical scalars for the second like $/ and those tied
were exempt. They no longer are. [perl #119809]
* Blessing into a reference was accidentally allowed in 5.18 if the class
argument were a blessed reference with stale method caches (i.e., whose
class had had subs defined since the last method call). They are dis-
allowed once more, as in 5.16.
* "$x->{key}" where $x was declared as "my Class $x" no longer crashes if
a Class::FIELDS subroutine stub has been declared.
* @$obj{'key'} and "${$obj}{key}" used to be exempt from compile-time
field checking ("No such class field"; see fields) but no longer are.
* A nonexistent array element with a large index passed to a subroutine
that ties the array and then tries to access the element no longer re-
sults in a crash.
* Declaring a subroutine stub named NEGATIVE_INDICES no longer makes neg-
ative array indices crash when the current package is a tied array
class.
* Declaring a "require", "glob", or "do" subroutine stub in the
CORE::GLOBAL:: package no longer makes compilation of calls to the cor-
responding functions crash.
* Aliasing CORE::GLOBAL:: functions to constants stopped working in Perl
5.10 but has now been fixed.
* When `...` or "qx/.../" calls a "readpipe" override, double-quotish in-
terpolation now happens, as is the case when there is no override.
Previously, the presence of an override would make these quote-like op-
erators act like "q{}", suppressing interpolation. [perl #115330]
* "<<<`...`" here-docs (with backticks as the delimiters) now call "read-
pipe" overrides. [perl #119827]
* &CORE::exit() and &CORE::die() now respect vmsish hints.
* Undefining a glob that triggers a DESTROY method that undefines the
same glob is now safe. It used to produce "Attempt to free unrefer-
enced glob pointer" warnings and leak memory.
* If subroutine redefinition ("eval 'sub foo{}'" or "newXS" for XS code)
triggers a DESTROY method on the sub that is being redefined, and that
method assigns a subroutine to the same slot ("*foo = sub {}"), $_[0]
is no longer left pointing to a freed scalar. Now DESTROY is delayed
until the new subroutine has been installed.
* On Windows, perl no longer calls CloseHandle() on a socket handle.
This makes debugging easier on Windows by removing certain irrelevant
bad handle exceptions. It also fixes a race condition that made socket
functions randomly fail in a Perl process with multiple OS threads, and
possible test failures in dist/IO/t/cachepropagate-tcp.t. [perl
#120091/118059]
* Formats involving UTF-8 encoded strings, or strange vars like ties,
overloads, or stringified refs (and in recent perls, pure NOK vars)
would generally do the wrong thing in formats when the var is treated
as a string and repeatedly chopped, as in "^<<<~~" and similar. This
has now been resolved. [perl #33832/45325/113868/119847/119849/119851]
* "semctl(..., SETVAL, ...)" would set the semaphore to the top 32-bits
of the supplied integer instead of the bottom 32-bits on 64-bit big-en-
dian systems. [perl #120635]
* readdir() now only sets $! on error. $! is no longer set to "EBADF"
when then terminating "undef" is read from the directory unless the
system call sets $!. [perl #118651]
* &CORE::glob no longer causes an intermittent crash due to perl's stack
getting corrupted. [perl #119993]
* "open" with layers that load modules (e.g., "<:encoding(utf8)") no
longer runs the risk of crashing due to stack corruption.
* Perl 5.18 broke autoloading via "->SUPER::foo" method calls by looking
up AUTOLOAD from the current package rather than the current package's
superclass. This has been fixed. [perl #120694]
* A longstanding bug causing "do {} until CONSTANT", where the constant
holds a true value, to read unallocated memory has been resolved. This
would usually happen after a syntax error. In past versions of Perl it
has crashed intermittently. [perl #72406]
* Fix HP-UX $! failure. HP-UX strerror() returns an empty string for an
unknown error code. This caused an assertion to fail under DEBUGGING
builds. Now instead, the returned string for "$!" contains text indi-
cating the code is for an unknown error.
* Individually-tied elements of @INC (as in "tie $INC[0]...") are now
handled correctly. Formerly, whether a sub returned by such a tied el-
ement would be treated as a sub depended on whether a FETCH had oc-
curred previously.
* "getc" on a byte-sized handle after the same "getc" operator had been
used on a utf8 handle used to treat the bytes as utf8, resulting in er-
ratic behavior (e.g., malformed UTF-8 warnings).
* An initial "{" at the beginning of a format argument line was always
interpreted as the beginning of a block prior to v5.18. In Perl v5.18,
it started being treated as an ambiguous token. The parser would guess
whether it was supposed to be an anonymous hash constructor or a block
based on the contents. Now the previous behaviour has been restored.
[perl #119973]
* In Perl v5.18 "undef *_; goto &sub" and "local *_; goto &sub" started
crashing. This has been fixed. [perl #119949]
* Backticks ( `` or " qx// ") combined with multiple threads on Win32
could result in output sent to stdout on one thread being captured by
backticks of an external command in another thread.
This could occur for pseudo-forked processes too, as Win32's
pseudo-fork is implemented in terms of threads. [perl #77672]
* "open $fh, ">+", undef" no longer leaks memory when TMPDIR is set but
points to a directory a temporary file cannot be created in. [perl
#120951]
* " for ( $h{k} || '' ) " no longer auto-vivifies $h{k}. [perl #120374]
* On Windows machines, Perl now emulates the POSIX use of the environment
for locale initialization. Previously, the environment was ignored.
See "ENVIRONMENT" in perllocale.
* Fixed a crash when destroying a self-referencing GLOB. [perl #121242]
Known Problems
* IO::Socket is known to fail tests on AIX 5.3. There is a patch
in the request tracker,
#120835, which may be applied to future releases.
* The following modules are known to have test failures with this version
of Perl. Patches have been submitted, so there will hopefully be new
releases soon:
* Data::Structure::Util version 0.15
* HTML::StripScripts version 1.05
* List::Gather version 0.08.
Obituary
Diana Rosa, 27, of Rio de Janeiro, went to her long rest on May 10, 2014,
along with the plush camel she kept hanging on her computer screen all the
time. She was a passionate Perl hacker who loved the language and its com-
munity, and who never missed a Rio.pm event. She was a true artist, an en-
thusiast about writing code, singing arias and graffiting walls. We'll
never forget you.
Greg McCarroll died on August 28, 2013.
Greg was well known for many good reasons. He was one of the organisers of
the first YAPC::Europe, which concluded with an unscheduled auction where
he frantically tried to raise extra money to avoid the conference making a
loss. It was Greg who mistakenly arrived for a london.pm meeting a week
late; some years later he was the one who sold the choice of official meet-
ing date at a YAPC::Europe auction, and eventually as glorious leader of
london.pm he got to inherit the irreverent confusion that he had created.
Always helpful, friendly and cheerfully optimistic, you will be missed, but
never forgotten.
Acknowledgements
Perl 5.20.0 represents approximately 12 months of development since Perl
5.18.0 and contains approximately 470,000 lines of changes across 2,900
files from 124 authors.
Excluding auto-generated files, documentation and release tools, there were
approximately 280,000 lines of changes to 1,800 .pm, .t, .c and .h files.
Perl continues to flourish into its third decade thanks to a vibrant commu-
nity of users and developers. The following people are known to have con-
tributed the improvements that became Perl 5.20.0:
Aaron Crane, Abhijit Menon-Sen, Abigail, Abir Viqar, Alan Haggai Alavi,
Alan Hourihane, Alexander Voronov, Alexandr Ciornii, Andy Dougherty, Anno
Siegel, Aristotle Pagaltzis, Arthur Axel 'fREW' Schmidt, Brad Gilbert,
Brendan Byrd, Brian Childs, Brian Fraser, Brian Gottreu, Chris 'BinGOs'
Williams, Christian Millour, Colin Kuskie, Craig A. Berry, Dabrien 'Dabe'
Murphy, Dagfinn Ilmari MannsAker, Daniel Dragan, Darin McBride, David
Golden, David Leadbeater, David Mitchell, David Nicol, David Steinbrunner,
Dennis Kaarsemaker, Dominic Hargreaves, Ed Avis, Eric Brine, Evan Zacks,
Father Chrysostomos, Florian Ragwitz, FranAois Perrad, Gavin Shelley,
Gideon Israel Dsouza, Gisle Aas, Graham Knop, H.Merijn Brand, Hauke D,
Heiko Eissfeldt, Hiroo Hayashi, Hojung Youn, James E Keenan, Jarkko Hi-
etaniemi, Jerry D. Hedden, Jess Robinson, Jesse Luehrs, Johan Vromans, John
Gardiner Myers, John Goodyear, John P. Linderman, John Peacock, kafka,
Kang-min Liu, Karen Etheridge, Karl Williamson, Keedi Kim, Kent Fredric,
kevin dawson, Kevin Falcone, Kevin Ryde, Leon Timmermans, Lukas Mai, Marc
Simpson, Marcel GrA1/4nauer, Marco Peereboom, Marcus Holland-Moritz, Mark
Jason Dominus, Martin McGrath, Matthew Horsfall, Max Maischein, Mike Do-
herty, Moritz Lenz, Nathan Glenn, Nathan Trapuzzano, Neil Bowers, Neil
Williams, Nicholas Clark, Niels Thykier, Niko Tyni, Olivier MenguA(C),
Owain G. Ainsworth, Paul Green, Paul Johnson, Peter John Acklam, Peter
Martini, Peter Rabbitson, Petr PAsaA, Philip Boulain, Philip Guenther, Pi-
otr Roszatycki, Rafael Garcia-Suarez, Reini Urban, Reuben Thomas, Ricardo
Signes, Ruslan Zakirov, Sergey Alekseev, Shirakata Kentaro, Shlomi Fish,
Slaven Rezic, Smylers, Steffen MA1/4ller, Steve Hay, Sullivan Beck, Thomas
Sibley, Tobias Leich, Toby Inkster, Tokuhiro Matsuno, Tom Christiansen, Tom
Hukins, Tony Cook, Victor Efimov, Viktor Turskyi, Vladimir Timofeev, YA-
MASHINA Hio, Yves Orton, Zefram, ZsbAn Ambrus, Avar ArnfjArA Bjarmason.
The list above is almost certainly incomplete as it is automatically gener-
ated 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
http://rt.perl.org/perlbug/ . 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 inap-
propriate to send to a publicly archived mailing list, then please send it
to perl5-security-report@perl.org. 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 ad-
dress for security issues in the Perl core, not for modules independently
distributed on CPAN.
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.
perl v5.44.0 2026-06-22 PERL5200DELTA(1)