This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update perldelta module versions (Porting/corelist-perldelta.pl)
[perl5.git] / pod / perldelta.pod
index 2d5a52b..a4b92e5 100644 (file)
@@ -2,58 +2,47 @@
 
 =head1 NAME
 
-perldelta - what is new for perl v5.23.6
+perldelta - what is new for perl v5.23.8
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.23.5 release and the 5.23.6
+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.4, first read
-L<perl5235delta>, which describes differences between 5.23.4 and 5.23.5.
+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
+=head1 Core Enhancements
+
+=head2 More fields provided to C<sigaction> callback with C<SA_SIGINFO>
 
-=head2 Regular expression compilation errors
+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.
 
-Some regular expression patterns that had runtime errors now
-don't compile at all.
+=head1 Security
 
-This should have been in the perldelta for 5.23.4, but was omitted.
+=head2 Set proper umask before calling C<mkstemp(3)>
 
-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.
+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.
 
-=head1 Deprecations
+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.
 
-=head2 Using code points above the platform's C<IV_MAX> is now
-deprecated
+This has been fixed by using umask 0177 instead. [perl #127322]
 
-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.
+=head1 Incompatible Changes
 
-=head2 Doing bitwise operations on strings containing code points above
-0xFF is deprecated
+=head2 C<qr/\N{}/> now disallowed under C<use re "strict">
 
-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.
+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>.
 
 =head1 Performance Enhancements
 
@@ -61,12 +50,16 @@ warning will be replaced by an exception.
 
 =item *
 
-Many languages, such as Chinese, are caseless.  Perl now knows about
-most modern commercially important 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 operating on a
-caseless one.
+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 *
+
+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.
 
 =back
 
@@ -78,97 +71,77 @@ caseless one.
 
 =item *
 
-L<B::Deparse> has been upgraded from version 1.35 to 1.36.
-
-Uses of C<< < > >> are now always deparsed as either C<glob()> or
-C<readline()>, and uses of C<glob()> or C<readline()> are never deparsed as
-C<< < > >>. This fixes the deparsing of C<readline ${"a"}>.
-L<[perl #116677]|https://rt.perl.org/Ticket/Display.html?id=116677>
+F<cpan/podlators/> has been upgraded from version 4.04 to 4.06.
 
 =item *
 
-L<CPAN::Meta::YAML> has been upgraded from version 0.017-TRIAL to 0.018,
-with no change since 0.017.
+The PathTools module collection has been upgraded from version 3.62
+to 3.63.
 
 =item *
 
-L<CPAN::Meta::Requirements> has been upgraded from version 2.133 to 2.140.
+L<DynaLoader> has been upgraded from version 1.37 to 1.38.
 
-Adds a method for getting structured requirements and adds better error
-messages.
+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<Data::Dumper> has been upgraded from version 2.158 to 2.159.
-
-This adds a "Trailingcomma" option, which when enabled adds a trailing comma
-after the last element of dumped arrays and hashes that would otherwise be
-followed immediately by a line break.
-L<[perl #126813]|https://rt.perl.org/Ticket/Display.html?id=126813>
-
-The internals have also been substantially refactored and cleaned up.  It
-may be more efficient on some platforms.
+L<Encode> has been upgraded from version 2.78 to 2.80.
 
 =item *
 
-L<DynaLoader> has been upgraded from version 1.36 to 1.37.
-
-Fixed an else nesting issue in dynamic loading support for OS/390 (and
-similar systems) that was introduced in 1.36.
+L<ExtUtils::CBuilder> has been upgraded from version 0.280224 to 0.280225.
 
 =item *
 
-L<File::Spec> and L<Cwd> have been upgraded from version 3.59 to 3.60,
-adding L<File::Spec::AmigaOS>.
+L<ExtUtils::MakeMaker> has been upgraded from version 7.10 to 7.10_01.
 
 =item *
 
-L<Hash::Util::FieldHash> has been upgraded from version 1.18 to 1.19.
+L<File::Spec> has been upgraded from version 3.62 to 3.63.
 
 =item *
 
-L<Locale::Codes> has been upgraded from version 3.36 to 3.37.
+L<IPC::SysV> has been upgraded from version 2.04 to 2.05.
 
 =item *
 
-L<Math::BigInt::FastCalc> has been updated from version 0.37 to 0.38.
+L<Module::CoreList> has been upgraded from version 5.20160120 to 5.20160121.
 
 =item *
 
-L<Module::Metadata> has been updated from version 1.000030-TRIAL to
-1.000031-TRIAL, with no functional changes.
+L<ODBM_File> has been upgraded from version 1.12 to 1.13.
 
 =item *
 
-L<Term::ANSIColor> has been upgraded from version 4.03 to 4.04, with no
-functional changes.
+L<PerlIO::encoding> has been upgraded from version 0.23 to 0.24.
 
 =item *
 
-L<Unicode::Normalize> has been updated from version 1.23 to 1.24, with
-no functional changes.
+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<strict> has been upgraded from version 1.09 to 1.10, with only a
-documentation change.
+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<threads> has been upgraded from version 2.04 to 2.05.
+L<Storable> has been upgraded from version 2.54 to 2.55.
 
 =item *
 
-L<utf8> has been upgraded from version 1.17 to 1.18.
+L<Time::HiRes> has been upgraded from version 1.9728 to 1.9730.
 
-Partly reverted a micro-optimization to F<lib/utf_heavy.pl> that
-caused self-recursion when it was loaded with C<${^ENCODING}> set.
-L<[perl #126593]|https://rt.perl.org/Ticket/Display.html?id=126593>
-
-=item *
-
-The modules L<sigtrap>, L<DB>, and the perl debugger could have, under
-rare circumstances, output raw control characters.  This has been fixed.
+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()>.
 
 =back
 
@@ -176,175 +149,229 @@ rare circumstances, output raw control characters.  This has been fixed.
 
 =head2 Changes to Existing Documentation
 
-=head3 L<perlfunc>
+=head3 L<perlguts>
 
 =over 4
 
 =item *
 
-The documentation of C<hex> has been revised to clarify valid inputs.
+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<perlop>
+=head3 L<perlmodlib>
 
 =over 4
 
 =item *
 
-The documentation of C<qx//> now describes how C<$?> is affected.
+We now recommend contacting the module-authors list or PAUSE in seeking
+guidance on the naming of modules.
 
 =back
 
-=head3 L<perlvar>
+=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 *
 
-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>
+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<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<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
 
-=head3 L<perlxs>
+=head3 New Warnings
 
 =over 4
 
 =item *
 
-The documentation of C<PROTOTYPES> has been clarified; they are I<disabled>
-by default, not I<enabled>.
+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
 
-=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>.
+=head1 Configuration and Compilation
 
-=head2 New Diagnostics
+=over 4
 
-=head3 New Errors
+=item *
 
-=over 4
+The GNU Make makefile for Win32 now supports parallel builds.  [perl #126632]
 
 =item *
 
-L<Invalid number '%s' for -C option.|perldiag/"Invalid number '%s' for -C option.">
+You can now build perl with MSVC++ on Win32 using GNU Make.  [perl #126632]
+
+=item *
 
-(F) You supplied a number to the -C option that either has extra leading
-zeroes or overflows perl's unsigned integer representation.
+Bison 3.0 is now supported.
 
 =back
 
-=head1 Configuration and Compilation
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
 
 =over 4
 
+=item VMS
+
+=over
+
+=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 *
 
-F<make_ext.pl> is no longer inappropriately silent.  This was caused
-by an operator precedence error introduced in 5.23.4.
+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
 
-=head1 Platform Support
+=back
 
-=head2 New Platforms
+=head2 Platform-Specific Notes
 
 =over 4
 
-=item OpenIndiana
+=item Win32
 
-OpenIndiana (continuation of OpenSolaris) builds were not working due
-to problems with the Perl shared library.  This should be working now.
-L<[perl #126958]|https://rt.perl.org/Ticket/Display.html?id=126958>
+Builds using Microsoft Visual C++ 2003 and earlier no longer produce
+an "INTERNAL COMPILER ERROR" message.  [perl #126045]
 
 =back
 
-=head2 Platform-Specific Notes
+=head1 Internal Changes
 
 =over 4
 
-=item EBCDIC platforms, such as z/OS
+=item *
 
-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.
+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:
 
-=item Cygwin
+=over 4
 
-Tests are more robust against unusual cygdrive prefixes.
-L<[perl #126834]|https://rt.perl.org/Ticket/Display.html?id=126834>
+=item *
 
-=item OS X/Darwin
+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.
 
-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
-setenv() function to update the environment.
+=item *
 
-Perl now uses setenv()/unsetenv() to update the environment on OS X.
-L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240>
+Various macros, which now consistently have a CX_ prefix, have been added:
 
-=item ppc64el floating point
+  CX_CUR(), CX_LEAVE_SCOPE(), CX_POP()
 
-The floating point format of ppc64el (Debian naming for little-endian
-PowerPC) is now detected correctly.
+or renamed:
 
-=item Solaris
+  CX_POP_SAVEARRAY(), CX_DEBUG(), CX_PUSHSUBST(), CX_POPSUBST()
 
-All Solaris now builds shared libperl.
+=item *
 
-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.
+C<cx_pushblock()> now saves C<PL_savestack_ix> and C<PL_tmps_floor>, so
+CMpp_enter*> and C<pp_leave*> no longer do
 
-=back
+  ENTER; SAVETMPS; ....; LEAVE
 
-=head1 Internal Changes
+=item *
 
-=over 4
+C<cx_popblock()> now also restores C<PL_curpm>.
 
 =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.
+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 C<signbit()> emulation has been enhanced.  This will help older
-and/or more exotic platforms or configurations.
+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 *
 
-The C<to_utf8_case> function is discouraged in favor of C<toUPPER_utf8>,
-C<toTITLE_utf8>, C<toLOWER_utf8>, and C<toFOLD_utf8>.
+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 *
 
-EBCDIC code paths have largely been unified to avoid repetition.
+Various context struct fields have been added, removed or modified.
 
 =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.
+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
 
 =back
 
@@ -354,76 +381,107 @@ F<caretx.c>, where other operating systems set that variable.
 
 =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.
+Line numbers larger than 2**31-1 but less than 2**32 are no longer
+returned by 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 *
+
+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 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>
+Fixed an operator precedence problem when C< castflags & 2> is true.
+[perl #127474]
 
 =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>
+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 *
 
-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>
+The AUTOLOAD method is now called when searching for a DESTROY method,
+and correctly sets C<$AUTOLOAD> too.  [perl #124387]  [perl #127494]
 
 =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>
+Avoid parsing beyond the end of the buffer when processing a C<#line>
+directive with no filename.  [perl #127334]
 
 =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>
+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 *
 
-Calling mg_set() in leave_scope() no longer leaks.
+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 *
 
-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.)
+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.6 represents approximately 4 weeks of development since Perl 5.23.5
-and contains approximately 11,000 lines of changes across 260 files from 22
+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 7,500 lines of changes to 170 .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.6:
+improvements that became Perl 5.23.8:
 
-Aaron Crane, Abigail, Achim Gratz, Andy Broad, Aristotle Pagaltzis, Chris
-'BinGOs' Williams, Craig A. Berry, Dagfinn Ilmari MannsÃ¥ker, Daniel Dragan,
-David Golden, David Mitchell, Doug Bell, Ed Avis, Jarkko Hietaniemi, Karen
-Etheridge, Karl Williamson, Lukas Mai, Ricardo Signes, Shlomi Fish, Steve Hay,
-Sullivan Beck, Tony Cook.
+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