[ this is a template for a new perldelta file. Any text flagged as XXX needs
to be processed before release. ]
-perldelta - what is new for perl v5.21.7
+perldelta - what is new for perl v5.21.8
=head1 DESCRIPTION
-This document describes differences between the 5.21.6 release and the 5.21.7
+This document describes differences between the 5.21.7 release and the 5.21.8
release.
-If you are upgrading from an earlier release such as 5.21.5, first read
-L<perl5216delta>, which describes differences between 5.21.5 and 5.21.6.
+If you are upgrading from an earlier release such as 5.21.6, first read
+L<perl5217delta>, which describes differences between 5.21.6 and 5.21.7.
=head1 Notice
[ List each enhancement as a =head2 entry ]
+=head2 The warnings pragma now supports warnings outside of "all"
+
+Ever since perl v5.6.0 we've had no way of adding new warnings without
+retroactively adding them to all existing programs that used C<-w>,
+C<-W> or C<use warnings>.
+
+This caused us to not add new useful warnings out of fear that they
+might unduly burden users who just wanted to upgrade perl and didn't
+want to deal with a bunch of warnings from their existing code.
+
+We now support a way to have our cake and eat it too, and can add new
+warnings to the core going forward through other top-level warning
+categories. See L<the warnings documentation|warnings/Top-level
+warning categories & associated confusion> for details.
+
+=head2 Non-Capturing Regular Expression Flag
+
+Regular expressions now support a C</n> flag that disables capturing
+and filling in C<$1>, C<$2>, etc... inside of groups:
+
+ "hello" =~ /(hi|hello)/n; # $1 is not set
+
+This is equivalent to putting C<?:> at the beginning of every capturing group.
+
+See L<perlre/"n"> for more information.
+
+=head2 C<prototype> with no arguments
+
+C<prototype()> with no arguments now infers C<$_>. [perl #123514]
+
=head1 Security
XXX Any security-related notices go here. In particular, any security
[ List each other deprecation as a =head2 entry ]
-=head2 Setting C<${^ENCODING}> to anything but C<undef>
-
-This variable allows Perl scripts to be written in a non-ASCII,
-non-UTF-8 encoding. However, it affects all modules globally, leading
-to wrong answers and segmentation faults. New scripts should be written
-in UTF-8; old scripts should be converted to UTF-8, which is easily done
-with the L<encoding> pragma.
-
=head1 Performance Enhancements
XXX Changes which enhance performance without changing behaviour go here.
=item *
-L<ExtUtils::ParseXS> has been upgraded from version 3.26 to 3.27.
+L<XXX> has been upgraded from version A.xx to B.yy.
+
+=item *
+
+L<attributes> has been upgraded from version 0.24 to 0.25.
+
+Minor internal change only.
+
+=item *
+
+L<B> has been upgraded from version 1.54 to 1.55.
-Only declare C<file> unused if we actually define it.
+A bug where, after an ithread creation or psuedofork, special/immortal SVs in
+the child ithread/psuedoprocess did not have the correct class of
+C<B::SPECIAL>, has been fixed.
-Improve generated C<RETVAL> code generation to avoid repeated
-references to C<ST(0)>. [perl #123278]
+The C<id> and C<outid> PADLIST methods have been added.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.31 to 1.32.
+
+Deparsing C<BEGIN { undef &foo }> with the B<-w> switch enabled started to
+emit 'uninitialized' warnings in Perl 5.14. This has been fixed.
+
+Deparsing calls to subs with a C<(;+)> prototype resulted in an infinite
+loop. The C<(;$>) C<(_)> and C<(;_)> prototypes were given the wrong
+precedence, causing C<foo($a<$b)> to be deparsed without the parentheses.
+
+=item *
+
+L<Safe> has been upgraded from version 2.38 to 2.39.
+
+C<reval> was not propagating void context properly.
=back
XXX L<message|perldiag/"message">
+=item *
+
+L<Wide character (U+%X) in %s|perldiag/"Wide character (U+%X) in %s">
+
=back
=head2 Changes to Existing Diagnostics
XXX Describe change here
+The message
+L<Locale '%s' may not work well.%s|perldiag/"Locale '%s' may not work well.%s">
+is no longer raised unless the problemtatic locale is actually used in
+the Perl program. Previously it was raised if it merely was the
+underlying locale. All Perl programs have an underlying locale at all
+times, but something like a C<S<use locale>> is needed for that locale
+to actually have some effect. This message will not be raised when
+the underlying locale is hidden.
+
=back
=head1 Utility Changes
=over 4
-=item XXX-some-platform
+=item Win32
-XXX
+=over 4
+
+=item *
+
+Previously, on Visual C++ for Win64 built Perls only, when compiling every Perl
+XS module (including CPAN ones) and Perl aware .c file with a 64 bit Visual C++,
+would uncondtionally have around a dozen warnings from hv_func.h. These
+warnings have been silenced. GCC all bitness and Visual C++ for Win32 were
+not affected.
+
+=item *
+
+Support for building without PerlIO has been removed from the Windows
+makefiles. Non-PerlIO builds were all but deprecated in Perl 5.18.0 and are
+already not supported by F<Configure> on POSIX systems.
+
+=item *
+
+Between 2 and 6 ms and 7 I/O calls have been saved per attempt to open a perl
+module for each path in C<@INC>.
+
+=back
=back
=item *
+Added Perl_sv_get_backrefs() to determine if an SV is a weak-referent.
+
+Function either returns an SV * of type AV, which contains the set of
+weakreferences which reference the passed in SV, or a simple RV * which
+is the only weakref to this item.
+
+=item *
+
+C<gv_add_by_type> which was added to public API in 5.11.0 but undocumented and
+shows no CPAN usage has been removed from public API. Please use public API
+C<GvSVn> C<GvIOn> C<GvAVn> and C<GvHVn> for adding elements to a GV.
+
+=item *
+
+C<GvSVn> C<GvIOn> C<GvAVn> and C<GvHVn> have been made rvalues, previously they
+were lvalues. If you are assigning a SV to C<GvSVn> C<GvIOn> C<GvAVn> and
+C<GvHVn> you are leaking memory. If you want an lvalue, use C<GvSV> C<GvIO>
+C<GvAV> and C<GvHV>.
+
+=item *
+
XXX
=back
=item *
-XXX
+A bug in regular expression patterns that could lead to segfaults and
+other crashes has been fixed. This occurred only in patterns compiled
+with C<"/i">, while taking into account the current POSIX locale (this usually
+means they have to be compiled within the scope of C<S<"use locale">>),
+and there must be a string of at least 128 consecutive bytes to match.
+[perl #123539]
+
+=item *
+
+C<s///> now works on very long strings instead of dying with 'Substitution
+loop'. [perl #103260] [perl #123071]
+
+=item *
+
+C<gmtime> no longer crashes with not-a-number values. [perl #123495]
+
+=item *
+
+C<\()> (reference to an empty list) and C<y///> with lexical $_ in scope
+could do a bad write past the end of the stack. They have been fixed
+to extend the stack first.
=item *
-The L<encoding> pragma's effect is now limited to lexical scope. This
-pragma is deprecated, but in the meantime, it could adversely affect
-unrelated modules that are included in the same program.
+C<prototype()> with no arguments used to read the previous item on the
+stack, so C<print "foo", prototype()> would print foo's prototype. It has
+been fixed to infer $_ instead. [perl #123514]
=back
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.21.6..HEAD
+ perl Porting/acknowledgements.pl v5.21.7..HEAD
=head1 Reporting Bugs