This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
cleanup perldelta
[perl5.git] / pod / perldelta.pod
index 8d0d633..e42001c 100644 (file)
 
 =head1 NAME
 
-perldelta - what is new for perl v5.23.4
+perldelta - what is new for perl v5.23.8
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.23.3 release and the 5.23.4
+This document describes differences between the 5.23.7 release and the 5.23.8
 release.
 
-If you are upgrading from an earlier release such as 5.23.2, first read
-L<perl5233delta>, which describes differences between 5.23.2 and 5.23.3.
+If you are upgrading from an earlier release such as 5.23.6, first read
+L<perl5237delta>, which describes differences between 5.23.6 and 5.23.7.
 
-=head1 Incompatible Changes
-
-=head2 Lexical $_ has been removed
+=head1 Core Enhancements
 
-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 More fields provided to C<sigaction> callback with C<SA_SIGINFO>
 
-=head2 Only blanks and tabs are now allowed within C<[...]> within C<(?[...])>.
+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.
 
-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 Performance Enhancements
+=head1 Security
 
-=over 4
-
-=item *
+=head2 Set proper umask before calling C<mkstemp(3)>
 
-C</fixed-substr/> has been made much faster.
+In 5.22 perl started setting umask to 0600 before calling C<mkstemp(3)>
+and restoring it afterwards. This wrongfully tells 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.
 
-On platforms with a libc 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:
+Systems that use mode 0666 in C<mkstemp(3)> (like old versions of
+glibc) createa a file with permissions 0066, leaving world read and
+write permissions regardless of current umask.
 
