perl
view release on metacpan or search on metacpan
pod/perl5420delta.pod view on Meta::CPAN
=item *
On threaded builds on POSIX-like systems, if the perl signal handler
receives a signal, we now resend the signal to the main perl thread. Previously
this would crash. [L<GH #22487|https://github.com/Perl/perl5/issues/22487>]
=item *
Declaring a lexically scoped array or hash using C<state> within a subroutine
and then immediately returning no longer triggers a "Bizarre copy of HASH/ARRAY
in subroutine exit" error. [L<GH #18630|https://github.com/Perl/perl5/issues/18630>]
=item *
C<builtin::trim()> didn't properly clear C<TARG> which could result in
out of date cached numeric versions of the value being used on a
second evaluation. Properly clear any cached values. [L<GH #22784|https://github.com/Perl/perl5/issues/22784>]
=item *
L<perlfunc/shmread> and L<perlfunc/shmwrite> are no longer limited to 31-bit
values and can use all the available bits on a platform for their POS and
SIZE arguments.
[L<GH #22895|https://github.com/Perl/perl5/issues/22895>]
=item *
L<perlfunc/shmread> is now better behaved if VAR is not a plain string. If VAR
is a tied variable, it calls C<STORE> once; previously, it would also call
C<FETCH>, but without using the result. If VAR is a reference, the referenced
entity has its refcount properly decremented when VAR is turned into a string;
previously, it would leak memory.
[L<GH #22898|https://github.com/Perl/perl5/issues/22898>]
=item *
The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked
recursively, either deliberately or by accident, as described in
L<perlvar/%SIG>. That is, when an exception (or warning) triggers a call to a
C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or
warnings) are processed directly, ignoring C<%SIG> until the original
C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns.
[L<GH #14527|https://github.com/Perl/perl5/issues/14527>], [L<GH #22984|https://github.com/Perl/perl5/issues/22984>], [L<GH #22987|https://github.com/Perl/perl5/issues/22987>]
=item *
The C<ObjectFIELDS()> for an object and C<xhv_class_fields> for the
object's stash weren't always NULL or not-NULL, confusing C<sv_dump()>
(and hence Devel::Peek's C<Dump()>) into crashing on an object with no
defined fields in some cases. [L<GH #22959|https://github.com/Perl/perl5/issues/22959>]
=item *
When comparing strings when using a UTF-8 locale, the behavior was
previously undefined if either or both contained an above-Unicode code
point, such as 0x110000. Now all such code points will collate the same
as the highest Unicode code point, U+10FFFF. [L<GH #22989|https://github.com/Perl/perl5/issues/22989>]
=item *
In regexes, the contents of C<\g{...}> backreferences are now properly
validated. Previously, C<\g{1 FOO}> was silently parsed as C<\g{1}>, ignoring
everything after the first number.
[L<GH #23050|https://github.com/Perl/perl5/issues/23050>]
=item *
A run-time pattern which contained a code block which recursed back to the
same bit of code which ran that match, could cause a crash.
[L<GH #22869|https://github.com/Perl/perl5/issues/22869>]
For example:
my $r = qr/... (?{ foo() if ... }) .../;
sub foo { $string =~ $r }
foo()
=item *
In some cases an C<eval> would not add integer parts to the source
lines saved by the debugger. [L<GH #23151|https://github.com/Perl/perl5/issues/23151>]
=item *
In debugging mode, perl saves source lines from all files
(plus an indication of whether each line is breakable)
for use by the debugger. The internal storage format has been
optimized to use less memory.
This should save 24 bytes per stored line for 64-bit
systems, more for C<-Duselongdouble> or C<-Dusequadmath> builds.
Discussed in [L<GH #23171|https://github.com/Perl/perl5/issues/23171>].
=item *
Ensure cloning the save stack for fork emulation doesn't duplicate
freeing the RExC state. [L<GH #23022|https://github.com/Perl/perl5/issues/23022>]
=item *
Smartmatch against a code reference that uses a loop exit such as
C<last> would crash perl. [L<GH #16608|https://github.com/Perl/perl5/issues/16608>]
=item *
Class initializers and C<ADJUST> blocks, per L<perlclass>, that
called C<last> or other loop exits would crash perl. Same cause as
for [L<GH #16608|https://github.com/Perl/perl5/issues/16608>].
=item *
Exceptions thrown and caught entirely within a C<defer {}> or C<finally {}>
block no longer stop the outer run-loop.
Code such as the following would stop running the contents of the C<defer>
block once the inner exception in the inner C<try>/C<catch> block was caught.
This has now been fixed, and runs as expected. ([L<GH #23064|https://github.com/Perl/perl5/issues/23064>]).
defer {
try { die "It breaks\n"; }
catch ($e) { warn $e }
say "This line would never run";
( run in 2.202 seconds using v1.01-cache-2.11-cpan-c221a9de4ec )