[ 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.19.2
+perldelta - what is new for perl v5.19.3
=head1 DESCRIPTION
-This document describes differences between the 5.19.1 release and the 5.19.2
+This document describes differences between the 5.19.2 release and the 5.19.3
release.
-If you are upgrading from an earlier release such as 5.19.0, first read
-L<perl5191delta>, which describes differences between 5.19.0 and 5.19.1.
+If you are upgrading from an earlier release such as 5.19.1, first read
+L<perl5192delta>, which describes differences between 5.19.1 and 5.19.2.
=head1 Notice
enhancements. Particularly prominent performance optimisations could go
here, but most should go in the L</Performance Enhancements> section.
-=head2 More consistent prototype parsing
+[ List each enhancement as a =head2 entry ]
-Multiple semicolons in subroutine prototypes have long been tolerated and
-treated as a single semicolon. There was one case where this did not
-happen. A subroutine whose prototype begins with "*" or ";*" can affect
-whether a bareword is considered a method name or sub call. This now
-applies also to ";;;*".
+=head2 B<-F> now implies B<-a> and B<-a> implies B<-n>
-Whitespace has long been allowed inside subroutine prototypes, so
-C<sub( $ $ )> is equivalent to C<sub($$)>. But it was stripped when the
-subroutine was parse. Hence, whitespace was I<not> allowed in prototypes
-set by C<Scalar::Util::set_prototype>. Now it is permitted, and the parser
-no longer strips whitespace. This means C<prototype &mysub> returns the
-original prototype, whitespace and all.
+Previously B<-F> without B<-a> was a no-op, and B<-a> without B<-n> or
+B<-p> was a no-op, with this change, if you supply B<-F> then both
+B<-a> and B<-n> are implied and if you supply B<-a> then B<-n> is implied.
+
+You can still use B<-p> for its extra behaviour. [perl #116190]
=head1 Security
=item *
-L<ExtUtils::Embed> has been upgraded from version 1.30 to 1.31
+L<B> has been upgraded from version 1.44 to 1.45.
+
+Calling the C<GV> method on C<B::CV> objects created from a lexical
+sub would return nonsense, possibly crashing perl. C<GV> now returns
+C<undef> for lexical subs. [perl #118525]
+
+Added the C<NAME_HEK> method to return the name of a lexical sub.
+
+=item *
+
+L<bignum> has been upgraded from version 0.35 to 0.36.
+
+L<bigrat> wasn't correctly updating an internal variable when C<use>d
+with a C<lib> option.
+
+L<Carp> has been upgraded from 1.30 to 1.31
+
+L<Carp> now handles objects with string overloads. It also allows objects
+to specify how they appear in the stack dump with a C<CARP_TRACE> method,
+and also allows the user to specify their own formatter for objects without
+C<CARP_TRACE> as well as other references. [perl #92446]
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from 2.061 to 2.062.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from 2.061 to 2.062.
+
+=item *
+
+L<Config::Perl::V> has been upgraded from version 0.18 to 0.19.
+
+=item *
+
+L<Data::Dumper> has been upgraded from version 2.147 to 2.148.
-The generated C<C> code now incorporates bug fixes present in
-F<miniperlmain.c>, and has whitespace changes. It now uses
-C<#include "..."> for header files instead of C<< #include <...> >>.
-This should not make any difference, unless programs embedding C<libperl>
-happen to have local and incompatible files named F<EXTERN.h>, F<XSUB.h> or
-F<perl.h>, as these will now be picked up instead of the installed Perl
-headers.
+The compatbility of the XS implementation with the pure perl version
+under C<Useqq> has been improved. [perl #118933]
=item *
-L<ExtUtils::Miniperl> has been upgraded and given a version of 1.
-Previously it did not have a version number.
+L<Devel::Peek> has been upgraded from version 1.12 to 1.13.
-C<writemain()> now takes an optional first argument. A reference to a scalar
-is treated as a filename to be opened and written to. Any other reference is
-used as the filehandle to write to. Otherwise the existing default remains,
-to write to C<STDOUT>.
+The C<SvREFCNT_inc()> and C<SvREFCNT_dec()> functions have been
+removed and C<SvREFCNT()> will now work on non-scalars. [perl #117793]
-C<writemain()> has been refactored to use functions from L<ExtUtils::Embed>,
-reducing code size and duplication. The internal function C<canon()> has been
-deleted.
+=item *
+
+L<Exporter> has been upgraded from version 5.68 to 5.69.
+
+L<Exporter> would ignore custom C<$SIG{__WARN__}> handlers in
+C<Exporter::Heavy>. [perl #39739]
+
+=item *
+
+The IO-Compress module collection has been upgraded from 2.061 to 2.062.
=item *
-L<POSIX> has been upgraded from version 1.33 to 1.34.
+L<IPC::Cmd> has been upgraded from version 0.82 to 0.84.
-C<POSIX::AUTOLOAD> will no longer infinitely recurse if the shared
-object fails to load.
+C<run_forked> has various fixes/improvements, L<Socket> is only used where
+needed and a regression introduced in 0.78 has been fixed.
=item *
-L<Storable> has been upgraded from version 2.43 to 2.44.
+The libnet module collection has been upgraded from version 1.22 to 1.23.
-Calling C<STORABLE_attach> hooks no longer leaks memory. [perl #118829]
+=item *
+
+L<List::Util> has been upgraded from version 1.27 to 1.30
+
+L<List::Util> now includes C<pairgrep>, C<pairmap>, C<pairs>, C<pairkeys>,
+C<pairvalues> and C<pairfirst> functions that operate on even-sized lists of
+pairs.
+
+=item *
+
+L<parent> has been upgraded from version 0.225 to 0.226.
+
+=item *
+
+L<Socket> has been upgraded from version 2.010 to 2.011.
+
+Handle FreeBSD (or other platforms) returning shorter AF_UNIX sockaddr
+structures due to embedded sun_len. [cpan #86613]
+
+=item *
+
+L<Storable> has been upgraded from version 2.45 to 2.46.
+
+Avoid creating temporary objects for STORABLE_attach when they aren't
+required. [perl #118907]
+
+=item *
+
+L<Time::Piece> has been upgraded from version 1.21 to 1.22.
=back
However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
section.
-=head3 L<perlexperiment>
+=head3 L<perlopentut>
=over 4
=item *
-Code in regular expressions, regular expression backtracking verbs,
-and lvalue subroutines are no longer listed as experimental. (This
-also affects L<perlre> and L<perlsub>.)
+The C<open> tutorial has been completely rewriten by Tom Christiansen, and now
+focuses on covering only the basics, rather than providing a comprehensive
+reference to all things openable. This rewrite came as the result of a
+vigorous discussion on perl5-porters kicked off by a set of improvements
+written by Alexander Hartmaier to the existing C<perlopentut>. A "more than
+you ever wanted to know about C<open>" document may follow in subsequent
+versions of perl.
=back
=item *
-F<installperl> and F<installman>'s option handling has been refactored to use
-L<Getopt::Long>. Both are used by the F<Makefile> C<install> targets, and
-are not installed, so these changes are only likely to affect custom
-installation scripts.
-
-=over 4
-
-=item *
-
-single letter options now also have long names
-
-=item *
-
-invalid options are now rejected
-
-=item *
-
-command line arguments that are not options are now rejected
-
-=item *
-
-Each now has a C<--help> option to display the usage message.
-
-=back
-
-The behaviour for all valid documented invocations is unchanged.
+XXX
=back
=over 4
-=item MidnightBSD
+=item XXX-some-platform
-C<objformat> was removed from version 0.4-RELEASE of MidnightBSD and had been
-deprecated on earlier versions. This caused the build environment to be
-erroneously configured for C<a.out> rather than C<elf>. This has been now
-been corrected.
+XXX
=back
=item *
-The Makefile shortcut targets for many rarely (or never) used testing and
-profiling targets have been removed, or merged into the only other Makefile
-target that uses them. Specifically, these targets are gone, along with
-documentation that referenced them or explained how to use them:
-
- check.third check.utf16 check.utf8 coretest minitest.prep
- minitest.utf16 perl.config.dashg perl.config.dashpg
- perl.config.gcov perl.gcov perl.gprof perl.gprof.config
- perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
- perl.third perl.third.config perl.valgrind.config purecovperl
- pureperl quantperl test.deparse test.taintwarn test.third
- test.torture test.utf16 test.utf8 test_notty.deparse
- test_notty.third test_notty.valgrind test_prep.third
- test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
- ucheck.valgrind utest utest.third utest.utf16 utest.valgrind
-
-It's still possible to run the relevant commands by "hand" - no underlying
-functionality has been removed.
-
-=item *
-
-It is now possible to keep Perl from initializing locale handling.
-For the most part, Perl doesn't pay attention to locale. (See
-L<perllocale>.) Nonetheless, until now, on startup, it has always
-initialized locale handling to the system default, just in case the
-program being executed ends up using locales. (This is one of the first
-things a locale-aware program should do, long before Perl knows if it
-will actually be needed or not.) This works well except when Perl is
-embedded in another application which wants a locale that isn't the
-system default. Now, if the environment variable
-C<PERL_SKIP_LOCALE_INIT> is set at the time Perl is started, this
-initialization step is skipped. Prior to this, on Windows platforms,
-the only workaround for this deficiency was to use a hacked-up copy of
-internal Perl code. Applications that need to use older Perls can
-discover if the embedded Perl they are using needs the workaround by
-testing that the C preprocessor symbol C<HAS_SKIP_LOCALE_INIT> is not
-defined. (RT #38193)
-
-=item *
-
-C<BmRARE> and C<BmPREVIOUS> have been removed. They were not used anywhere
-and are not part of the API. For XS modules, they are now #defined as 0.
+XXX
=back
=item *
-There have been several fixes related to Perl's handling of locales. perl
-#38193 was described above in L</Internal Changes>.
-Also fixed is #112208 in which the error string in C<$!> displayed as
-garbage in many UTF-8 locales;
-#118197, where the radix (decimal point) character had to be an ASCII
-character (which doesn't work for some non-Western languages);
-and #115808, in which C<POSIX::setlocale()> on failure returned an
-C<undef> which didn't warn about not being defined even if those
-warnings were enabled.
-
-=item *
-
-The dtrace sub-entry probe now works with lexical subs, instead of
-crashing [perl #118305].
-
-=item *
-
-Compiling a C<split> operator whose third argument is a named constant
-evaulating to 0 no longer causes the constant's value to change.
-
-=item *
-
-A named constant used as the second argument to C<index> no longer gets
-coerced to a string if it is a reference, regular expression, dualvar, etc.
-
-=item *
-
-A named constant evaluating to the undefined value used as the second
-argument to C<index> no longer produces "uninitialized" warnings at compile
-time. It will still produce them at run time.
+Autovivifying a subroutine stub via C<\&$glob> started causing crashes in
+Perl 5.18.0 if the $glob was merely a copy of a real glob, i.e., a scalar
+that had had a glob assigned to it. This has been fixed [perl #119051].
=item *
-When a scalar was returned from a subroutine in @INC, the referenced scalar
-was magically converted into an IO thingy, possibly resulting in "Bizarre
-copy" errors if that scalar continued to be used elsewhere. Now Perl uses
-an internal copy of the scalar instead.
+On 64-bit platforms C<pos> can now be set to a value higher than 2**31-1
+[perl #72766].
=back
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.19.1..HEAD
+ perl Porting/acknowledgements.pl v5.19.2..HEAD
=head1 Reporting Bugs