-    $s = "a" x 1000 . "wxyz";
-    $s =~ /wxyz/ for 1..30000
+This has been fixed by using umask 0177 instead. [perl #127322]
 
-is now about 7 times faster.  On systems with slow 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.
+=head1 Incompatible Changes
 
-=back
+=head2 C<qr/\N{}/> now disallowed under C<use re "strict">
 
-=head1 Modules and Pragmata
+An empty C<\N{}> makes no sense, but for backwards compatibility is
+silently accepted as doing nothing.  But now this is a fatal error under
+the experimental feature L<re/'strict' mode>.
 
-=head2 Updated Modules and Pragmata
+=head1 Performance Enhancements
 
 =over 4
 
 =item *
 
-L<B> has been upgraded from version 1.59 to 1.60.
-
-=item *
-
-L<bignum> has been upgraded from version 0.40 to 0.41.
-
-=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_01 to 2.069.
-
-=item *
-
-L<Devel::PPPort> has been upgraded from version 3.31 to 3.32.
-
-=item *
-
-L<DynaLoader> has been upgraded from version 1.34 to 1.35.
-
-=item *
-
-L<Encode> has been upgraded from version 2.77 to 2.78.
-
-=item *
-
-L<experimental> has been upgraded from version 0.014 to 0.016.
-
-=item *
-
-L<ExtUtils::CBuilder> has been upgraded from version 0.280223 to 0.280224.
-
-=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:
 
-L<File::Path> has been upgraded from version 2.11 to 2.12.
+    sub f{} f();
 
 =item *
 
-L<if> has been upgraded from version 0.0605 to 0.0606.
+On Win32, C<stat>ing or C<-X>ing a path, if the file or directory does not
+exist, is now 3.5x faster on a SSD (or any drive) than before.
 
-=item *
-
-L<IO> has been upgraded from version 1.35 to 1.36.
+=back
 
-For an IO::Poll object C<$poll> with no file handles yet in it,
-C<$poll-E<gt>poll(10)> now sleeps for up to 10 seconds anyway instead of
-returning 0 immediately.
-L<[cpan #25049]|https://rt.cpan.org/Ticket/Display.html?id=25049>
+=head1 Modules and Pragmata
 
-=item *
+=head2 Updated Modules and Pragmata
 
-The IO-Compress modules have been upgraded from version 2.068 to 2.069.
+=over 4
 
 =item *
 
-L<Math::BigInt> has been upgraded from version 1.999701 to 1.999704.
+F<cpan/podlators/> has been upgraded from version 4.04 to 4.06.
 
 =item *
 
-L<Math::BigInt::FastCalc> has been upgraded from version 0.31 to 0.34.
+L<POSIX> has been upgraded from version 1.59 to 1.63.
 
-=item *
+It can now export constants for the C<code> value in the hash passed to the
+L<sigaction|POSIX/sigaction> handler when using the C<SA_SIGINFO> flag.
 
-L<Module::CoreList> has been upgraded from version 5.20150920 to 5.20151020.
+These previously deprecated functions are now removed: C<isalnum>,
+C<isalpha>, C<iscntrl>, C<isdigit>, C<isgraph>, C<islower>, C<isprint>,
+C<ispunct>, C<isspace>, C<isupper>, and C<isxdigit>.
 
 =item *
 
-L<Module::Metadata> has been upgraded from version 1.000027 to 1.000029.
+L<Encode> has been upgraded from version 2.78 to 2.80.
 
 =item *
 
-L<Perl::OSType> has been upgraded from version 1.008 to 1.009.
+L<Storable> has been upgraded from version 2.54 to 2.55.
 
 =item *
 
-L<PerlIO::encoding> has been upgraded from version 0.21 to 0.22.
+L<Time::HiRes> has been upgraded from version 1.9728 to 1.9730.
 
-PerlIO::encoding objects are now properly duplicated.
-L<[perl #31923]|https://rt.perl.org/Ticket/Display.html?id=31923>
+It can now export Linux-specific and FreeBSD-specific C<clock_gettime()>
+constants. It also now has emulation for OS X C<clock_nanosleep()>,
+C<clock_gettime()>, and C<clock_getres()>.
 
 =item *
 
-L<POSIX> has been upgraded from version 1.57 to 1.58.
+L<DynaLoader> has been upgraded from version 1.37 to 1.38.
 
-If C<POSIX::strerror> was passed C<$!> as its argument then it accidentally
-cleared C<$!>.  This has been fixed.
-L<[perl #126229]|https://rt.perl.org/Ticket/Display.html?id=126229>
+DynaLoader now always looks for bootstrap files having the same base name as
+the module for which the bootstrap code is being run. Previously, and only on
+platforms that use C<mod2fname> to produce unique loadable library names,
+L<DynaLoader> would look for the bootstrap file using a base name that matched
+the loadable library and not find it.
 
 =item *
 
-L<Socket> has been upgraded from version 2.020_01 to 2.020_02.
-
-Various fixes have been applied to inet_pton for the benefit of MS VC++ builds
-on Windows.  In particular, this restores the build with MS VC++ 6.0.
+L<PerlIO::encoding> has been upgraded from version 0.23 to 0.24.
 
 =item *
 
-L<Unicode::Normalize> has been upgraded from version 1.19 to 1.21.
+The PathTools module collection has been upgraded from version 3.62
+to 3.63.
 
 =item *
 
-L<warnings> has been upgraded from version 1.33 to 1.35.
-
-The C<warnings::enabled> example now actually uses C<warnings::enabled>.
-L<[perl #126051]|https://rt.perl.org/Ticket/Display.html?id=126051>
+L<IPC::SysV> has been upgraded from version 2.04 to 2.05.
 
 =back
 
@@ -175,47 +129,25 @@ L<[perl #126051]|https://rt.perl.org/Ticket/Display.html?id=126051>
 
 =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<perlsub>
+=head3 L<perlguts>
 
 =over 4
 
 =item *
 
-Updated to note that anonymous subroutines can have signatures.
+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<perltie>
+=head3 L<perlmodlib>
 
 =over 4
 
 =item *
 
-The usage of C<FIRSTKEY> and C<NEXTKEY> has been clarified.
-
-=back
-
-=head3 L<perlvar>
-
-=over 4
-
-=item *
-
-The specific true value of C<$!{E...}> is now documented, noting that it is
-subject to change and not guaranteed.
+We now recommend contacting the module-authors list or PAUSE in seeking
+guidance on the naming of modules.
 
 =back
 
@@ -233,28 +165,29 @@ diagnostic messages, see L<perldiag>.
 
 =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/">
+L<Sequence (?PE<lt>... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>
+|perldiag/"Sequence (?PE<lt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>">
 
 =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/">
+L<Sequence (?PE<gt>... not terminated in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>
+|perldiag/Sequence (?PE<gt>... not terminated in regex; marked by <-- HERE in mE<sol>%sE<sol>>
 
 =item *
 
-L<Illegal user-defined property name|perldiag/"Illegal user-defined property name">
+L<Empty \%c in regex; marked by S<<-- HERE> in mE<sol>%sE<sol>
+|perldiag/Empty \%c in regex; marked by <-- HERE in mE<sol>%sE<sol>>
 
 =back
 
-=head2 Changes to Existing Diagnostics
+=head3 New Warnings
 
 =over 4
 
 =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.
+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>>
 
 =back
 
@@ -264,16 +197,15 @@ use as an lvalue.
 
 =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.
+The GNU Make makefile for Win32 now supports parallel builds.  [perl #126632]
 
 =item *
 
-If you had F<Configure> hints for C<d_procselfexe> or C<procselfexe>, they were
-probably broken by the AmigaOS changes in Perl 5.23.3.  This has been now
-fixed.
-L<[perl #126152]|https://rt.perl.org/Ticket/Display.html?id=126152>
+You can now build perl with MSVC++ on Win32 using GNU Make.  [perl #126632]
+
+=item *
+
+Bison 3.0 is now supported.
 
 =back
 
@@ -283,128 +215,143 @@ L<[perl #126152]|https://rt.perl.org/Ticket/Display.html?id=126152>
 
 =over 4
 
-=item IRIX
+=item VMS
 
 =over
 
 =item *
 
-Under some circumstances IRIX stdio fgetc() and 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>
+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 *
 
-Problems when multiplying long doubles by infinity have been fixed.
-L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396>
+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>.
+
+=back
 
 =back
 
-=item MacOS X
+=head2 Platform-Specific Notes
 
-=over
+=over 4
 
-=item *
+=item Win32
 
-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.
+Builds using Microsoft Visual C++ 2003 and earlier no longer produce
+an "INTERNAL COMPILER ERROR" message.  [perl #126045]
 
 =back
 
-=item VMS
+=head1 Internal Changes
 
-=over
+=over 4
 
 =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:
+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:
 
-    kill SIGKILL, -$pid;
+=over 4
 
-to signal all processes in the same group as C<$pid>.
+=item *
 
-=back
+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 Win32
+=item *
 
-=over
+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 *
 
-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>.
+C<cx_pushblock()> now saves C<PL_savestack_ix> and C<PL_tmps_floor>, so
+CMpp_enter*> and C<pp_leave*> no longer do
+
+  ENTER; SAVETMPS; ....; LEAVE
 
 =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 Perl processes 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 processes life.  This more
-closely matches Unix behaviour 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.
+C<cx_popblock()> now also restores C<PL_curpm>.
 
 =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.
+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 *
 
-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.
+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()>.
 
-=back
+=item *
 
-=back
+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.
 
-=head1 Internal Changes
+=item *
 
-=over 4
+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 *
 
-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)>.
+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 *
 
-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 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).
+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
 
 =back
 
@@ -414,108 +361,115 @@ been documented to require a signed value; formerly int, lately SSize_t).
 
 =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>
+Line numbers larger than 2**31-1 but less than 2**32 are no longer
+returned by caller() as negative numbers.  [perl #126991]
 
 =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>
+C<< unless ( I<assignment> ) >> now properly warns when syntax
+warnings are enabled.  [perl #127122]
 
 =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>
+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 *
 
-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.
+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]
 
-    @a = (1) x $big_number
+=item *
 
-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>
+untie() would sometimes return the last value returned by the UNTIE()
+handler as well as it's normal value, messing up the stack.  [perl
+#126621]
 
 =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>
+Fixed an operator precedence problem when C< castflags & 2> is true.
+[perl #127474]
 
 =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>
+Caching of DESTROY methods could result in a non-pointer or a
+non-STASH stored in the SvSTASH() slot of a stash, breaking the B
+STASH() method.  The DESTROY method is now cached in the MRO metadata
+for the stash.  [perl #126410]
 
 =item *
 
-Several bugs, including a segmentation fault, have been fixed with the bounds
-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>
+The AUTOLOAD method is now called when searching for a DESTROY method,
+and correctly sets C<$AUTOLOAD> too.  [perl #124387]  [perl #127494]
 
-=back
+=item *
 
-=head1 Errata From Previous Releases
+Avoid parsing beyond the end of the buffer when processing a C<#line>
+directive with no filename.  [perl #127334]
 
-=over 4
+=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 *
 
-(This was actually done in Perl 5.23.2, but the perldelta entry got missed.)
-The way that C<OP_AASSIGN> handles assignment with potentially common values
-(e.g. C<($a,$b) = ($b, $a)> has changed.  In particular the C<OPpASSIGN_COMMON>
-flag has been replaced with three more specific flags:
+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]
 
-    OPpASSIGN_COMMON_AGG
-    OPpASSIGN_COMMON_RC1
-    OPpASSIGN_COMMON_SCALAR
+=item *
 
-and the runtime now sometimes does a mark and sweep using the C<SVf_BREAK> to
-detect common elements.
+Perl 5.22 added support to the C99 hexadecimal floating point notation,
+but sometimes misparses hex floats. This had been fixed.
+[perl #127183]
 
 =back
 
 =head1 Acknowledgements
 
-Perl 5.23.4 represents approximately 4 weeks of development since Perl 5.23.3
-and contains approximately 21,000 lines of changes across 360 files from 21
+Perl 5.23.8 represents approximately 4 weeks of development since Perl 5.23.7
+and contains approximately 30,000 lines of changes across 350 files from 23
 authors.
 
 Excluding auto-generated files, documentation and release tools, there were
-approximately 15,000 lines of changes to 250 .pm, .t, .c and .h files.
+approximately 14,000 lines of changes to 210 .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.23.4:
+of users and developers. The following people are known to have contributed the
+improvements that became Perl 5.23.8:
 
-Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari MannsÃ¥ker, Daniel
-Dragan, David Mitchell, Doug Bell, Father Chrysostomos, H.Merijn Brand, Jarkko
-Hietaniemi, Karen Etheridge, Karl Williamson, Nicholas Clark, Peter Martini,
-Rafael Garcia-Suarez, Reini Urban, Ricardo Signes, Steve Hay, Tony Cook, Victor
-Adam, Vincent Pit, Yves Orton.
+Aaron Crane, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari
+MannsÃ¥ker, Daniel Dragan, David Mitchell, Ed J, Herbert Breunung, H.Merijn
+Brand, James E Keenan, Jarkko Hietaniemi, Karl Williamson, Lukas Mai, Niko
+Tyni, Pip Cet, Ricardo Signes, Sawyer X, Sisyphus, Stevan Little, Steve Hay,
+Todd Rinaldo, Tom Hukins, Tony Cook.
 
 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
+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
+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