2200 lines
63 KiB
Plaintext
2200 lines
63 KiB
Plaintext
=encoding utf8
|
|
|
|
=head1 NAME
|
|
|
|
perl5240delta - what is new for perl v5.24.0
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This document describes the differences between the 5.22.0 release and the
|
|
5.24.0 release.
|
|
|
|
=head1 Core Enhancements
|
|
|
|
=head2 Postfix dereferencing is no longer experimental
|
|
|
|
Using the C<postderef> and C<postderef_qq> features no longer emits a
|
|
warning. Existing code that disables the C<experimental::postderef> warning
|
|
category that they previously used will continue to work. The C<postderef>
|
|
feature has no effect; all Perl code can use postfix dereferencing,
|
|
regardless of what feature declarations are in scope. The C<5.24> feature
|
|
bundle now includes the C<postderef_qq> feature.
|
|
|
|
=head2 Unicode 8.0 is now supported
|
|
|
|
For details on what is in this release, see
|
|
L<http://www.unicode.org/versions/Unicode8.0.0/>.
|
|
|
|
=head2 perl will now croak when closing an in-place output file fails
|
|
|
|
Until now, failure to close the output file for an in-place edit was not
|
|
detected, meaning that the input file could be clobbered without the edit being
|
|
successfully completed. Now, when the output file cannot be closed
|
|
successfully, an exception is raised.
|
|
|
|
=head2 New C<\b{lb}> boundary in regular expressions
|
|
|
|
C<lb> stands for Line Break. It is a Unicode property
|
|
that determines where a line of text is suitable to break (typically so
|
|
that it can be output without overflowing the available horizontal
|
|
space). This capability has long been furnished by the
|
|
L<Unicode::LineBreak> module, but now a light-weight, non-customizable
|
|
version that is suitable for many purposes is in core Perl.
|
|
|
|
=head2 C<qr/(?[ ])/> now works in UTF-8 locales
|
|
|
|
L<Extended Bracketed Character Classes|perlrecharclass/Extended Bracketed Character Classes>
|
|
now will successfully compile when S<C<use locale>> is in effect. The compiled
|
|
pattern will use standard Unicode rules. If the runtime locale is not a
|
|
UTF-8 one, a warning is raised and standard Unicode rules are used
|
|
anyway. No tainting is done since the outcome does not actually depend
|
|
on the locale.
|
|
|
|
=head2 Integer shift (C<< << >> and C<< >> >>) now more explicitly defined
|
|
|
|
Negative shifts are reverse shifts: left shift becomes right shift,
|
|
and right shift becomes left shift.
|
|
|
|
Shifting by the number of bits in a native integer (or more) is zero,
|
|
except when the "overshift" is right shifting a negative value under
|
|
C<use integer>, in which case the result is -1 (arithmetic shift).
|
|
|
|
Until now negative shifting and overshifting have been undefined
|
|
because they have relied on whatever the C implementation happens
|
|
to do. For example, for the overshift a common C behavior is
|
|
"modulo shift":
|
|
|
|
1 >> 64 == 1 >> (64 % 64) == 1 >> 0 == 1 # Common C behavior.
|
|
|
|
# And the same for <<, while Perl now produces 0 for both.
|
|
|
|
Now these behaviors are well-defined under Perl, regardless of what
|
|
the underlying C implementation does. Note, however, that you are still
|
|
constrained by the native integer width: you need to know how far left you
|
|
can go. You can use for example:
|
|
|
|
use Config;
|
|
my $wordbits = $Config{uvsize} * 8; # Or $Config{uvsize} << 3.
|
|
|
|
If you need a more bits on the left shift, you can use for example
|
|
the C<bigint> pragma, or the C<Bit::Vector> module from CPAN.
|
|
|
|
=head2 printf and sprintf now allow reordered precision arguments
|
|
|
|
That is, C<< sprintf '|%.*2$d|', 2, 3 >> now returns C<|002|>. This extends
|
|
the existing reordering mechanism (which allows reordering for arguments
|
|
that are used as format fields, widths, and vector separators).
|
|
|
|
=head2 More fields provided to C<sigaction> callback with C<SA_SIGINFO>
|
|
|
|
When passing the C<SA_SIGINFO> flag to L<sigaction|POSIX/sigaction>, the
|
|
C<errno>, C<status>, C<uid>, C<pid>, C<addr> and C<band> fields are now
|
|
included in the hash passed to the handler, if supported by the
|
|
platform.
|
|
|
|
=head2 Hashbang redirection to Perl 6
|
|
|
|
Previously perl would redirect to another interpreter if it found a
|
|
hashbang path unless the path contains "perl" (see L<perlrun>). To improve
|
|
compatibility with Perl 6 this behavior has been extended to also redirect
|
|
if "perl" is followed by "6".
|
|
|
|
=head1 Security
|
|
|
|
=head2 Set proper umask before calling C<mkstemp(3)>
|
|
|
|
In 5.22 perl started setting umask to 0600 before calling C<mkstemp(3)>
|
|
and restoring it afterwards. This wrongfully tells C<open(2)> to strip
|
|
the owner read and write bits from the given mode before applying it,
|
|
rather than the intended negation of leaving only those bits in place.
|
|
|
|
Systems that use mode 0666 in C<mkstemp(3)> (like old versions of
|
|
glibc) create a file with permissions 0066, leaving world read and
|
|
write permissions regardless of current umask.
|
|
|
|
This has been fixed by using umask 0177 instead. [perl #127322]
|
|
|
|
=head2 Fix out of boundary access in Win32 path handling
|
|
|
|
This is CVE-2015-8608. For more information see
|
|
L<[perl #126755]|https://rt.perl.org/Ticket/Display.html?id=126755>
|
|
|
|
=head2 Fix loss of taint in canonpath
|
|
|
|
This is CVE-2015-8607. For more information see
|
|
L<[perl #126862]|https://rt.perl.org/Ticket/Display.html?id=126862>
|
|
|
|
=head2 Avoid accessing uninitialized memory in win32 C<crypt()>
|
|
|
|
Added validation that will detect both a short salt and invalid characters
|
|
in the salt.
|
|
L<[perl #126922]|https://rt.perl.org/Ticket/Display.html?id=126922>
|
|
|
|
=head2 Remove duplicate environment variables from C<environ>
|
|
|
|
Previously, if an environment variable appeared more than once in
|
|
C<environ[]>, C<%ENV> would contain the last entry for that name,
|
|
while a typical C<getenv()> would return the first entry. We now
|
|
make sure C<%ENV> contains the same as what C<getenv> returns.
|
|
|
|
Second, we remove duplicates from C<environ[]>, so if a setting
|
|
with that name is set in C<%ENV>, we won't pass an unsafe value
|
|
to a child process.
|
|
|
|
[CVE-2016-2381]
|
|
|
|
=head1 Incompatible Changes
|
|
|
|
=head2 The C<autoderef> feature has been removed
|
|
|
|
The experimental C<autoderef> feature (which allowed calling C<push>,
|
|
C<pop>, C<shift>, C<unshift>, C<splice>, C<keys>, C<values>, and C<each> on
|
|
a scalar argument) has been deemed unsuccessful. It has now been removed;
|
|
trying to use the feature (or to disable the C<experimental::autoderef>
|
|
warning it previously triggered) now yields an exception.
|
|
|
|
=head2 Lexical $_ has been removed
|
|
|
|
C<my $_> was introduced in Perl 5.10, and subsequently caused much confusion
|
|
with no obvious solution. In Perl 5.18.0, it was made experimental on the
|
|
theory that it would either be removed or redesigned in a less confusing (but
|
|
backward-incompatible) way. Over the following years, no alternatives were
|
|
proposed. The feature has now been removed and will fail to compile.
|
|
|
|
=head2 C<qr/\b{wb}/> is now tailored to Perl expectations
|
|
|
|
This is now more suited to be a drop-in replacement for plain C<\b>, but
|
|
giving better results for parsing natural language. Previously it
|
|
strictly followed the current Unicode rules which calls for it to match
|
|
between each white space character. Now it doesn't generally match
|
|
within spans of white space, behaving like C<\b> does. See
|
|
L<perlrebackslash/\b{wb}>
|
|
|
|
=head2 Regular expression compilation errors
|
|
|
|
Some regular expression patterns that had runtime errors now
|
|
don't compile at all.
|
|
|
|
Almost all Unicode properties using the C<\p{}> and C<\P{}> regular
|
|
expression pattern constructs are now checked for validity at pattern
|
|
compilation time, and invalid ones will cause the program to not
|
|
compile. In earlier releases, this check was often deferred until run
|
|
time. Whenever an error check is moved from run- to compile time,
|
|
erroneous code is caught 100% of the time, whereas before it would only
|
|
get caught if and when the offending portion actually gets executed,
|
|
which for unreachable code might be never.
|
|
|
|
=head2 C<qr/\N{}/> now disallowed under C<use re "strict">
|
|
|
|
An empty C<\N{}> makes no sense, but for backwards compatibility is
|
|
accepted as doing nothing, though a deprecation warning is raised by
|
|
default. But now this is a fatal error under the experimental feature
|
|
L<re/'strict' mode>.
|
|
|
|
=head2 Nested declarations are now disallowed
|
|
|
|
A C<my>, C<our>, or C<state> declaration is no longer allowed inside
|
|
of another C<my>, C<our>, or C<state> declaration.
|
|
|
|
For example, these are now fatal:
|
|
|
|
my ($x, my($y));
|
|
our (my $x);
|
|
|
|
L<[perl #125587]|https://rt.perl.org/Ticket/Display.html?id=125587>
|
|
|
|
L<[perl #121058]|https://rt.perl.org/Ticket/Display.html?id=121058>
|
|
|
|
=head2 The C</\C/> character class has been removed.
|
|
|
|
This regular expression character class was deprecated in v5.20.0 and has
|
|
produced a deprecation warning since v5.22.0. It is now a compile-time
|
|
error. If you need to examine the individual bytes that make up a
|
|
UTF8-encoded character, then use C<utf8::encode()> on the string (or a
|
|
copy) first.
|
|
|
|
=head2 C<chdir('')> no longer chdirs home
|
|
|
|
Using C<chdir('')> or C<chdir(undef)> to chdir home has been deprecated since
|
|
perl v5.8, and will now fail. Use C<chdir()> instead.
|
|
|
|
=head2 ASCII characters in variable names must now be all visible
|
|
|
|
It was legal until now on ASCII platforms for variable names to contain
|
|
non-graphical ASCII control characters (ordinals 0 through 31, and 127,
|
|
which are the C0 controls and C<DELETE>). This usage has been
|
|
deprecated since v5.20, and as of now causes a syntax error. The
|
|
variables these names referred to are special, reserved by Perl for
|
|
whatever use it may choose, now, or in the future. Each such variable
|
|
has an alternative way of spelling it. Instead of the single
|
|
non-graphic control character, a two character sequence beginning with a
|
|
caret is used, like C<$^]> and C<${^GLOBAL_PHASE}>. Details are at
|
|
L<perlvar>. It remains legal, though unwise and deprecated (raising a
|
|
deprecation warning), to use certain non-graphic non-ASCII characters in
|
|
variables names when not under S<C<use utf8>>. No code should do this,
|
|
as all such variables are reserved by Perl, and Perl doesn't currently
|
|
define any of them (but could at any time, without notice).
|
|
|
|
=head2 An off by one issue in C<$Carp::MaxArgNums> has been fixed
|
|
|
|
C<$Carp::MaxArgNums> is supposed to be the number of arguments to display.
|
|
Prior to this version, it was instead showing C<$Carp::MaxArgNums> + 1 arguments,
|
|
contrary to the documentation.
|
|
|
|
=head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>.
|
|
|
|
The experimental Extended Bracketed Character Classes can contain regular
|
|
bracketed character classes within them. These differ from regular ones in
|
|
that white space is generally ignored, unless escaped by preceding it with a
|
|
backslash. The white space that is ignored is now limited to just tab C<\t>
|
|
and SPACE characters. Previously, it was any white space. See
|
|
L<perlrecharclass/Extended Bracketed Character Classes>.
|
|
|
|
=head1 Deprecations
|
|
|
|
=head2 Using code points above the platform's C<IV_MAX> is now deprecated
|
|
|
|
Unicode defines code points in the range C<0..0x10FFFF>. Some standards
|
|
at one time defined them up to 2**31 - 1, but Perl has allowed them to
|
|
be as high as anything that will fit in a word on the platform being
|
|
used. However, use of those above the platform's C<IV_MAX> is broken in
|
|
some constructs, notably C<tr///>, regular expression patterns involving
|
|
quantifiers, and in some arithmetic and comparison operations, such as
|
|
being the upper limit of a loop. Now the use of such code points raises
|
|
a deprecation warning, unless that warning category is turned off.
|
|
C<IV_MAX> is typically 2**31 -1 on 32-bit platforms, and 2**63-1 on
|
|
64-bit ones.
|
|
|
|
=head2 Doing bitwise operations on strings containing code points above
|
|
0xFF is deprecated
|
|
|
|
The string bitwise operators treat their operands as strings of bytes,
|
|
and values beyond 0xFF are nonsensical in this context. To operate on
|
|
encoded bytes, first encode the strings. To operate on code points'
|
|
numeric values, use C<split> and C<map ord>. In the future, this
|
|
warning will be replaced by an exception.
|
|
|
|
=head2 C<sysread()>, C<syswrite()>, C<recv()> and C<send()> are deprecated on
|
|
:utf8 handles
|
|
|
|
The C<sysread()>, C<recv()>, C<syswrite()> and C<send()> operators
|
|
are deprecated on handles that have the C<:utf8> layer, either
|
|
explicitly, or implicitly, eg., with the C<:encoding(UTF-16LE)> layer.
|
|
|
|
Both C<sysread()> and C<recv()> currently use only the C<:utf8> flag for the
|
|
stream, ignoring the actual layers. Since C<sysread()> and C<recv()> do no
|
|
UTF-8 validation they can end up creating invalidly encoded scalars.
|
|
|
|
Similarly, C<syswrite()> and C<send()> use only the C<:utf8> flag, otherwise
|
|
ignoring any layers. If the flag is set, both write the value UTF-8
|
|
encoded, even if the layer is some different encoding, such as the
|
|
example above.
|
|
|
|
Ideally, all of these operators would completely ignore the C<:utf8>
|
|
state, working only with bytes, but this would result in silently
|
|
breaking existing code. To avoid this a future version of perl will
|
|
throw an exception when any of C<sysread()>, C<recv()>, C<syswrite()> or C<send()>
|
|
are called on handle with the C<:utf8> layer.
|
|
|
|
=head1 Performance Enhancements
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The overhead of scope entry and exit has been considerably reduced, so
|
|
for example subroutine calls, loops and basic blocks are all faster now.
|
|
This empty function call now takes about a third less time to execute:
|
|
|
|
sub f{} f();
|
|
|
|
=item *
|
|
|
|
Many languages, such as Chinese, are caseless. Perl now knows about
|
|
most common ones, and skips much of the work when
|
|
a program tries to change case in them (like C<ucfirst()>) or match
|
|
caselessly (C<qr//i>). This will speed up a program, such as a web
|
|
server, that can operate on multiple languages, while it is operating on a
|
|
caseless one.
|
|
|
|
=item *
|
|
|
|
C</fixed-substr/> has been made much faster.
|
|
|
|
On platforms with a libc C<memchr()> implementation which makes good use of
|
|
underlying hardware support, patterns which include fixed substrings will now
|
|
often be much faster; for example with glibc on a recent x86_64 CPU, this:
|
|
|
|
$s = "a" x 1000 . "wxyz";
|
|
$s =~ /wxyz/ for 1..30000
|
|
|
|
is now about 7 times faster. On systems with slow C<memchr()>, e.g. 32-bit ARM
|
|
Raspberry Pi, there will be a small or little speedup. Conversely, some
|
|
pathological cases, such as C<"ab" x 1000 =~ /aa/> will be slower now; up to 3
|
|
times slower on the rPi, 1.5x slower on x86_64.
|
|
|
|
=item *
|
|
|
|
Faster addition, subtraction and multiplication.
|
|
|
|
Since 5.8.0, arithmetic became slower due to the need to support
|
|
64-bit integers. To deal with 64-bit integers, a lot more corner
|
|
cases need to be checked, which adds time. We now detect common
|
|
cases where there is no need to check for those corner cases,
|
|
and special-case them.
|
|
|
|
=item *
|
|
|
|
Preincrement, predecrement, postincrement, and postdecrement have been
|
|
made faster by internally splitting the functions which handled multiple
|
|
cases into different functions.
|
|
|
|
=item *
|
|
|
|
Creating Perl debugger data structures (see L<perldebguts/"Debugger Internals">)
|
|
for XSUBs and const subs has been removed. This removed one glob/scalar combo
|
|
for each unique C<.c> file that XSUBs and const subs came from. On startup
|
|
(C<perl -e"0">) about half a dozen glob/scalar debugger combos were created.
|
|
Loading XS modules created more glob/scalar combos. These things were
|
|
being created regardless of whether the perl debugger was being used,
|
|
and despite the fact that it can't debug C code anyway
|
|
|
|
=item *
|
|
|
|
On Win32, C<stat>ing or C<-X>ing a path, if the file or directory does not
|
|
exist, is now 3.5x faster than before.
|
|
|
|
=item *
|
|
|
|
Single arguments in list assign are now slightly faster:
|
|
|
|
($x) = (...);
|
|
(...) = ($x);
|
|
|
|
=item *
|
|
|
|
Less peak memory is now used when compiling regular expression patterns.
|
|
|
|
=back
|
|
|
|
=head1 Modules and Pragmata
|
|
|
|
=head2 Updated Modules and Pragmata
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
L<arybase> has been upgraded from version 0.10 to 0.11.
|
|
|
|
=item *
|
|
|
|
L<Attribute::Handlers> has been upgraded from version 0.97 to 0.99.
|
|
|
|
=item *
|
|
|
|
L<autodie> has been upgraded from version 2.26 to 2.29.
|
|
|
|
=item *
|
|
|
|
L<autouse> has been upgraded from version 1.08 to 1.11.
|
|
|
|
=item *
|
|
|
|
L<B> has been upgraded from version 1.58 to 1.62.
|
|
|
|
=item *
|
|
|
|
L<B::Deparse> has been upgraded from version 1.35 to 1.37.
|
|
|
|
=item *
|
|
|
|
L<base> has been upgraded from version 2.22 to 2.23.
|
|
|
|
=item *
|
|
|
|
L<Benchmark> has been upgraded from version 1.2 to 1.22.
|
|
|
|
=item *
|
|
|
|
L<bignum> has been upgraded from version 0.39 to 0.42.
|
|
|
|
=item *
|
|
|
|
L<bytes> has been upgraded from version 1.04 to 1.05.
|
|
|
|
=item *
|
|
|
|
L<Carp> has been upgraded from version 1.36 to 1.40.
|
|
|
|
=item *
|
|
|
|
L<Compress::Raw::Bzip2> has been upgraded from version 2.068 to 2.069.
|
|
|
|
=item *
|
|
|
|
L<Compress::Raw::Zlib> has been upgraded from version 2.068 to 2.069.
|
|
|
|
=item *
|
|
|
|
L<Config::Perl::V> has been upgraded from version 0.24 to 0.25.
|
|
|
|
=item *
|
|
|
|
L<CPAN::Meta> has been upgraded from version 2.150001 to 2.150005.
|
|
|
|
=item *
|
|
|
|
L<CPAN::Meta::Requirements> has been upgraded from version 2.132 to 2.140.
|
|
|
|
=item *
|
|
|
|
L<CPAN::Meta::YAML> has been upgraded from version 0.012 to 0.018.
|
|
|
|
=item *
|
|
|
|
L<Data::Dumper> has been upgraded from version 2.158 to 2.160.
|
|
|
|
=item *
|
|
|
|
L<Devel::Peek> has been upgraded from version 1.22 to 1.23.
|
|
|
|
=item *
|
|
|
|
L<Devel::PPPort> has been upgraded from version 3.31 to 3.32.
|
|
|
|
=item *
|
|
|
|
L<Dumpvalue> has been upgraded from version 1.17 to 1.18.
|
|
|
|
=item *
|
|
|
|
L<DynaLoader> has been upgraded from version 1.32 to 1.38.
|
|
|
|
=item *
|
|
|
|
L<Encode> has been upgraded from version 2.72 to 2.80.
|
|
|
|
=item *
|
|
|
|
L<encoding> has been upgraded from version 2.14 to 2.17.
|
|
|
|
=item *
|
|
|
|
L<encoding::warnings> has been upgraded from version 0.11 to 0.12.
|
|
|
|
=item *
|
|
|
|
L<English> has been upgraded from version 1.09 to 1.10.
|
|
|
|
=item *
|
|
|
|
L<Errno> has been upgraded from version 1.23 to 1.25.
|
|
|
|
=item *
|
|
|
|
L<experimental> has been upgraded from version 0.013 to 0.016.
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::CBuilder> has been upgraded from version 0.280221 to 0.280225.
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::Embed> has been upgraded from version 1.32 to 1.33.
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::MakeMaker> has been upgraded from version 7.04_01 to 7.10_01.
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::ParseXS> has been upgraded from version 3.28 to 3.31.
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::Typemaps> has been upgraded from version 3.28 to 3.31.
|
|
|
|
=item *
|
|
|
|
L<feature> has been upgraded from version 1.40 to 1.42.
|
|
|
|
=item *
|
|
|
|
L<fields> has been upgraded from version 2.17 to 2.23.
|
|
|
|
=item *
|
|
|
|
L<File::Find> has been upgraded from version 1.29 to 1.34.
|
|
|
|
=item *
|
|
|
|
L<File::Glob> has been upgraded from version 1.24 to 1.26.
|
|
|
|
=item *
|
|
|
|
L<File::Path> has been upgraded from version 2.09 to 2.12_01.
|
|
|
|
=item *
|
|
|
|
L<File::Spec> has been upgraded from version 3.56 to 3.63.
|
|
|
|
=item *
|
|
|
|
L<Filter::Util::Call> has been upgraded from version 1.54 to 1.55.
|
|
|
|
=item *
|
|
|
|
L<Getopt::Long> has been upgraded from version 2.45 to 2.48.
|
|
|
|
=item *
|
|
|
|
L<Hash::Util> has been upgraded from version 0.18 to 0.19.
|
|
|
|
=item *
|
|
|
|
L<Hash::Util::FieldHash> has been upgraded from version 1.15 to 1.19.
|
|
|
|
=item *
|
|
|
|
L<HTTP::Tiny> has been upgraded from version 0.054 to 0.056.
|
|
|
|
=item *
|
|
|
|
L<I18N::Langinfo> has been upgraded from version 0.12 to 0.13.
|
|
|
|
=item *
|
|
|
|
L<if> has been upgraded from version 0.0604 to 0.0606.
|
|
|
|
=item *
|
|
|
|
L<IO> has been upgraded from version 1.35 to 1.36.
|
|
|
|
=item *
|
|
|
|
IO-Compress has been upgraded from version 2.068 to 2.069.
|
|
|
|
=item *
|
|
|
|
L<IPC::Open3> has been upgraded from version 1.18 to 1.20.
|
|
|
|
=item *
|
|
|
|
L<IPC::SysV> has been upgraded from version 2.04 to 2.06_01.
|
|
|
|
=item *
|
|
|
|
L<List::Util> has been upgraded from version 1.41 to 1.42_02.
|
|
|
|
=item *
|
|
|
|
L<locale> has been upgraded from version 1.06 to 1.08.
|
|
|
|
=item *
|
|
|
|
L<Locale::Codes> has been upgraded from version 3.34 to 3.37.
|
|
|
|
=item *
|
|
|
|
L<Math::BigInt> has been upgraded from version 1.9997 to 1.999715.
|
|
|
|
=item *
|
|
|
|
L<Math::BigInt::FastCalc> has been upgraded from version 0.31 to 0.40.
|
|
|
|
=item *
|
|
|
|
L<Math::BigRat> has been upgraded from version 0.2608 to 0.260802.
|
|
|
|
=item *
|
|
|
|
L<Module::CoreList> has been upgraded from version 5.20150520 to 5.20160320.
|
|
|
|
=item *
|
|
|
|
L<Module::Metadata> has been upgraded from version 1.000026 to 1.000031.
|
|
|
|
=item *
|
|
|
|
L<mro> has been upgraded from version 1.17 to 1.18.
|
|
|
|
=item *
|
|
|
|
L<ODBM_File> has been upgraded from version 1.12 to 1.14.
|
|
|
|
=item *
|
|
|
|
L<Opcode> has been upgraded from version 1.32 to 1.34.
|
|
|
|
=item *
|
|
|
|
L<parent> has been upgraded from version 0.232 to 0.234.
|
|
|
|
=item *
|
|
|
|
L<Parse::CPAN::Meta> has been upgraded from version 1.4414 to 1.4417.
|
|
|
|
=item *
|
|
|
|
L<Perl::OSType> has been upgraded from version 1.008 to 1.009.
|
|
|
|
=item *
|
|
|
|
L<perlfaq> has been upgraded from version 5.021009 to 5.021010.
|
|
|
|
=item *
|
|
|
|
L<PerlIO::encoding> has been upgraded from version 0.21 to 0.24.
|
|
|
|
=item *
|
|
|
|
L<PerlIO::mmap> has been upgraded from version 0.014 to 0.016.
|
|
|
|
=item *
|
|
|
|
L<PerlIO::scalar> has been upgraded from version 0.22 to 0.24.
|
|
|
|
=item *
|
|
|
|
L<PerlIO::via> has been upgraded from version 0.15 to 0.16.
|
|
|
|
=item *
|
|
|
|
L<Pod::Functions> has been upgraded from version 1.09 to 1.10.
|
|
|
|
=item *
|
|
|
|
L<Pod::Perldoc> has been upgraded from version 3.25 to 3.25_02.
|
|
|
|
=item *
|
|
|
|
L<Pod::Simple> has been upgraded from version 3.29 to 3.32.
|
|
|
|
=item *
|
|
|
|
L<Pod::Usage> has been upgraded from version 1.64 to 1.68.
|
|
|
|
=item *
|
|
|
|
L<POSIX> has been upgraded from version 1.53 to 1.65.
|
|
|
|
=item *
|
|
|
|
L<Scalar::Util> has been upgraded from version 1.41 to 1.42_02.
|
|
|
|
=item *
|
|
|
|
L<SDBM_File> has been upgraded from version 1.13 to 1.14.
|
|
|
|
=item *
|
|
|
|
L<SelfLoader> has been upgraded from version 1.22 to 1.23.
|
|
|
|
=item *
|
|
|
|
L<Socket> has been upgraded from version 2.018 to 2.020_03.
|
|
|
|
=item *
|
|
|
|
L<Storable> has been upgraded from version 2.53 to 2.56.
|
|
|
|
=item *
|
|
|
|
L<strict> has been upgraded from version 1.09 to 1.11.
|
|
|
|
=item *
|
|
|
|
L<Term::ANSIColor> has been upgraded from version 4.03 to 4.04.
|
|
|
|
=item *
|
|
|
|
L<Term::Cap> has been upgraded from version 1.15 to 1.17.
|
|
|
|
=item *
|
|
|
|
L<Test> has been upgraded from version 1.26 to 1.28.
|
|
|
|
=item *
|
|
|
|
L<Test::Harness> has been upgraded from version 3.35 to 3.36.
|
|
|
|
=item *
|
|
|
|
L<Thread::Queue> has been upgraded from version 3.05 to 3.08.
|
|
|
|
=item *
|
|
|
|
L<threads> has been upgraded from version 2.01 to 2.06.
|
|
|
|
=item *
|
|
|
|
L<threads::shared> has been upgraded from version 1.48 to 1.50.
|
|
|
|
=item *
|
|
|
|
L<Tie::File> has been upgraded from version 1.01 to 1.02.
|
|
|
|
=item *
|
|
|
|
L<Tie::Scalar> has been upgraded from version 1.03 to 1.04.
|
|
|
|
=item *
|
|
|
|
L<Time::HiRes> has been upgraded from version 1.9726 to 1.9732.
|
|
|
|
=item *
|
|
|
|
L<Time::Piece> has been upgraded from version 1.29 to 1.31.
|
|
|
|
=item *
|
|
|
|
L<Unicode::Collate> has been upgraded from version 1.12 to 1.14.
|
|
|
|
=item *
|
|
|
|
L<Unicode::Normalize> has been upgraded from version 1.18 to 1.25.
|
|
|
|
=item *
|
|
|
|
L<Unicode::UCD> has been upgraded from version 0.61 to 0.64.
|
|
|
|
=item *
|
|
|
|
L<UNIVERSAL> has been upgraded from version 1.12 to 1.13.
|
|
|
|
=item *
|
|
|
|
L<utf8> has been upgraded from version 1.17 to 1.19.
|
|
|
|
=item *
|
|
|
|
L<version> has been upgraded from version 0.9909 to 0.9916.
|
|
|
|
=item *
|
|
|
|
L<warnings> has been upgraded from version 1.32 to 1.36.
|
|
|
|
=item *
|
|
|
|
L<Win32> has been upgraded from version 0.51 to 0.52.
|
|
|
|
=item *
|
|
|
|
L<Win32API::File> has been upgraded from version 0.1202 to 0.1203.
|
|
|
|
=item *
|
|
|
|
L<XS::Typemap> has been upgraded from version 0.13 to 0.14.
|
|
|
|
=item *
|
|
|
|
L<XSLoader> has been upgraded from version 0.20 to 0.21.
|
|
|
|
=back
|
|
|
|
=head1 Documentation
|
|
|
|
=head2 Changes to Existing Documentation
|
|
|
|
=head3 L<perlapi>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The process of using undocumented globals has been documented, namely, that one
|
|
should send email to L<perl5-porters@perl.org|mailto:perl5-porters@perl.org>
|
|
first to get the go-ahead for documenting and using an undocumented function or
|
|
global variable.
|
|
|
|
=back
|
|
|
|
=head3 L<perlcall>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A number of cleanups have been made to perlcall, including:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
use C<EXTEND(SP, n)> and C<PUSHs()> instead of C<XPUSHs()> where applicable
|
|
and update prose to match
|
|
|
|
=item *
|
|
|
|
add POPu, POPul and POPpbytex to the "complete list of POP macros"
|
|
and clarify the documentation for some of the existing entries, and
|
|
a note about side-effects
|
|
|
|
=item *
|
|
|
|
add API documentation for POPu and POPul
|
|
|
|
=item *
|
|
|
|
use ERRSV more efficiently
|
|
|
|
=item *
|
|
|
|
approaches to thread-safety storage of SVs.
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
=head3 L<perlfunc>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The documentation of C<hex> has been revised to clarify valid inputs.
|
|
|
|
=item *
|
|
|
|
Better explain meaning of negative PIDs in C<waitpid>.
|
|
L<[perl #127080]|https://rt.perl.org/Ticket/Display.html?id=127080>
|
|
|
|
=item *
|
|
|
|
General cleanup: there's more consistency now (in POD usage, grammar, code
|
|
examples), better practices in code examples (use of C<my>, removal of bareword
|
|
filehandles, dropped usage of C<&> when calling subroutines, ...), etc.
|
|
|
|
=back
|
|
|
|
=head3 L<perlguts>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A new section has been added, L<perlguts/"Dynamic Scope and the Context
|
|
Stack">, which explains how the perl context stack works.
|
|
|
|
=back
|
|
|
|
=head3 L<perllocale>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A stronger caution about using locales in threaded applications is
|
|
given. Locales are not thread-safe, and you can get wrong results or
|
|
even segfaults if you use them there.
|
|
|
|
=back
|
|
|
|
=head3 L<perlmodlib>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
We now recommend contacting the module-authors list or PAUSE in seeking
|
|
guidance on the naming of modules.
|
|
|
|
=back
|
|
|
|
=head3 L<perlop>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The documentation of C<qx//> now describes how C<$?> is affected.
|
|
|
|
=back
|
|
|
|
=head3 L<perlpolicy>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
This note has been added to perlpolicy:
|
|
|
|
While civility is required, kindness is encouraged; if you have any
|
|
doubt about whether you are being civil, simply ask yourself, "Am I
|
|
being kind?" and aspire to that.
|
|
|
|
=back
|
|
|
|
=head3 L<perlreftut>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Fix some examples to be L<strict> clean.
|
|
|
|
=back
|
|
|
|
=head3 L<perlrebackslash>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Clarify that in languages like Japanese and Thai, dictionary lookup
|
|
is required to determine word boundaries.
|
|
|
|
=back
|
|
|
|
=head3 L<perlsub>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Updated to note that anonymous subroutines can have signatures.
|
|
|
|
=back
|
|
|
|
=head3 L<perlsyn>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Fixed a broken example where C<=> was used instead of
|
|
C<==> in conditional in do/while example.
|
|
|
|
=back
|
|
|
|
=head3 L<perltie>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified.
|
|
|
|
=back
|
|
|
|
=head3 L<perlunicode>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Discourage use of 'In' as a prefix signifying the Unicode Block property.
|
|
|
|
=back
|
|
|
|
=head3 L<perlvar>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The documentation of C<$@> was reworded to clarify that it is not just for
|
|
syntax errors in C<eval>.
|
|
L<[perl #124034]|https://rt.perl.org/Ticket/Display.html?id=124034>
|
|
|
|
=item *
|
|
|
|
The specific true value of C<$!{E...}> is now documented, noting that it is
|
|
subject to change and not guaranteed.
|
|
|
|
=item *
|
|
|
|
Use of C<$OLD_PERL_VERSION> is now discouraged.
|
|
|
|
=back
|
|
|
|
=head3 L<perlxs>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The documentation of C<PROTOTYPES> has been corrected; they are I<disabled>
|
|
by default, not I<enabled>.
|
|
|
|
=back
|
|
|
|
=head1 Diagnostics
|
|
|
|
The following additions or changes have been made to diagnostic output,
|
|
including warnings and fatal error messages. For the complete list of
|
|
diagnostic messages, see L<perldiag>.
|
|
|
|
=head2 New Diagnostics
|
|
|
|
=head3 New Errors
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
L<%s must not be a named sequence in transliteration operator|perldiag/"%s must not be a named sequence in transliteration operator">
|
|
|
|
=item *
|
|
|
|
L<Can't find Unicode property definition "%s" in regex;|perldiag/"Can't find Unicode property definition "%s" in regex; marked by <-- HERE in m/%s/">
|
|
|
|
=item *
|
|
|
|
L<Can't redeclare "%s" in "%s"|perldiag/"Can't redeclare "%s" in "%s"">
|
|
|
|
=item *
|
|
|
|
L<Character following \p must be '{' or a single-character Unicode property name in regex;|perldiag/"Character following \%c must be '{' or a single-character Unicode property name in regex; marked by <-- HERE in m/%s/">
|
|
|
|
=item *
|
|
|
|
L<Empty \%c in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
|
|
|perldiag/"Empty \%c in regex; marked by <-- HERE in mE<sol>%sE<sol>">
|
|
|
|
=item *
|
|
|
|
L<Illegal user-defined property name|perldiag/"Illegal user-defined property name">
|
|
|
|
=item *
|
|
|
|
L<Invalid number '%s' for -C option.|perldiag/"Invalid number '%s' for -C option.">
|
|
|
|
=item *
|
|
|
|
L<<< Sequence (?... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>|perldiag/"Sequence (?... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>>
|
|
|
|
=item *
|
|
|
|
L<<< Sequence (?PE<lt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
|
|
|perldiag/"Sequence (?PE<lt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>" >>>
|
|
|
|
=item *
|
|
|
|
L<Sequence (?PE<gt>... not terminated in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
|
|
|perldiag/"Sequence (?PE<gt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>">
|
|
|
|
=back
|
|
|
|
=head3 New Warnings
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
L<Assuming NOT a POSIX class since %s in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>|
|
|
perldiag/Assuming NOT a POSIX class since %s in regex; marked by <-- HERE in mE<sol>%sE<sol>>
|
|
|
|
=item *
|
|
|
|
L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 handles">
|
|
|
|
=back
|
|
|
|
=head2 Changes to Existing Diagnostics
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Accessing the C<IO> part of a glob as C<FILEHANDLE> instead of C<IO> is no
|
|
longer deprecated. It is discouraged to encourage uniformity (so that, for
|
|
example, one can grep more easily) but it will not be removed.
|
|
L<[perl #127060]|https://rt.perl.org/Ticket/Display.html?id=127060>
|
|
|
|
=item *
|
|
|
|
The diagnostic C<< Hexadecimal float: internal error >> has been changed to
|
|
C<< Hexadecimal float: internal error (%s) >> to include more information.
|
|
|
|
=item *
|
|
|
|
L<Can't modify non-lvalue subroutine call of &%s|perldiag/"Can't modify non-lvalue subroutine call of &%s">
|
|
|
|
This error now reports the name of the non-lvalue subroutine you attempted to
|
|
use as an lvalue.
|
|
|
|
=item *
|
|
|
|
When running out of memory during an attempt the increase the stack
|
|
size, previously, perl would die using the cryptic message
|
|
C<< panic: av_extend_guts() negative count (-9223372036854775681) >>.
|
|
This has been fixed to show the prettier message:
|
|
L<< Out of memory during stack extend|perldiag/"Out of memory during %s extend" >>
|
|
|
|
=back
|
|
|
|
=head1 Configuration and Compilation
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
C<Configure> now acts as if the C<-O> option is always passed, allowing command
|
|
line options to override saved configuration. This should eliminate confusion
|
|
when command line options are ignored for no obvious reason. C<-O> is now
|
|
permitted, but ignored.
|
|
|
|
=item *
|
|
|
|
Bison 3.0 is now supported.
|
|
|
|
=item *
|
|
|
|
F<Configure> no longer probes for F<libnm> by default. Originally
|
|
this was the "New Math" library, but the name has been re-used by the
|
|
GNOME NetworkManager.
|
|
L<[perl #127131]|https://rt.perl.org/Ticket/Display.html?id=127131>
|
|
|
|
=item *
|
|
|
|
Added F<Configure> probes for C<newlocale>, C<freelocale>, and C<uselocale>.
|
|
|
|
=item *
|
|
|
|
C<< PPPort.so/PPPort.dll >> no longer get installed, as they are
|
|
not used by C<< PPPort.pm >>, only by its test files.
|
|
|
|
=item *
|
|
|
|
It is now possible to specify which compilation date to show on
|
|
C<< perl -V >> output, by setting the macro C<< PERL_BUILD_DATE >>.
|
|
|
|
=item *
|
|
|
|
Using the C<NO_HASH_SEED> define in combination with the default hash algorithm
|
|
C<PERL_HASH_FUNC_ONE_AT_A_TIME_HARD> resulted in a fatal error while compiling
|
|
the interpreter, since Perl 5.17.10. This has been fixed.
|
|
|
|
=item *
|
|
|
|
F<Configure> should handle spaces in paths a little better.
|
|
|
|
=item *
|
|
|
|
No longer generate EBCDIC POSIX-BC tables. We don't believe anyone is
|
|
using Perl and POSIX-BC at this time, and by not generating these tables
|
|
it saves time during development, and makes the resulting tar ball smaller.
|
|
|
|
=item *
|
|
|
|
The GNU Make makefile for Win32 now supports parallel builds. [perl #126632]
|
|
|
|
=item *
|
|
|
|
You can now build perl with MSVC++ on Win32 using GNU Make. [perl #126632]
|
|
|
|
=item *
|
|
|
|
The Win32 miniperl now has a real C<getcwd> which increases build performance
|
|
resulting in C<getcwd()> being 605x faster in Win32 miniperl.
|
|
|
|
=item *
|
|
|
|
Configure now takes C<-Dusequadmath> into account when calculating the
|
|
C<alignbytes> configuration variable. Previously the mis-calculated
|
|
C<alignbytes> could cause alignment errors on debugging builds. [perl
|
|
#127894]
|
|
|
|
=back
|
|
|
|
=head1 Testing
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A new test (F<t/op/aassign.t>) has been added to test the list assignment operator
|
|
C<OP_AASSIGN>.
|
|
|
|
=item *
|
|
|
|
Parallel building has been added to the dmake C<makefile.mk> makefile. All
|
|
Win32 compilers are supported.
|
|
|
|
=back
|
|
|
|
=head1 Platform Support
|
|
|
|
=head2 Platform-Specific Notes
|
|
|
|
=over 4
|
|
|
|
=item AmigaOS
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The AmigaOS port has been reintegrated into the main tree, based off of
|
|
Perl 5.22.1.
|
|
|
|
=back
|
|
|
|
=item Cygwin
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Tests are more robust against unusual cygdrive prefixes.
|
|
L<[perl #126834]|https://rt.perl.org/Ticket/Display.html?id=126834>
|
|
|
|
=back
|
|
|
|
=item EBCDIC
|
|
|
|
=over 4
|
|
|
|
=item UTF-EBCDIC extended
|
|
|
|
UTF-EBCDIC is like UTF-8, but for EBCDIC platforms. It now has been
|
|
extended so that it can represent code points up to 2 ** 64 - 1 on
|
|
platforms with 64-bit words. This brings it into parity with UTF-8.
|
|
This enhancement requires an incompatible change to the representation
|
|
of code points in the range 2 ** 30 to 2 ** 31 -1 (the latter was the
|
|
previous maximum representable code point). This means that a file that
|
|
contains one of these code points, written out with previous versions of
|
|
perl cannot be read in, without conversion, by a perl containing this
|
|
change. We do not believe any such files are in existence, but if you
|
|
do have one, submit a ticket at L<perlbug@perl.org|mailto:perlbug@perl.org>,
|
|
and we will write a conversion script for you.
|
|
|
|
=item EBCDIC C<cmp()> and C<sort()> fixed for UTF-EBCDIC strings
|
|
|
|
Comparing two strings that were both encoded in UTF-8 (or more
|
|
precisely, UTF-EBCDIC) did not work properly until now. Since C<sort()>
|
|
uses C<cmp()>, this fixes that as well.
|
|
|
|
=item EBCDIC C<tr///> and C<y///> fixed for C<\N{}>, and C<S<use utf8>> ranges
|
|
|
|
Perl v5.22 introduced the concept of portable ranges to regular
|
|
expression patterns. A portable range matches the same set of
|
|
characters no matter what platform is being run on. This concept is now
|
|
extended to C<tr///>. See
|
|
C<L<trE<sol>E<sol>E<sol>|perlop/trE<sol>SEARCHLISTE<sol>REPLACEMENTLISTE<sol>cdsr>>.
|
|
|
|
There were also some problems with these operations under S<C<use
|
|
utf8>>, which are now fixed
|
|
|
|
=back
|
|
|
|
=item FreeBSD
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Use the C<fdclose()> function from FreeBSD if it is available.
|
|
L<[perl #126847]|https://rt.perl.org/Ticket/Display.html?id=126847>
|
|
|
|
=back
|
|
|
|
=item IRIX
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Under some circumstances IRIX stdio C<fgetc()> and C<fread()> set the errno to
|
|
C<ENOENT>, which made no sense according to either IRIX or POSIX docs. Errno
|
|
is now cleared in such cases.
|
|
L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977>
|
|
|
|
=item *
|
|
|
|
Problems when multiplying long doubles by infinity have been fixed.
|
|
L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396>
|
|
|
|
=back
|
|
|
|
=item MacOS X
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Until now OS X builds of perl have specified a link target of 10.3 (Panther,
|
|
2003) but have not specified a compiler target. From now on, builds of perl on
|
|
OS X 10.6 or later (Snow Leopard, 2008) by default capture the current OS X
|
|
version and specify that as the explicit build target in both compiler and
|
|
linker flags, thus preserving binary compatibility for extensions built later
|
|
regardless of changes in OS X, SDK, or compiler and linker versions. To
|
|
override the default value used in the build and preserved in the flags,
|
|
specify C<export MACOSX_DEPLOYMENT_TARGET=10.N> before configuring and building
|
|
perl, where 10.N is the version of OS X you wish to target. In OS X 10.5 or
|
|
earlier there is no change to the behavior present when those systems were
|
|
current; the link target is still OS X 10.3 and there is no explicit compiler
|
|
target.
|
|
|
|
=item *
|
|
|
|
Builds with both -DDEBUGGING and threading enabled would fail with a
|
|
"panic: free from wrong pool" error when built or tested from Terminal
|
|
on OS X. This was caused by perl's internal management of the
|
|
environment conflicting with an atfork handler using the libc
|
|
C<setenv()> function to update the environment.
|
|
|
|
Perl now uses C<setenv()>/C<unsetenv()> to update the environment on OS X.
|
|
L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
|
|
|
|
=back
|
|
|
|
=item Solaris
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
All Solaris variants now build a shared libperl
|
|
|
|
Solaris and variants like OpenIndiana now always build with the shared
|
|
Perl library (Configure -Duseshrplib). This was required for the
|
|
OpenIndiana builds, but this has also been the setting for Oracle/Sun
|
|
Perl builds for several years.
|
|
|
|
=back
|
|
|
|
=item Tru64
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Workaround where Tru64 balks when prototypes are listed as
|
|
C<< PERL_STATIC_INLINE >>, but where the test is build with
|
|
C<< -DPERL_NO_INLINE_FUNCTIONS >>.
|
|
|
|
=back
|
|
|
|
=item VMS
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
On VMS, the math function prototypes in C<math.h> are now visible under C++.
|
|
Now building the POSIX extension with C++ will no longer crash.
|
|
|
|
=item *
|
|
|
|
VMS has had C<setenv>/C<unsetenv> since v7.0 (released in 1996),
|
|
C<Perl_vmssetenv> now always uses C<setenv>/C<unsetenv>.
|
|
|
|
=item *
|
|
|
|
Perl now implements its own C<killpg> by scanning for processes in the
|
|
specified process group, which may not mean exactly the same thing as a Unix
|
|
process group, but allows us to send a signal to a parent (or master) process
|
|
and all of its sub-processes. At the perl level, this means we can now send a
|
|
negative pid like so:
|
|
|
|
kill SIGKILL, -$pid;
|
|
|
|
to signal all processes in the same group as C<$pid>.
|
|
|
|
=item *
|
|
|
|
For those C<%ENV> elements based on the CRTL environ array, we've always
|
|
preserved case when setting them but did look-ups only after upcasing the
|
|
key first, which made lower- or mixed-case entries go missing. This problem
|
|
has been corrected by making C<%ENV> elements derived from the environ array
|
|
case-sensitive on look-up as well as case-preserving on store.
|
|
|
|
=item *
|
|
|
|
Environment look-ups for C<PERL5LIB> and C<PERLLIB> previously only
|
|
considered logical names, but now consider all sources of C<%ENV> as
|
|
determined by C<PERL_ENV_TABLES> and as documented in L<perlvms/%ENV>.
|
|
|
|
=item *
|
|
|
|
The minimum supported version of VMS is now v7.3-2, released in 2003. As a
|
|
side effect of this change, VAX is no longer supported as the terminal
|
|
release of OpenVMS VAX was v7.3 in 2001.
|
|
|
|
=back
|
|
|
|
=item Win32
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A new build option C<USE_NO_REGISTRY> has been added to the makefiles. This
|
|
option is off by default, meaning the default is to do Windows registry
|
|
lookups. This option stops Perl from looking inside the registry for anything.
|
|
For what values are looked up in the registry see L<perlwin32>. Internally, in
|
|
C, the name of this option is C<WIN32_NO_REGISTRY>.
|
|
|
|
=item *
|
|
|
|
The behavior of Perl using C<HKEY_CURRENT_USER\Software\Perl> and
|
|
C<HKEY_LOCAL_MACHINE\Software\Perl> to lookup certain values, including C<%ENV>
|
|
vars starting with C<PERL> has changed. Previously, the 2 keys were checked
|
|
for entries at all times through the perl process's life time even if
|
|
they did not
|
|
exist. For performance reasons, now, if the root key (i.e.
|
|
C<HKEY_CURRENT_USER\Software\Perl> or C<HKEY_LOCAL_MACHINE\Software\Perl>) does
|
|
not exist at process start time, it will not be checked again for C<%ENV>
|
|
override entries for the remainder of the perl process's life. This more
|
|
closely matches Unix behavior in that the environment is copied or inherited
|
|
on startup and changing the variable in the parent process or another process
|
|
or editing F<.bashrc> will not change the environmental variable in other
|
|
existing, running, processes.
|
|
|
|
=item *
|
|
|
|
One glob fetch was removed for each C<-X> or C<stat> call whether done from
|
|
Perl code or internally from Perl's C code. The glob being looked up was
|
|
C<${^WIN32_SLOPPY_STAT}> which is a special variable. This makes C<-X> and
|
|
C<stat> slightly faster.
|
|
|
|
=item *
|
|
|
|
During miniperl's process startup, during the build process, 4 to 8 IO calls
|
|
related to the process starting F<.pl> and the F<buildcustomize.pl> file were
|
|
removed from the code opening and executing the first 1 or 2 F<.pl> files.
|
|
|
|
=item *
|
|
|
|
Builds using Microsoft Visual C++ 2003 and earlier no longer produce
|
|
an "INTERNAL COMPILER ERROR" message. [perl #126045]
|
|
|
|
=item *
|
|
|
|
Visual C++ 2013 builds will now execute on XP and higher. Previously they would
|
|
only execute on Vista and higher.
|
|
|
|
=item *
|
|
|
|
You can now build perl with GNU Make and GCC. [perl #123440]
|
|
|
|
=item *
|
|
|
|
C<truncate($filename, $size)> now works for files over 4GB in size.
|
|
[perl #125347]
|
|
|
|
=item *
|
|
|
|
Parallel building has been added to the dmake C<makefile.mk> makefile. All
|
|
Win32 compilers are supported.
|
|
|
|
=item *
|
|
|
|
Building a 64-bit perl with a 64-bit GCC but a 32-bit gmake would
|
|
result in an invalid C<$Config{archname}> for the resulting perl.
|
|
[perl #127584]
|
|
|
|
=item *
|
|
|
|
Errors set by Winsock functions are now put directly into C<$^E>, and the
|
|
relevant C<WSAE*> error codes are now exported from the L<Errno> and L<POSIX>
|
|
modules for testing this against.
|
|
|
|
The previous behavior of putting the errors (converted to POSIX-style C<E*>
|
|
error codes since Perl 5.20.0) into C<$!> was buggy due to the non-equivalence
|
|
of like-named Winsock and POSIX error constants, a relationship between which
|
|
has unfortunately been established in one way or another since Perl 5.8.0.
|
|
|
|
The new behavior provides a much more robust solution for checking Winsock
|
|
errors in portable software without accidentally matching POSIX tests that were
|
|
intended for other OSes and may have different meanings for Winsock.
|
|
|
|
The old behavior is currently retained, warts and all, for backwards
|
|
compatibility, but users are encouraged to change any code that tests C<$!>
|
|
against C<E*> constants for Winsock errors to instead test C<$^E> against
|
|
C<WSAE*> constants. After a suitable deprecation period, the old behavior may
|
|
be removed, leaving C<$!> unchanged after Winsock function calls, to avoid any
|
|
possible confusion over which error variable to check.
|
|
|
|
=back
|
|
|
|
=item ppc64el
|
|
|
|
=over 4
|
|
|
|
=item floating point
|
|
|
|
The floating point format of ppc64el (Debian naming for little-endian
|
|
PowerPC) is now detected correctly.
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
=head1 Internal Changes
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The implementation of perl's context stack system, and its internal API,
|
|
have been heavily reworked. Note that no significant changes have been
|
|
made to any external APIs, but XS code which relies on such internal
|
|
details may need to be fixed. The main changes are:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The C<PUSHBLOCK()>, C<POPSUB()> etc. macros have been replaced with static
|
|
inline functions such as C<cx_pushblock()>, C<cx_popsub()> etc. These use
|
|
function args rather than implicitly relying on local vars such as
|
|
C<gimme> and C<newsp> being available. Also their functionality has
|
|
changed: in particular, C<cx_popblock()> no longer decrements
|
|
C<cxstack_ix>. The ordering of the steps in the C<pp_leave*> functions
|
|
involving C<cx_popblock()>, C<cx_popsub()> etc. has changed. See the new
|
|
documentation, L<perlguts/"Dynamic Scope and the Context Stack">, for
|
|
details on how to use them.
|
|
|
|
=item *
|
|
|
|
Various macros, which now consistently have a CX_ prefix, have been added:
|
|
|
|
CX_CUR(), CX_LEAVE_SCOPE(), CX_POP()
|
|
|
|
or renamed:
|
|
|
|
CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST()
|
|
|
|
=item *
|
|
|
|
C<cx_pushblock()> now saves C<PL_savestack_ix> and C<PL_tmps_floor>, so
|
|
C<pp_enter*> and C<pp_leave*> no longer do
|
|
|
|
ENTER; SAVETMPS; ....; LEAVE
|
|
|
|
=item *
|
|
|
|
C<cx_popblock()> now also restores C<PL_curpm>.
|
|
|
|
=item *
|
|
|
|
In C<dounwind()> for every context type, the current savestack frame is
|
|
now processed before each context is popped; formerly this was only done
|
|
for sub-like context frames. This action has been removed from
|
|
C<cx_popsub()> and placed into its own macro, C<CX_LEAVE_SCOPE(cx)>, which
|
|
must be called before C<cx_popsub()> etc.
|
|
|
|
C<dounwind()> now also does a C<cx_popblock()> on the last popped frame
|
|
(formerly it only did the C<cx_popsub()> etc. actions on each frame).
|
|
|
|
=item *
|
|
|
|
The temps stack is now freed on scope exit; previously, temps created
|
|
during the last statement of a block wouldn't be freed until the next
|
|
C<nextstate> following the block (apart from an existing hack that did
|
|
this for recursive subs in scalar context); and in something like
|
|
C<f(g())>, the temps created by the last statement in C<g()> would
|
|
formerly not be freed until the statement following the return from
|
|
C<f()>.
|
|
|
|
=item *
|
|
|
|
Most values that were saved on the savestack on scope entry are now
|
|
saved in suitable new fields in the context struct, and saved and
|
|
restored directly by C<cx_pushfoo()> and C<cx_popfoo()>, which is much
|
|
faster.
|
|
|
|
=item *
|
|
|
|
Various context struct fields have been added, removed or modified.
|
|
|
|
=item *
|
|
|
|
The handling of C<@_> in C<cx_pushsub()> and C<cx_popsub()> has been
|
|
considerably tidied up, including removing the C<argarray> field from the
|
|
context struct, and extracting out some common (but rarely used) code into
|
|
a separate function, C<clear_defarray()>. Also, useful subsets of
|
|
C<cx_popsub()> which had been unrolled in places like C<pp_goto> have been
|
|
gathered into the new functions C<cx_popsub_args()> and
|
|
C<cx_popsub_common()>.
|
|
|
|
=item *
|
|
|
|
C<pp_leavesub> and C<pp_leavesublv> now use the same function as the rest
|
|
of the C<pp_leave*>'s to process return args.
|
|
|
|
=item *
|
|
|
|
C<CXp_FOR_PAD> and C<CXp_FOR_GV> flags have been added, and
|
|
C<CXt_LOOP_FOR> has been split into C<CXt_LOOP_LIST>, C<CXt_LOOP_ARY>.
|
|
|
|
=item *
|
|
|
|
Some variables formerly declared by C<dMULTICALL> (but not documented) have
|
|
been removed.
|
|
|
|
=back
|
|
|
|
=item *
|
|
|
|
The obscure C<PL_timesbuf> variable, effectively a vestige of Perl 1, has
|
|
been removed. It was documented as deprecated in Perl 5.20, with a statement
|
|
that it would be removed early in the 5.21.x series; that has now finally
|
|
happened.
|
|
L<[perl #121351]|https://rt.perl.org/Ticket/Display.html?id=121351>
|
|
|
|
=item *
|
|
|
|
An unwarranted assertion in C<Perl_newATTRSUB_x()> has been removed. If
|
|
a stub subroutine
|
|
definition with a prototype has been seen, then any subsequent stub (or
|
|
definition) of the same subroutine with an attribute was causing an assertion
|
|
failure because of a null pointer.
|
|
L<[perl #126845]|https://rt.perl.org/Ticket/Display.html?id=126845>
|
|
|
|
=item *
|
|
|
|
C<::> has been replaced by C<__> in C<ExtUtils::ParseXS>, like it's done for
|
|
parameters/return values. This is more consistent, and simplifies writing XS
|
|
code wrapping C++ classes into a nested Perl namespace (it requires only
|
|
a typedef for C<Foo__Bar> rather than two, one for C<Foo_Bar> and the other
|
|
for C<Foo::Bar>).
|
|
|
|
=item *
|
|
|
|
The C<to_utf8_case()> function is now deprecated. Instead use
|
|
C<toUPPER_utf8>, C<toTITLE_utf8>, C<toLOWER_utf8>, and C<toFOLD_utf8>.
|
|
(See L<http://nntp.perl.org/group/perl.perl5.porters/233287>.)
|
|
|
|
=item *
|
|
|
|
Perl core code and the threads extension have been annotated so that,
|
|
if Perl is configured to use threads, then during compile-time clang (3.6
|
|
or later) will warn about suspicious uses of mutexes.
|
|
See L<http://clang.llvm.org/docs/ThreadSafetyAnalysis.html> for more
|
|
information.
|
|
|
|
=item *
|
|
|
|
The C<signbit()> emulation has been enhanced. This will help older
|
|
and/or more exotic platforms or configurations.
|
|
|
|
|
|
=item *
|
|
|
|
Most EBCDIC-specific code in the core has been unified with non-EBCDIC
|
|
code, to avoid repetition and make maintenance easier.
|
|
|
|
=item *
|
|
|
|
MSWin32 code for C<$^X> has been moved out of the F<win32> directory to
|
|
F<caretx.c>, where other operating systems set that variable.
|
|
|
|
=item *
|
|
|
|
C<< sv_ref() >> is now part of the API.
|
|
|
|
=item *
|
|
|
|
L<perlapi/sv_backoff> had its return type changed from C<int> to C<void>. It
|
|
previously has always returned C<0> since Perl 5.000 stable but that was
|
|
undocumented. Although C<sv_backoff> is marked as public API, XS code is not
|
|
expected to be impacted since the proper API call would be through public API
|
|
C<sv_setsv(sv, &PL_sv_undef)>, or quasi-public C<SvOOK_off>, or non-public
|
|
C<SvOK_off> calls, and the return value of C<sv_backoff> was previously a
|
|
meaningless constant that can be rewritten as C<(sv_backoff(sv),0)>.
|
|
|
|
=item *
|
|
|
|
The C<EXTEND> and C<MEXTEND> macros have been improved to avoid various issues
|
|
with integer truncation and wrapping. In particular, some casts formerly used
|
|
within the macros have been removed. This means for example that passing an
|
|
unsigned C<nitems> argument is likely to raise a compiler warning now
|
|
(it's always been documented to require a signed value; formerly int,
|
|
lately SSize_t).
|
|
|
|
=item *
|
|
|
|
C<PL_sawalias> and C<GPf_ALIASED_SV> have been removed.
|
|
|
|
=item *
|
|
|
|
C<GvASSIGN_GENERATION> and C<GvASSIGN_GENERATION_set> have been removed.
|
|
|
|
=back
|
|
|
|
=head1 Selected Bug Fixes
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
It now works properly to specify a user-defined property, such as
|
|
|
|
qr/\p{mypkg1::IsMyProperty}/i
|
|
|
|
with C</i> caseless matching, an explicit package name, and
|
|
I<IsMyProperty> not defined at the time of the pattern compilation.
|
|
|
|
=item *
|
|
|
|
Perl's C<memcpy()>, C<memmove()>, C<memset()> and C<memcmp()> fallbacks are now
|
|
more compatible with the originals. [perl #127619]
|
|
|
|
=item *
|
|
|
|
Fixed the issue where a C<< s///r >>) with B<< -DPERL_NO_COW >> attempts
|
|
to modify the source SV, resulting in the program dying. [perl #127635]
|
|
|
|
=item *
|
|
|
|
Fixed an EBCDIC-platform-only case where a pattern could fail to match. This
|
|
occurred when matching characters from the set of C1 controls when the
|
|
target matched string was in UTF-8.
|
|
|
|
=item *
|
|
|
|
Narrow the filename check in F<strict.pm> and F<warnings.pm>. Previously,
|
|
it assumed that if the filename (without the F<.pmc?> extension) differed
|
|
from the package name, if was a misspelled use statement (i.e. C<use Strict>
|
|
instead of C<use strict>). We now check whether there's really a
|
|
miscapitalization happening, and not some other issue.
|
|
|
|
=item *
|
|
|
|
Turn an assertion into a more user friendly failure when parsing
|
|
regexes. [perl #127599]
|
|
|
|
=item *
|
|
|
|
Correctly raise an error when trying to compile patterns with
|
|
unterminated character classes while there are trailing backslashes.
|
|
[perl #126141].
|
|
|
|
=item *
|
|
|
|
Line numbers larger than 2**31-1 but less than 2**32 are no longer
|
|
returned by C<caller()> as negative numbers. [perl #126991]
|
|
|
|
=item *
|
|
|
|
C<< unless ( I<assignment> ) >> now properly warns when syntax
|
|
warnings are enabled. [perl #127122]
|
|
|
|
=item *
|
|
|
|
Setting an C<ISA> glob to an array reference now properly adds
|
|
C<isaelem> magic to any existing elements. Previously modifying such
|
|
an element would not update the ISA cache, so method calls would call
|
|
the wrong function. Perl would also crash if the C<ISA> glob was
|
|
destroyed, since new code added in 5.23.7 would try to release the
|
|
C<isaelem> magic from the elements. [perl #127351]
|
|
|
|
=item *
|
|
|
|
If a here-doc was found while parsing another operator, the parser had
|
|
already read end of file, and the here-doc was not terminated, perl
|
|
could produce an assertion or a segmentation fault. This now reliably
|
|
complains about the unterminated here-doc. [perl #125540]
|
|
|
|
=item *
|
|
|
|
C<untie()> would sometimes return the last value returned by the C<UNTIE()>
|
|
handler as well as its normal value, messing up the stack. [perl
|
|
#126621]
|
|
|
|
=item *
|
|
|
|
Fixed an operator precedence problem when C< castflags & 2> is true.
|
|
[perl #127474]
|
|
|
|
=item *
|
|
|
|
Caching of DESTROY methods could result in a non-pointer or a
|
|
non-STASH stored in the C<SvSTASH()> slot of a stash, breaking the B
|
|
C<STASH()> method. The DESTROY method is now cached in the MRO metadata
|
|
for the stash. [perl #126410]
|
|
|
|
=item *
|
|
|
|
The AUTOLOAD method is now called when searching for a DESTROY method,
|
|
and correctly sets C<$AUTOLOAD> too. [perl #124387] [perl #127494]
|
|
|
|
=item *
|
|
|
|
Avoid parsing beyond the end of the buffer when processing a C<#line>
|
|
directive with no filename. [perl #127334]
|
|
|
|
=item *
|
|
|
|
Perl now raises a warning when a regular expression pattern looks like
|
|
it was supposed to contain a POSIX class, like C<qr/[[:alpha:]]/>, but
|
|
there was some slight defect in its specification which causes it to
|
|
instead be treated as a regular bracketed character class. An example
|
|
would be missing the second colon in the above like this:
|
|
C<qr/[[:alpha]]/>. This compiles to match a sequence of two characters.
|
|
The second is C<"]">, and the first is any of: C<"[">, C<":">, C<"a">,
|
|
C<"h">, C<"l">, or C<"p">. This is unlikely to be the intended
|
|
meaning, and now a warning is raised. No warning is raised unless the
|
|
specification is very close to one of the 14 legal POSIX classes. (See
|
|
L<perlrecharclass/POSIX Character Classes>.)
|
|
[perl #8904]
|
|
|
|
=item *
|
|
|
|
Certain regex patterns involving a complemented POSIX class in an
|
|
inverted bracketed character class, and matching something else
|
|
optionally would improperly fail to match. An example of one that could
|
|
fail is C<qr/_?[^\Wbar]\x{100}/>. This has been fixed.
|
|
[perl #127537]
|
|
|
|
=item *
|
|
|
|
Perl 5.22 added support to the C99 hexadecimal floating point notation,
|
|
but sometimes misparses hex floats. This has been fixed.
|
|
[perl #127183]
|
|
|
|
=item *
|
|
|
|
A regression that allowed undeclared barewords in hash keys to work despite
|
|
strictures has been fixed.
|
|
L<[perl #126981]|https://rt.perl.org/Ticket/Display.html?id=126981>
|
|
|
|
=item *
|
|
|
|
Calls to the placeholder C<&PL_sv_yes> used internally when an C<import()>
|
|
or C<unimport()> method isn't found now correctly handle scalar context.
|
|
L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042>
|
|
|
|
=item *
|
|
|
|
Report more context when we see an array where we expect to see an
|
|
operator and avoid an assertion failure.
|
|
L<[perl #123737]|https://rt.perl.org/Ticket/Display.html?id=123737>
|
|
|
|
=item *
|
|
|
|
Modifying an array that was previously a package C<@ISA> no longer
|
|
causes assertion failures or crashes.
|
|
L<[perl #123788]|https://rt.perl.org/Ticket/Display.html?id=123788>
|
|
|
|
=item *
|
|
|
|
Retain binary compatibility across plain and DEBUGGING perl builds.
|
|
L<[perl #127212]|https://rt.perl.org/Ticket/Display.html?id=127212>
|
|
|
|
=item *
|
|
|
|
Avoid leaking memory when setting C<$ENV{foo}> on darwin.
|
|
L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
|
|
|
|
=item *
|
|
|
|
C</...\G/> no longer crashes on utf8 strings. When C<\G> is a fixed number
|
|
of characters from the start of the regex, perl needs to count back that
|
|
many characters from the current C<pos()> position and start matching from
|
|
there. However, it was counting back bytes rather than characters, which
|
|
could lead to panics on utf8 strings.
|
|
|
|
=item *
|
|
|
|
In some cases operators that return integers would return negative
|
|
integers as large positive integers.
|
|
L<[perl #126635]|https://rt.perl.org/Ticket/Display.html?id=126635>
|
|
|
|
=item *
|
|
|
|
The C<pipe()> operator would assert for DEBUGGING builds instead of
|
|
producing the correct error message. The condition asserted on is
|
|
detected and reported on correctly without the assertions, so the
|
|
assertions were removed.
|
|
L<[perl #126480]|https://rt.perl.org/Ticket/Display.html?id=126480>
|
|
|
|
=item *
|
|
|
|
In some cases, failing to parse a here-doc would attempt to use freed
|
|
memory. This was caused by a pointer not being restored correctly.
|
|
L<[perl #126443]|https://rt.perl.org/Ticket/Display.html?id=126443>
|
|
|
|
=item *
|
|
|
|
C<< @x = sort { *a = 0; $a <=> $b } 0 .. 1 >> no longer frees the GP
|
|
for *a before restoring its SV slot.
|
|
L<[perl #124097]|https://rt.perl.org/Ticket/Display.html?id=124097>
|
|
|
|
=item *
|
|
|
|
Multiple problems with the new hexadecimal floating point printf
|
|
format C<%a> were fixed:
|
|
L<[perl #126582]|https://rt.perl.org/Ticket/Display.html?id=126582>,
|
|
L<[perl #126586]|https://rt.perl.org/Ticket/Display.html?id=126586>,
|
|
L<[perl #126822]|https://rt.perl.org/Ticket/Display.html?id=126822>
|
|
|
|
=item *
|
|
|
|
Calling C<mg_set()> in C<leave_scope()> no longer leaks.
|
|
|
|
=item *
|
|
|
|
A regression from Perl v5.20 was fixed in which debugging output of regular
|
|
expression compilation was wrong. (The pattern was correctly compiled, but
|
|
what got displayed for it was wrong.)
|
|
|
|
=item *
|
|
|
|
C<\b{sb}> works much better. In Perl v5.22.0, this new construct didn't
|
|
seem to give the expected results, yet passed all the tests in the
|
|
extensive suite furnished by Unicode. It turns out that it was because
|
|
these were short input strings, and the failures had to do with longer
|
|
inputs.
|
|
|
|
=item *
|
|
|
|
Certain syntax errors in
|
|
L<perlrecharclass/Extended Bracketed Character Classes> caused panics
|
|
instead of the proper error message. This has now been fixed. [perl
|
|
#126481]
|
|
|
|
=item *
|
|
|
|
Perl 5.20 added a message when a quantifier in a regular
|
|
expression was useless, but then caused the parser to skip it;
|
|
this caused the surplus quantifier to be silently ignored, instead
|
|
of throwing an error. This is now fixed. [perl #126253]
|
|
|
|
=item *
|
|
|
|
The switch to building non-XS modules last in win32/makefile.mk (introduced
|
|
by design as part of the changes to enable parallel building) caused the
|
|
build of POSIX to break due to problems with the version module. This
|
|
is now fixed.
|
|
|
|
=item *
|
|
|
|
Improved parsing of hex float constants.
|
|
|
|
=item *
|
|
|
|
Fixed an issue with C<< pack >> where C<< pack "H" >> (and C<< pack "h" >>)
|
|
could read past the source when given a non-utf8 source, and a utf8 target.
|
|
[perl #126325]
|
|
|
|
=item *
|
|
|
|
Fixed several cases where perl would abort due to a segmentation fault,
|
|
or a C-level assert. [perl #126615], [perl #126602], [perl #126193].
|
|
|
|
=item *
|
|
|
|
There were places in regular expression patterns where comments (C<(?#...)>)
|
|
weren't allowed, but should have been. This is now fixed.
|
|
L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639>
|
|
|
|
=item *
|
|
|
|
Some regressions from Perl 5.20 have been fixed, in which some syntax errors in
|
|
L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes> constructs
|
|
within regular expression patterns could cause a segfault instead of a proper
|
|
error message.
|
|
L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180>
|
|
L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404>
|
|
|
|
=item *
|
|
|
|
Another problem with
|
|
L<C<(?[...])>|perlrecharclass/Extended Bracketed Character Classes>
|
|
constructs has been fixed wherein things like C<\c]> could cause panics.
|
|
L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181>
|
|
|
|
=item *
|
|
|
|
Some problems with attempting to extend the perl stack to around 2G or 4G
|
|
entries have been fixed. This was particularly an issue on 32-bit perls built
|
|
to use 64-bit integers, and was easily noticeable with the list repetition
|
|
operator, e.g.
|
|
|
|
@a = (1) x $big_number
|
|
|
|
Formerly perl may have crashed, depending on the exact value of C<$big_number>;
|
|
now it will typically raise an exception.
|
|
L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937>
|
|
|
|
=item *
|
|
|
|
In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if
|
|
the condition is C<(?!)> then perl failed the match outright instead of
|
|
matching the no-pattern. This has been fixed.
|
|
L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222>
|
|
|
|
=item *
|
|
|
|
The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional
|
|
argument and set C<REGERROR>/C<REGMARK> appropriately as well.
|
|
L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186>
|
|
|
|
=item *
|
|
|
|
Several bugs, including a segmentation fault, have been fixed with the boundary
|
|
checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>,
|
|
C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty
|
|
string; none of the C<\b{}> ones do.
|
|
L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319>
|
|
|
|
=item *
|
|
|
|
Duplicating a closed file handle for write no longer creates a
|
|
filename of the form F<GLOB(0xXXXXXXXX)>. [perl #125115]
|
|
|
|
=item *
|
|
|
|
Warning fatality is now ignored when rewinding the stack. This
|
|
prevents infinite recursion when the now fatal error also causes
|
|
rewinding of the stack. [perl #123398]
|
|
|
|
=item *
|
|
|
|
In perl v5.22.0, the logic changed when parsing a numeric parameter to the -C
|
|
option, such that the successfully parsed number was not saved as the option
|
|
value if it parsed to the end of the argument. [perl #125381]
|
|
|
|
=item *
|
|
|
|
The PadlistNAMES macro is an lvalue again.
|
|
|
|
=item *
|
|
|
|
Zero -DPERL_TRACE_OPS memory for sub-threads.
|
|
|
|
C<perl_clone_using()> was missing Zero init of PL_op_exec_cnt[]. This
|
|
caused sub-threads in threaded -DPERL_TRACE_OPS builds to spew exceedingly
|
|
large op-counts at destruct. These counts would print %x as "ABABABAB",
|
|
clearly a mem-poison value.
|
|
|
|
=item *
|
|
|
|
A leak in the XS typemap caused one scalar to be leaked each time a C<FILE *>
|
|
or a C<PerlIO *> was C<OUTPUT:>ed or imported to Perl, since perl 5.000. These
|
|
particular typemap entries are thought to be extremely rarely used by XS
|
|
modules. [perl #124181]
|
|
|
|
=item *
|
|
|
|
C<alarm()> and C<sleep()> will now warn if the argument is a negative number
|
|
and return undef. Previously they would pass the negative value to the
|
|
underlying C function which may have set up a timer with a surprising value.
|
|
|
|
=item *
|
|
|
|
Perl can again be compiled with any Unicode version. This used to
|
|
(mostly) work, but was lost in v5.18 through v5.20. The property
|
|
C<Name_Alias> did not exist prior to Unicode 5.0. L<Unicode::UCD>
|
|
incorrectly said it did. This has been fixed.
|
|
|
|
=item *
|
|
|
|
Very large code-points (beyond Unicode) in regular expressions no
|
|
longer cause a buffer overflow in some cases when converted to UTF-8.
|
|
L<[perl #125826]|https://rt.perl.org/Ticket/Display.html?id=125826>
|
|
|
|
=item *
|
|
|
|
The integer overflow check for the range operator (...) in list
|
|
context now correctly handles the case where the size of the range is
|
|
larger than the address space. This could happen on 32-bits with
|
|
-Duse64bitint.
|
|
L<[perl #125781]|https://rt.perl.org/Ticket/Display.html?id=125781>
|
|
|
|
=item *
|
|
|
|
A crash with C<< %::=(); J->${\"::"} >> has been fixed.
|
|
L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541>
|
|
|
|
=item *
|
|
|
|
C<qr/(?[ () ])/> no longer segfaults, giving a syntax error message instead.
|
|
[perl #125805]
|
|
|
|
=item *
|
|
|
|
Regular expression possessive quantifier v5.20 regression now fixed.
|
|
C<qr/>I<PAT>C<{>I<min>,I<max>C<}+>C</> is supposed to behave identically
|
|
to C<qr/(?E<gt>>I<PAT>C<{>I<min>,I<max>C<})/>. Since v5.20, this didn't
|
|
work if I<min> and I<max> were equal. [perl #125825]
|
|
|
|
=item *
|
|
|
|
C<< BEGIN <> >> no longer segfaults and properly produces an error
|
|
message. [perl #125341]
|
|
|
|
=item *
|
|
|
|
In C<tr///> an illegal backwards range like C<tr/\x{101}-\x{100}//> was
|
|
not always detected, giving incorrect results. This is now fixed.
|
|
|
|
=back
|
|
|
|
=head1 Acknowledgements
|
|
|
|
Perl 5.24.0 represents approximately 11 months of development since Perl 5.24.0
|
|
and contains approximately 360,000 lines of changes across 1,800 files from 75
|
|
authors.
|
|
|
|
Excluding auto-generated files, documentation and release tools, there were
|
|
approximately 250,000 lines of changes to 1,200 .pm, .t, .c and .h files.
|
|
|
|
Perl continues to flourish into its third decade thanks to a vibrant community
|
|
of users and developers. The following people are known to have contributed the
|
|
improvements that became Perl 5.24.0:
|
|
|
|
Aaron Crane, Aaron Priven, Abigail, Achim Gratz, Alexander D'Archangel, Alex
|
|
Vandiver, Andreas König, Andy Broad, Andy Dougherty, Aristotle Pagaltzis,
|
|
Chase Whitener, Chas. Owens, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn
|
|
Ilmari Mannsåker, Dan Collins, Daniel Dragan, David Golden, David Mitchell,
|
|
Doug Bell, Dr.Ruud, Ed Avis, Ed J, Father Chrysostomos, Herbert Breunung,
|
|
H.Merijn Brand, Hugo van der Sanden, Ivan Pozdeev, James E Keenan, Jan Dubois,
|
|
Jarkko Hietaniemi, Jerry D. Hedden, Jim Cromie, John Peacock, John SJ Anderson,
|
|
Karen Etheridge, Karl Williamson, kmx, Leon Timmermans, Ludovic E. R.
|
|
Tolhurst-Cleaver, Lukas Mai, Martijn Lievaart, Matthew Horsfall, Mattia Barbon,
|
|
Max Maischein, Mohammed El-Afifi, Nicholas Clark, Nicolas R., Niko Tyni, Peter
|
|
John Acklam, Peter Martini, Peter Rabbitson, Pip Cet, Rafael Garcia-Suarez,
|
|
Reini Urban, Ricardo Signes, Sawyer X, Shlomi Fish, Sisyphus, Stanislaw Pusep,
|
|
Steffen Müller, Stevan Little, Steve Hay, Sullivan Beck, Thomas Sibley, Todd
|
|
Rinaldo, Tom Hukins, Tony Cook, Unicode Consortium, Victor Adam, Vincent Pit,
|
|
Vladimir Timofeev, Yves Orton, Zachary Storer, Zefram.
|
|
|
|
The list above is almost certainly incomplete as it is automatically generated
|
|
from version control history. In particular, it does not include the names of
|
|
the (very much appreciated) contributors who reported issues to the Perl bug
|
|
tracker.
|
|
|
|
Many of the changes included in this version originated in the CPAN modules
|
|
included in Perl's core. We're grateful to the entire CPAN community for
|
|
helping Perl to flourish.
|
|
|
|
For a more complete list of all of Perl's historical contributors, please see
|
|
the F<AUTHORS> file in the Perl source distribution.
|
|
|
|
=head1 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
|
|
https://rt.perl.org/ . There may also be information at
|
|
http://www.perl.org/ , the Perl Home Page.
|
|
|
|
If you believe you have an unreported bug, please run the L<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 C<perl -V>,
|
|
will be sent off to perlbug@perl.org to be analysed by the Perl porting team.
|
|
|
|
If the bug you are reporting has security implications which make it
|
|
inappropriate to send to a publicly archived mailing list, then see
|
|
L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
|
|
for details of how to report the issue.
|
|
|
|
=head1 SEE ALSO
|
|
|
|
The F<Changes> file for an explanation of how to view exhaustive details on
|
|
what changed.
|
|
|
|
The F<INSTALL> file for how to build Perl.
|
|
|
|
The F<README> file for general stuff.
|
|
|
|
The F<Artistic> and F<Copying> files for copyright information.
|
|
|
|
=cut
|