=encoding utf8
-=for comment
-This has been completed up to aebc0cbe, except for:
-bb789b09de07edfb74477eb1603949c96d60927d (Dave Mitchell)
-
=head1 NAME
[ 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.15.1
+perldelta - what is new for perl v5.15.2
=head1 DESCRIPTION
This document describes differences between the 5.15.1 release and
-the 5.15.0 release.
+the 5.15.2 release.
-If you are upgrading from an earlier release such as 5.14.0, first read
-L<perl5150delta>, which describes differences between 5.14.0 and
-5.15.0.
+If you are upgrading from an earlier release such as 5.15.0, first read
+L<perl5151delta>, which describes differences between 5.15.0 and
+5.15.1.
=head1 Notice
[ List each enhancement as a =head2 entry ]
-=head2 C<splice()> doesn't warn when truncating
-
-You can now limit the size of an array using C<splice(@a,MAX_LEN)> without
-worrying about warnings.
-
-=head2 The C<\$> prototype accepts any scalar lvalue
-
-The C<\$> and C<\[$]> subroutine prototypes now accept any scalar lvalue
-argument. Previously they only accepted scalars beginning with C<$> and
-hash and array elements. This change makes them consistent with the way
-the built-in C<read> and C<recv> functions (among others) parse their
-arguments. This means that one can override the built-in functions with
-custom subroutines that parse their arguments the same way.
-
-=head2 You can now C<study> more than one string
-
-The restriction that you can only have one C<study> active at a time has been
-removed. You can now usefully C<study> as many strings as you want (until you
-exhaust memory).
-
-=head2 The Unicode C<Script_Extensions> property is now supported.
-
-New in Unicode 6.0, this is an improved C<Script> property. Details
-are in L<perlunicode/Scripts>.
-
-=head2 DTrace probes for interpreter phase change
-
-The C<phase-change> probes will fire when the interpreter's phase
-changes, which tracks the C<${^GLOBAL_PHASE}> variable. C<arg0> is
-the new phase name; C<arg1> is the old one. This is useful mostly
-for limiting your instrumentation to one or more of: compile time,
-run time, destruct time.
-
-=head2 New Pad API
-
-Many new functions have been added to the API for manipulating lexical
-pads. See L<perlapi/Pad Data Structures> for more information.
-
=head1 Security
XXX Any security-related notices go here. In particular, any security
[ List each incompatible change as a =head2 entry ]
+=head2 C<UNIVERSAL::VERSION> now returns $VERSION
+
+C<UNIVERSAL::VERSION> now return whatever is in $VERSION, instead of
+returning $VERSION converted to a version object and then to a string.
+As a result, it no longer parses the version when called without arguments,
+so it no longer dies in that case for malformed versions. This allows
+custom version number parsers to use C<< ->VERSION >> to retrieve the
+version number, as was the case in Perl 5.8 [perl #95544].
+
=head1 Deprecations
XXX Any deprecated features, syntax, modules etc. should be listed here.
=item *
-The short-circuiting operators C<&&>, C<||>, and C<//> are now
-considerably faster in the short-circuiting case due to reduced
-OP-tree traversal.
-
-=item *
-
-The implementation of C<s///r> makes one less copy of the scalar's value.
-
-=item *
-
-If a studied scalar is C<split> with a regex, the engine will now take
-advantage of the C<study> data.
-
-=item *
-
-C<study> now uses considerably less memory for shorter strings. Strings shorter
-than 65535 characters use roughly half the memory than previously, strings
-shorter than 255 characters use roughly one quarter of the memory.
-
-=item *
-
-Recursive calls to lvalue subroutines in lvalue scalar context use less
-memory.
+XXX
=back
=item *
-The logic for parsing, merging, and dumping XS typemaps has been extracted
-from C<ExtUtils::ParseXS> into a module of its own, L<ExtUtils::Typemaps>.
-C<ExtUtils::Typemaps> offers an interface to typemap handling outside of
-the scope of the XS compiler itself.
-
-As a first use case of the improved API and extensibility, typemaps can now
-be included inline in XS code with a HEREDOC-like syntax:
-
- TYPEMAP: <<END_TYPEMAP
- MyType T_IV
- END_TYPEMAP
+XXX
=back
=item *
-L<B::Deparse> has been upgrade from version 1.05 to 1.06.
-
-It now correctly deparses interpolation of punctuation variables (like
-C<@*>) that do not interpolate without braces [perl #93990].
+L<CPAN> has been upgraded from version 1.9600 to version 1.9800
=item *
-L<CGI> has been upgraded from version 3.54 to version 3.55
-
-[THINGS THAT MAY BREAK YOUR CODE]
-
-C<url()> was fixed to return C<PATH_INFO> when it is explicitly requested
-with either the path=>1 or path_info=>1 flag.
-
-If your code is running under mod_rewrite (or compatible) and you are calling C<self_url()> or
-you are calling C<url()> and passing path_info=>1, These methods will actually be
-returning C<PATH_INFO> now, as you have explicitly requested, or has C<self_url()>
-has requested on your behalf.
-
-The C<PATH_INFO> has been omitted in such URLs since the issue was introduced
-in the 3.12 release in December, 2005.
-
-This bug is so old your application may have come to depend on it or
-workaround it. Check for application before upgrading to this release.
-
-Examples of affected method calls:
+L<CPANPLUS> has been upgraded from version 0.9108 to version 0.9109
- $q->url(-absolute => 1, -query => 1, -path_info => 1 )
- $q->url(-path=>1)
- $q->url(-full=>1,-path=>1)
- $q->url(-rewrite=>1,-path=>1)
- $q->self_url();
+Fixed support for v-strings and x.y.z versions with v5.8.4
=item *
-L<Compress::Raw::Bzip2> has been upgraded from version 2.035 to version 2.037
+L<CPAN::Meta> has been upgraded from version 2.110930_001 to version 2.112150
-=item *
-
-L<Compress::Raw::Zlib> has been upgraded from version 2.035 to version 2.037
+Stringify any objects encountered during conversion.
-Added offset parameter to CRC32
+Clarified that file paths in the 'provides' section must be in
+Unix-style (i.e. forward slashes)
=item *
-L<Compress::Zlib> has been upgraded from version 2.035 to version 2.037
+L<DB_File> has been upgraded from version 1.822 to version 1.824
-IO::Compress::Zip and IO::Uncompress::Unzip now have support for LZMA (method 14).
-There is a fix for a CRC issue in IO::Compress::Unzip and it supports Streamed
-Stored context now. And fixed a Zip64 issue in
-IO::Compress::Zip when the content size was exactly 0xFFFFFFFF.
+Will now croak if attempt to freeze/thaw DB_File object [RT #69985]
=item *
-L<CPANPLUS> has been upgraded from version 0.9105 to version 0.9108
-
-=item *
+L<Encode> has been upgraded from version 2.43 to version 2.44
-L<Cwd> has been upgraded from version 3.36 to 3.37, to address an
-incompatibility with the EPIC debugger.
+Addressed 'decode_xs n-byte heap-overflow' security bug in Unicode.xs
=item *
-L<diagnostics> has been upgraded from version 1.22 to 1.23.
-
-It now knows how to find descriptions for diagnostic messages ending with a
-dot, instead getting confused by it.
-
-=item *
+L<ExtUtils::Install> has been upgraded from version 1.56 to version 1.57.
-L<ExtUtils::MakeMaker> has been upgraded from version 6.57_05 to version 6.58
+There is no change to ExtUtils::Install other than the version number
+increase, but L<ExtUtils::Installed> has been upgraded from version 1.999_001
+to version 1.999002 and a new C<skip_cwd> attribute has been added.
=item *
-L<ExtUtils::ParseXS> has been upgraded from version 2.2210 to 3.00_01.
-
-Much of L<ExtUtils::ParseXS>, the module behind the XS compiler C<xsubpp>,
-was rewritten and cleaned up. It has been made somewhat more extensible
-and now finally uses strictures.
-
-The typemap logic has been moved into a separate module,
-L<ExtUtils::Typemaps>. See L</New Modules and Pragmata>, above.
+L<ExtUtils::MakeMaker> has been upgraded from version 6.58 to version 6.59
=item *
-L<IPC::Cmd> has been upgraded from version 0.70 to version 0.72
+L<IPC::Open3> has been upgraded from version 1.11 to 1.12.
-Capturing of command output (both C<STDOUT> and C<STDERR>) is now supported
-using L<IPC::Open3> on MSWin32 without requiring L<IPC::Run>.
+C<open3> with "-" for the program name works once more. This was broken in
+version 1.06 (and hence in Perl 5.14.0) [perl #95748].
=item *
-L<Locale::Codes> has been upgraded from version 3.16 to version 3.17
-
-Added Language Extension codes (langext) and Language Variation codes
-(langvar) as defined in the IANA language registry.
-
-Added language codes from ISO 639-5
+L<Module::Build> has been upgraded from version 0.3800 to version 0.39_01.
-Added language/script codes from the IANA language subtag
-registry
-
-Fixed an uninitialized value warning. RT 67438
-
-Fixed the return value for the all_XXX_codes and all_XXX_names functions. RT 69100
-
-Reorganized modules to move Locale::MODULE to Locale::Codes::MODULE to
-allow for cleaner future additions. The original four modules (Locale::Language,
-Locale::Currency, Locale::Country, Locale::Script) will continue to work, but
-all new sets of codes will be added in the Locale::Codes namespace.
+Pod to HTML internals changed to support revisions to Pod::Html in core.
+Also fixes some minor bugs. [rt.cpan.org #68585] [rt.cpan.org #67893]
+[rt.cpan.org #67008]
=item *
-L<attributes> has been upgraded from version 0.14 to 0.15, as part of the
-lvalue attribute warnings fix. See L</Selected Bug Fixes>, below.
+L<Module::Load> has been upgraded from version 0.18 to version 0.20
=item *
-L<Math::BigInt::FastCalc> has been upgraded from version 0.28 to version 0.29.
+L<Module::Metadata> has been upgraded from version 1.000004 to version 1.000005
-The XS code is now compiled with C<PERL_NO_GET_CONTEXT>, which will aid
-performance under ithreads.
+Added C<new_from_handle()> method.
=item *
-L<Module::CoreList> has been upgraded from version 2.51 to 2.53.
-
-Some extraneous (and erroneous) entries have been removed
-[rt.cpan.org #69108].
-
-The C<corelist> utility now understands the C<-r> option for
-displaying Perl release dates.
+L<Params::Check> has been upgraded from version 0.28 to version 0.32
=item *
-L<Pod::Perldoc> has been upgraded from version 3.15_05 to 3.15_06.
-
-The B<-v> option now fetches the right section for C<$0>.
-
-=item *
+L<PerlIO::via> has been upgraded from version 0.11 to version 0.12.
-L<Pod::Simple> has been upgraded from version 3.16 to version 3.18
+The only change is a correction in the documentation.
=item *
-L<Unicode::Collate> has been upgraded from version 0.76 to version 0.77
+L<Term::ANSIColor> has been upgraded from version 3.00 to version 3.01
-Applied [perl #93470] silencing compiler warnings with -Wwrite-strings
+Only interpret an initial array reference as a list of colors, not any initial
+reference, allowing the colored function to work properly on objects with
+stringification defined.
=item *
-L<Win32API::File> has been upgraded from version 0.1101 to version 0.1200
-
-Added SetStdHandle and GetStdHandle functions
+L<Unicode::Collate> has been upgraded from version 0.77 to version 0.78
=item *
-L<threads> has been upgraded from version 1.83 to 1.84
-
-An unused variable was removed from the XS code.
+L<Unicode::Normalize> has been upgraded from version 1.12 to version 1.13
=back
=item *
-Perl 4-era .pl libraries
-
-Perl used to bundle a handful of library files that predate Perl 5. Most of
-these files, which have been deprecated since version 5.14.0, have now been
-removed. If your code still relies on these libraries, you can install them
-again from C<Perl4::CoreLibs> on CPAN.
+XXX
=back
XXX Changes which create B<new> files in F<pod/> go here.
-=head3 L<perldtrace>
-
-L<perldtrace> describes Perl's DTrace support, listing the provided probes
-and gives examples of their use.
-
-=head3 L<perl5141delta>
+=head3 L<XXX>
-The delta file for Perl 5.14.1 has been copied to blead.
+XXX Description of the purpose of the new file here
=head2 Changes to Existing Documentation
XXX Description of the change here
-=item *
-
-L<perlxs> was extended with documentation on inline typemaps.
-
-=item *
-
-L<perlref> has a new L<Circular References|perlref/Circular References>
-section explaining how circularities may not be freed and how to solve that
-with weak references.
-
-=item *
-
-The documentation for smart match in L<perlsyn> has been corrected for the
-case of C<undef> on the left-hand side. The list of different smart match
-behaviours had an item in the wrong place.
-
=back
=head1 Diagnostics
=item *
-The L<Invalid version format|perldiag/"Invalid version format (%s)">
-error message now says "negative version number" within the parentheses,
-rather than "non-numeric data", for negative numbers.
-
-=item *
-
-The two warnings
-L<Possible attempt to put comments in qw() list|perldiag/"Possible attempt to put comments in qw() list">
-and
-L<Possible attempt to separate words with commas|perldiag/"Possible attempt to separate words with commas">
-are no longer mutually exclusive: the same C<qw> construct may produce
-both.
-
-=item *
-
-Warnings that mention the names of lexical (C<my>) variables with Unicode
-characters in them now respect the presence or absence of the C<:utf8>
-layer on the output handle, instead of outputting UTF8 regardless. Also,
-the correct names are included in the strings passed to C<$SIG{__WARN__}>
-handlers, rather than the raw UTF8 bytes.
+XXX Describe change here
=back
entries for each change
Use L<XXX> with program names to get proper documentation linking. ]
-=head3 L<XXX>
+=head3 L<perlivp>
=over 4
=item *
-XXX
+Fixed a bug whereby other perls under the current directory could cause
+false positive failures.
+
+=item *
+
+Tests for .ph files have been removed, as these test have been optional since
+2005 and .ph files are no longer generated during installation.
=back
=item *
-XXX
+F<makedef.pl> has been refactored. This should have no noticeable affect on
+any of the platforms that use it as part of their build (AIX, VMS, Win32).
=back
=item *
-F<t/run/dtrace.t> was added to test Perl's DTrace support. This
-test will only be run if your Perl was built with C<-Dusedtrace>
-and if calling C<dtrace> actually lets you instrument code. This
-generally requires being run as root, so this test file is primarily
-intended for use by the dtrace subcommittee of p5p.
+XXX
=back
[ Within the sections, list each platform as a =item entry with specific
changes as paragraphs below it. ]
+=over 4
+
+=item HP-UX PA-RISC/64 now supports gcc-4.x
+
+A fix to correct the socketsize now makes the test suite pass on HP-UX
+PA-RISC for 64bitall builds.
+
+=back
+
=head2 New Platforms
XXX List any platforms that this version of perl compiles on, that previous
=item *
-The expermental C<fetch_cop_label> function has been renamed to
-C<cop_fetch_label>.
-
-=item *
-
-The C<cop_store_label> function has been added to the API, but is
-experimental.
+XXX
=back
=item *
-Applying the :lvalue attribute to subroutine that is already defined does
-not work properly, as the attribute changes the way the sub is compiled.
-Hence, Perl 5.12 began warning when an attempt is made to apply the
-attribute to an already defined sub. In such cases, the attribute is
-discarded.
-
-But the change in 5.12 missed the case where custom attributes are also
-present: that case still silently and ineffectively applied the attribute.
-That omission has now been corrected. C<sub foo :lvalue :Whatever> (when
-C<foo> is already defined) now warns about the :lvalue attribute, and does
-not apply it.
-
-L<attributes.pm|attributes> has likewise been updated to warn and not apply
-the attribute.
+Locking an lvalue subroutine (via C<lock &lvsub>) now locks the return
+value, instead of trying to lock the sub (which has no effect). It also no
+longer tries to return the sub as a scalar, resulting in strange side
+effects like C<ref \$_> returning "CODE" in some instances.
=item *
-=for comment
-Not necessary for perl5160delta
-
-The remaining discrepancies between explicit and implicit return from
-lvalue subroutines have been resolved. They mainly involved which error
-message to display when a read-only value is returned in lvalue context.
-Also, returning a PADTMP (the result of most built-ins, like C<index>) in
-lvalue context is now forbidden for explicit return, as it always has been
-for implicit return. This is not a regression from 5.14, as all the cases
-in which it could happen where previously syntax errors.
+C<lock>'s prototype has been corrected to C<(\[$@%*])> from C<(\$)>, which
+was just wrong.
=item *
-=for comment
-Not necessary for perl5160delta
-
-Explicitly returning a tied C<my> variable from an lvalue subroutine in
-list lvalue context used to clear the variable before the assignment could
-happen. This is something that was missed when explicit return was made to
-work in 5.15.0.
+The prototypes for the core functions C<stat> and C<lstat> have been
+removed, as they were incorrect, because their syntax cannot be replicated
+by Perl subroutines.
=item *
-=for comment
-Not necessary for perl5160delta
-
-A minor memory leak, introduced in 5.15.0, has been fixed. It would occur
-when a hash is freed that has had its current iterator deleted
-[perl #93454].
+Most dereferencing operators (C<${}>, etc.) used to call C<FETCH> twice on
+a tied operand when doing a symbolic dereference (looking up a variable by
+name, which is not permitted under C<use strict 'refs'>). Only C<&{}> did
+not have this problem. This has been fixed.
=item *
-The C<prototype> function now returns a prototype (the empty string) for
-the C<__FILE__>, C<__LINE__> and C<__PACKAGE__> directives, instead of
-dying, as they are indistinguishable syntactically from nullary functions
-like C<time>.
+A minor regression introduced in 5.15.0 has been fixed. Dereferencing a
+magical mortal (e.g., the return value of C<delete> on a tied hash element)
+explicitly returned from a subroutine called recursively was not calling
+C<FETCH>. This would affect code like C<@{ foo() }> where the C<foo> sub
+contains C<return delete $hash{elem}> and is calling itself.
=item *
-A bug affecting lvalue context propagation through nested lvalue subroutine
-calls has been fixed. Previously, returning a value in nested rvalue
-context would be treated as lvalue context by the inner subroutine call,
-resulting in some values (such as read-only values) being rejected.
+A panic involving the combination of the regular expression modifiers
+C</aa> and the C<\b> escape sequence introduced in 5.14.0 has been
+fixed [perl #95964].
=item *
-Some core bugs affecting L<Hash::Util> have been fixed: locking a hash
-element that is a glob copy no longer causes subsequent assignment to it to
-corrupt the glob, and unlocking a hash element that holds a copy-on-write
-scalar no longer causes modifications to that scalar to modify other
-scalars that were sharing the same string buffer.
+stat() would always return the inode number as an IV, even when the
+original was unsigned, or too large to fit in an IV. stat() now
+returns the inode number as the type that would best preserve the
+original value. [perl #84590]
=item *
-C<when> blocks are now capable of returning variables declared inside the
-enclosing C<given> block [perl #93548].
-
-=item *
-
-A problem with context propagation when a C<do> block is an argument to
-C<return> has been fixed. It used to cause undefined to be returned in
-some cases of a C<return> inside an C<if> block which itself is followed by
-another C<return>.
-
-=item *
-
-Calling C<index> with a tainted constant no longer causes constants in
-subsequently compiled code to become tainted [perl #64804].
-
-=item *
-
-The peephole optimiser uses less recursion than before, making it possible
-to evaluate code like C<eval ("{\$x = 1 }\n" x 100000)> without a crash.
-
-=item *
-
-Use of lexical (C<my>) variables in code blocks embedded in regular
-expressions will no longer result in memory corruption or crashes.
-
-Nevertheless, these code blocks are still experimental, as there are still
-problems with the wrong variables being closed over (in loops for instance)
-and with abnormal exiting (e.g., C<die>) causing memory corruption.
-
-=item *
-
-The C<SvIsCOW> C macro now returns false for read-only copies of typeglobs,
-such as those created by:
-
- $hash{elem} = *foo;
- Hash::Util::lock_value %hash, 'elem';
-
-It used to return true.
+The combination of the regular expression modifiers C</aa> and the C<\b>
+and C<\B> escape sequences did not work properly on UTF-8 encoded
+strings. All non-ASCII characters under C</aa> should be treated as
+non-word characters, but what was happening was that Unicode rules were
+used to determine wordness/non-wordness for non-ASCII characters. This
+is now fixed [perl #95968].
=back
=head1 Acknowledgements
-Generate this with:
+XXX Generate this with:
- perl Porting/acknowledgements.pl v5.15.0..HEAD
+ perl Porting/acknowledgements.pl v5.15.1..HEAD
=head1 Reporting Bugs