[ 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.4
+perldelta - what is new for perl v5.21.6
=head1 DESCRIPTION
-This document describes differences between the 5.21.3 release and the 5.21.4
+This document describes differences between the 5.21.5 release and the 5.21.6
release.
-If you are upgrading from an earlier release such as 5.21.2, first read
-L<perl5213delta>, which describes differences between 5.21.2 and 5.21.3.
+If you are upgrading from an earlier release such as 5.21.4, first read
+L<perl5215delta>, which describes differences between 5.21.4 and 5.21.5.
=head1 Notice
[ List each enhancement as a =head2 entry ]
-=head2 Infinity and NaN (not-a-number) handling improved
+=head2 List form of pipe open implemented for Win32
-Floating point values are able to hold the special values infinity
-(also -infinity), and NaN (not-a-number). Now we more robustly recognize
-and propagate the value in computations, and on output normalize them
-to C<Inf> and C<NaN>.
+The list form of pipe:
-See also the L<POSIX> enhancements.
+ open my $fh, "-|", "program", @arguments;
+
+is now implemented on Win32. It has the same limitations as C<system
+LIST> on Win32, since the Win32 API doesn't accept program arguments
+as a list.
=head1 Security
[ List each incompatible change as a =head2 entry ]
-=head2 Changes to the C<*> prototype
-
-The C<*> character in a subroutine's prototype used to allow barewords
-to take precedence over most, but not all subroutines. It was never
-consistent and exhibited buggy behaviour.
-
-Now it has been changed, so subroutines always take precedence over
-barewords, which brings it into conformity with similarly prototyped
-built-in functions:
-
- sub splat($) { ... }
- sub foo { ... }
- splat(foo); # now always splat(foo())
- splat(bar); # still splat('bar') as before
- close(foo); # close(foo())
- close(bar); # close('bar')
-
=head1 Deprecations
XXX Any deprecated features, syntax, modules etc. should be listed here.
[ List each other deprecation as a =head2 entry ]
+=head2 Use of non-graphic characters in single-character variable names
+
+The syntax for single-character variable names is more lenient than
+for longer variable names, allowing the one-character name to be a
+punctuation character or even invisible (a non-graphic). Perl v5.20
+deprecated the ASCII-range controls as such a name. Now, all
+non-graphic characters that formerly were allowed are deprecated.
+The practical effect of this occurs only when not under C<S<"use
+utf8">>, and affects just the C1 controls (code points 0x80 through
+0xFF), NO-BREAK SPACE, and SOFT HYPHEN.
+
=head1 Performance Enhancements
XXX Changes which enhance performance without changing behaviour go here.
=item *
-Subroutines with an empty prototype and bodies containing just C<undef> are
-now eligible for inlining.
-L<[perl #122728]|https://rt.perl.org/Ticket/Display.html?id=122728>
-
-=item *
-
-Subroutines in packages no longer need to carry typeglobs around with them.
-Declaring a subroutine will now put a simple sub reference in the stash if
-possible, saving memory. The typeglobs still notionally exist, so
-accessing them will cause the subroutine reference to be upgraded to a
-typeglob. This optimisation does not currently apply to XSUBs or exported
-subroutines, and method calls will undo it, since they cache things in
-typeglobs.
-L<[perl #120441]|https://rt.perl.org/Ticket/Display.html?id=120441>
+XXX
=back
=item *
-L<Archive::Tar> has been upgraded from version 2.00 to 2.02.
-
-Tests can now be run in parallel.
-
-=item *
-
-L<Attribute::Handlers> has been upgraded from version 0.96 to 0.97.
-
-=item *
-
-L<attributes> has been upgraded from version 0.22 to 0.23.
-
-=item *
-
-L<B> has been upgraded from version 1.50 to 1.51.
-
-It provides a new C<B::safename> function, based on the existing
-C<< B::GV->SAFENAME >>, that converts "\cOPEN" to "^OPEN".
-
-=item *
-
-L<B::Concise> has been upgraded from version 0.992 to 0.993.
-
-=item *
-
-L<B::Deparse> has been upgraded from version 1.27 to 1.28.
-
-It now deparses C<our(I<LIST>)> and typed lexical (C<my Dog $spot>) correctly.
-
-=item *
-
-L<bignum> has been upgraded from version 0.37 to 0.38.
-
-=item *
-
-L<constant> has been upgraded from version 1.31 to 1.32.
-
-It now accepts fully-qualified constant names, allowing constants to be defined
-in packages other than the caller.
-
-=item *
-
-L<CPAN::Meta::Requirements> has been upgraded from version 2.126 to 2.128.
-
-=item *
-
-L<Data::Dumper> has been upgraded from version 2.152 to 2.154.
-
-=item *
-
-L<experimental> has been upgraded from version 0.008 to 0.010.
-
-=item *
-
-L<ExtUtils::CBuilder> has been upgraded from version 0.280217 to 0.280219.
-L<[perl #122675]|https://rt.perl.org/Ticket/Display.html?id=122675>
-
-=item *
-
-L<ExtUtils::Install> has been upgraded from version 1.68 to 2.04.
-
-=item *
-
-L<ExtUtils::Manifest> has been upgraded from version 1.65 to 1.68.
-L<[perl #122415]|https://rt.perl.org/Ticket/Display.html?id=122415>
-
-=item *
+L<IO::Socket> has been upgraded from version 1.37 to 1.38.
-L<File::Find> has been upgraded from version 1.27 to 1.28.
-
-C<find()> and C<finddepth()> will now warn if passed inappropriate or
-misspelled options.
-
-=item *
-
-L<Getopt::Std> has been upgraded from version 1.10 to 1.11.
-
-=item *
-
-L<HTTP::Tiny> has been upgraded from version 0.047 to 0.049.
-
-=item *
-
-L<IO> has been upgraded from version 1.33 to 1.34.
-
-=item *
-
-L<IO::Socket::IP> has been upgraded from version 0.31 to 0.32.
-
-=item *
-
-L<Locale::Codes> has been upgraded from version 3.31 to 3.32.
-
-=item *
-
-L<Math::BigInt> has been upgraded from version 1.9996 to 1.9997.
-
-=item *
-
-L<Module::CoreList> has been upgraded from version 5.021003 to 5.20140915.
-
-=item *
-
-L<overload> has been upgraded from version 1.22 to 1.23.
-
-=item *
-
-PathTools has been upgraded from version 3.49 to 3.50.
-
-=item *
-
-L<Pod::Perldoc> has been upgraded from version 3.23 to 3.24.
-
-=item *
-
-L<POSIX> has been upgraded from version 1.42 to 1.43.
-
-The C99 math functions and constants (for example acosh, round, M_E, M_PI) have
-been added.
-
-=item *
-
-Scalar-List-Utils has been upgraded from version 1.39 to 1.41.
-
-=item *
-
-L<Term::ReadLine> has been upgraded from version 1.14 to 1.15.
-
-=item *
-
-L<Test::Harness> has been upgraded from version 3.32 to 3.33.
-
-=item *
-
-L<Test::Simple> has been upgraded from version 1.001003 to 1.001006.
-
-=item *
-
-L<threads> has been upgraded from version 1.95 to 1.96.
-
-=item *
-
-L<Time::Piece> has been upgraded from version 1.27 to 1.29.
-
-=item *
-
-L<version> has been upgraded from version 0.9908 to 0.9909.
+Document the limitations of the isconnected() method. [perl #123096]
=back
However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
section.
-=head3 L<perlsyn>
-
-=over 4
-
-=item *
-
-An ambiguity in the documentation of the Ellipsis statement has
-been corrected.
-L<[perl #122661]|https://rt.perl.org/Ticket/Display.html?id=122661>
-
-=back
-
-=head3 L<perlxs>
+=head3 L<perldata/Identifier parsing>
=over 4
=item *
-Added a discussion of locale issues in XS code.
+The syntax of single-character variable names has been brought
+up-to-date and more fully explained.
=back
=item *
-XXX L<message|perldiag/"message">
+L<Use of literal non-graphic characters in variable names is deprecated|perldiag/"Use of literal non-graphic characters in variable names is deprecated">
-=back
-
-=head2 Changes to Existing Diagnostics
+=item *
-XXX Changes (i.e. rewording) of diagnostic messages go here
+A new C<locale> warning category has been created, with the following warning
+messages currently in it:
=over 4
=item *
-L<Global symbol "%s" requires explicit package name|perldiag/Global symbol "%s" requires explicit package name (did you forget to declare "my %s"?)>
-
-This message has had '(did you forget to declare "my %s"?)' appended to it,
-to make it more helpful to new Perl programmers.
-L<[perl #121638]|https://rt.perl.org/Ticket/Display.html?id=121638>
-
-=back
+L<Locale '%s' may not work well.%s|perldiag/Locale '%s' may not work well.%s>
-=head2 Diagnostic Removals
+=item *
-=over 4
+L<Can't do %s("%s") on non-UTF-8 locale; resolved to "%s".|perldiag/Can't do %s("%s") on non-UTF-8 locale; resolved to "%s".>
-=item *
+=back
-"Constant is not a FOO reference"
+=back
-Compile-time checking of constant dereferencing (e.g.,
-C<< my_constant->() >>) has been removed, since it was not taking
-overloading into account.
-L<[perl #69456]|https://rt.perl.org/Ticket/Display.html?id=69456>
-L<[perl #122607]|https://rt.perl.org/Ticket/Display.html?id=122607>
+=head2 Changes to Existing Diagnostics
-=item *
+XXX Changes (i.e. rewording) of diagnostic messages go here
-The warning "Ambiguous use of -foo resolved as -&foo()" has been removed.
-There is actually no ambiguity here, and this impedes the use of negated
-constants; e.g., C<-Inf>.
+=over 4
=item *
-The little-known C<my Class $var> syntax (see L<fields> and L<attributes>)
-could get confused in the scope of C<use utf8> if C<Class> were a constant
-whose value contained Latin-1 characters.
+XXX Describe change here
=back
=item *
-XXX
+F<Configure> with C<-Dmksymlinks> should now be faster. [perl #122002]
=back
=back
-=head1 Internal Changes
-
-XXX Changes which affect the interface available to C<XS> code go here. Other
-significant internal changes for future core maintainers should be noted as
-well.
-
-[ List each change as a =item entry ]
+=head3 Win32
=over 4
=item *
-C<save_re_context> no longer does anything and has been moved to
-F<mathoms.c>.
+In the experimental C<:win32> layer, a crash in C<open> was fixed. Also
+opening C</dev/null>, which works the Win32 Perl's normal C<:unix> layer, was
+implemented for C<:win32>.
+L<[perl #122224]|https://rt.perl.org/Ticket/Display.html?id=122224>
=item *
-C<cv_name> is a new API function that can be passed a CV or GV. It returns
-an SV containing the name of the subroutine for use in diagnostics.
-L<[perl #116735]|https://rt.perl.org/Ticket/Display.html?id=116735>
-L<[perl #120441]|https://rt.perl.org/Ticket/Display.html?id=120441>
+A new makefile option, C<USE_LONG_DOUBLE>, has been added to the Windows
+dmake makefile for gcc builds only. Set this to "define" if you want perl to
+use long doubles to give more accuracy and range for floating point numbers.
-=item *
+=back
-C<cv_set_call_checker_flags> is a new API function that works like
-C<cv_set_call_checker>, except that it allows the caller to specify whether
-the call checker requires a full GV for reporting the subroutine's name, or
-whether it could be passed a CV instead. Whatever value is passed will be
-acceptable to C<cv_name>. C<cv_set_call_checker> guarantees there will be
-a GV, but it may have to create one on the fly, which is inefficient.
-L<[perl #116735]|https://rt.perl.org/Ticket/Display.html?id=116735>
+=head1 Internal Changes
-=item *
+XXX Changes which affect the interface available to C<XS> code go here. Other
+significant internal changes for future core maintainers should be noted as
+well.
-C<CvGV> (which is not part of the API) is now a more complex macro, which
-may call a function and reify a GV. For those cases where is has been used
-as a boolean, C<CvHASGV> has been added, which will return true for CVs
-that notionally have GVs, but without reifying the GV. C<CvGV> also
-returns a GV now for lexical subs.
-L<[perl #120441]|https://rt.perl.org/Ticket/Display.html?id=120441>
+[ List each change as a =item entry ]
+
+=over 4
=item *
-Added L<perlapi/sync_locale>.
-Changing the program's locale should be avoided by XS code. Nevertheless,
-certain non-Perl libraries called from XS, such as C<Gtk> do so. When this
-happens, Perl needs to be told that the locale has changed. Use this function
-to do so, before returning to Perl.
+C<screaminstr> has been removed. Although marked as public API, it is
+undocumented and has no usage in modern perl versions on CPAN Grep. Calling it
+has been fatal since 5.17.0.
=back
=item *
-XXX
-
-=item *
-
-Constant dereferencing now works correctly for typeglob constants.
-Previously the glob was stringified and its name looked up. Now the glob
-itself is used.
-L<[perl #69456]|https://rt.perl.org/Ticket/Display.html?id=69456>
-
-=item *
-
-When parsing a funny character ($ @ % &) followed by braces, the parser no
-longer tries to guess whether it is a block or a hash constructor (causing
-a syntax error when it guesses the latter), since it can only be a block.
-
-=item *
-
-C<undef $reference> now frees the referent immediately, instead of hanging
-on to it until the next statement.
-L<[perl #122556]|https://rt.perl.org/Ticket/Display.html?id=122556>
+fchmod() and futimes() now set C<$!> when they fail due to being
+passed a closed file handle. [perl #122703]
=item *
-Various cases where the name of a sub is used (autoload, overloading, error
-messages) used to crash for lexical subs, but have been fixed.
+Perl now comes with a corrected Unicode 7.0 for the erratum issued on
+October 21, 2014 (see L<http://www.unicode.org/errata/#current_errata>),
+dealing with glyph shaping in Arabic.
=item *
-Bareword lookup now tries to avoid vivifying packages if it turns out the
-bareword is not going to be a subroutine name.
+op_free() no longer crashes due to a stack overflow when freeing a
+deeply recursive op tree. [perl #108276]
=item *
-Compilation of anonymous constants (e.g., C<sub () { 3 }>) no longer
-deletes any subroutine named C<__ANON__> in the current package. Not only
-was C<*__ANON__{CODE}> cleared, but there was a memory leak, too. This bug
-goes back to perl 5.8.0.
+scalarvoid() would crash due to a stack overflow when processing a
+deeply recursive op tree. [perl #108276]
=item *
-Stub declarations like C<sub f;> and C<sub f ();> no longer wipe out
-constants of the same name declared by C<use constant>. This bug was
-introduced in perl 5.10.0.
-
-=item *
-
-Under some conditions a warning raised in compilation of regular
-expression patterns could be displayed multiple times. This is now
-fixed.
-
-=item *
-
-C<qr/[\N{named sequence}]/> now works properly in many instances. Some
-names known to C<\N{...}> refer to a sequence of multiple characters,
-instead of the usual single character. Bracketed character classes
-generally only match single characters, but now special handling has
-been added so that they can match named sequences, but not if the class
-is inverted or the sequence is specified as the beginning or end of a
-range. In these cases, the only behavior change from before is a slight
-rewording of the fatal error message given when this class is part of a
-C<?[...])> construct. When the C<[...]> stands alone, the same
-non-fatal warning as before is raised, and only the first character in
-the sequence is used, again just as before.
-
-=item *
-
-Tainted constants evaluated at compile time no longer cause unrelated
-statements to become tainted.
-L<[perl #122669]|https://rt.perl.org/Ticket/Display.html?id=122669>
-
-=item *
-
-C<open $$fh, ...>, which vivifies a handle with a name like "main::_GEN_0",
-was not giving the handle the right reference count, so a double free could
-happen.
-
-=item *
-
-When deciding that a bareword was a method name, the parser would get
-confused if an "our" sub with the same name existed, and look up the method
-in the package of the "our" sub, instead of the package of the invocant.
-
-=item *
-
-The parser no longer gets confused by C<\U=> within a double-quoted string.
-It used to produce a syntax error, but now compiles it correctly.
-L<[perl #80368]|https://rt.perl.org/Ticket/Display.html?id=80368>
-
-=item *
-
-It has always been the intention for the C<-B> and C<-T> file test
-operators to treat UTF-8 encoded files as text.
-(L<perlfunc|perlfunc/-X FILEHANDLE> has been updated to say this.)
-Previously, it was possible for some files to be considered UTF-8 that
-actually weren't valid UTF-8. This is now fixed. The operators now
-work on EBCDIC platforms as well.
-
-=item *
-
-Under some conditions warning messages raised during regular expression
-pattern compilation were being output more than once. This has now been
-fixed.
-
-=item *
-
-A regression has been fixed that was introduced in v5.20.0 (fixed in
-v5.20.1 as well as here) in which a UTF-8 encoded regular expression
-pattern that contains a single ASCII lowercase letter does not match its
-uppercase counterpart.
-L<[perl #122655]|https://rt.perl.org/Ticket/Display.html?id=122655>
-
-=item *
-
-Constant folding could incorrectly suppress warnings if lexical warnings
-(C<use warnings> or C<no warnings>) were not in effect and C<$^W> were
-false at compile time and true at run time.
-
-=item *
-
-Loading UTF8 tables during a regular expression match could cause assertion
-failures under debugging builds if the previous match used the very same
-regular expression.
-L<[perl #122747]|https://rt.perl.org/Ticket/Display.html?id=122747>
-
-=item *
-
-Thread cloning used to work incorrectly for lexical subs, possibly causing
-crashes or double frees on exit.
-
-=item *
-
-Since perl 5.14.0, deleting C<$SomePackage::{__ANON__}> and then undefining
-an anonymous subroutine could corrupt things internally, resulting in
-L<Devel::Peek> crashing or L<B.pm|B> giving nonsensical data. This has
-been fixed.
-
-=item *
-
-C<(caller $n)[3]> now reports names of lexical subs, instead of treating
-them as "(unknown)".
-
-=item *
-
-C<sort subname LIST> now supports lexical subs for the comparison routine.
-
-=item *
-
-Aliasing (e.g., via C<*x = *y>) could confuse list assignments that mention
-the two names for the same variable on either side, causing wrong values to
-be assigned.
-L<[perl #15667]|https://rt.perl.org/Ticket/Display.html?id=15667>
-
-=item *
-
-Long here-doc terminators could cause a bad read on short lines of input.
-This has been fixed. It is doubtful that any crash could have occurred.
-This bug goes back to when here-docs were introduced in perl 3.000
-twenty-five years ago.
-
-=item *
-
-An optimization in C<split> to treat C<split/^/> like C<split/^/m> had the
-unfortunate side-effect of also treating C<split/\A/> like C<split/^/m>, which
-it should not. This has been fixed. (Note, however, that C<split/^x/> does
-not behave like C<split/^x/m>, which is also considered to be a bug and will be
-fixed in a future version.)
-L<[perl #122761]|https://rt.perl.org/Ticket/Display.html?id=122761>
+In Perl 5.20.0, C<$^N> accidentally had the internal UTF8 flag turned off
+if accessed from a code block within a regular expression, effectively
+UTF8-encoding the value. This has been fixed. [perl #123135]
=back
=item *
-XXX
+Starting in 5.21.6, accessing L<perlapi/CvPADLIST> in an XSUB is forbidden.
+CvPADLIST has be reused for a different internal purpose for XSUBs. Guard all
+CvPADLIST expressions with C<CvISXSUB()> if your code doesn't already block
+XSUB CV*s from going through optree CV* expecting code.
=back
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.21.3..HEAD
+ perl Porting/acknowledgements.pl v5.21.5..HEAD
=head1 Reporting Bugs