=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.13.3
+XXX Add links around modules throughout
+
=head1 DESCRIPTION
This document describes differences between the 5.13.3 release and
L<perl5132delta>, which describes differences between 5.13.1 and
5.13.2.
-=head1 Notice
-
-XXX Any important notices here
-
=head1 Core Enhancements
-XXX New core language features go here. Summarise user-visible core language
-enhancements. Particularly prominent performance optimisations could go
-here, but most should go in the L</Performance Enhancements> section.
+=head2 \o{...}
-[ List each enhancement as a =head2 entry ]
+The escape sequence C<"\o"> in double-quotish contexts is now defined. It
+must be followed by braces enclosing an octal number of at least one digit. It
+means the character whose ordinal value is that octal number. This construct
+allows large octal ordinals beyond the current max of 0777 to be represented.
+It also allows you to specify a character in octal which can safely be
+concatenated with other regex snippets without danger of changing its meaning,
+and one which won't ever be confused with being a backreference to a regex
+capture group. See L<perlre/Capture groups>
=head2 C<\N{I<name>}> and C<charnames> enhancements
See L<charnames> for details on all these changes.
-=head1 Security
+=head2 Uppercase X/B allowed in hexadecimal/binary literals
-XXX Any security-related notices go here. In particular, any security
-vulnerabilities closed should be noted here rather than in the
-L</Selected Bug Fixes> section.
+Literals may now use either upper case C<0X...> or C<0B...> prefixes,
+in addition to the already supported C<0x...> and C<0b...>
+syntax. (RT#76296) (a674e8d)
-[ List each security issue as a =head2 entry ]
+C, Ruby, Python and PHP already supported this syntax, and it makes
+Perl more internally consistent. A round-trip with C<eval sprintf
+"%#X", 0x10> now returns C<16> in addition to C<eval sprintf "%#x",
+0x10>, which worked before.
=head1 Incompatible Changes
-XXX For a release on a stable branch, this section aspires to be:
-
- There are no changes intentionally incompatible with 5.XXX.XXX. If any
- exist, they are bugs and reports are welcome.
+=head2 \400 - \777
-[ List each incompatible change as a =head2 entry ]
+Use of C<\400> - C<\777> in regexes in certain circumstances has given different,
+anomalous behavior than their use in all other double-quotish contexts. Since
+5.10.1, a deprecated warning message has been raised when this happens. Now,
+all double-quotish contexts have the same behavior, namely to be equivalent to
+C<\x{100}> - C<\x{1FF}>, with no deprecation warning. Use of these values in the
+command line option C<"-0"> retains the current meaning to slurp input files
+whole; previously, this was documented only for C<"-0777">. It is recommended,
+however, because of various ambiguities, to use the new L</\o{...}> construct
+to represent characters in octal.
=head1 Deprecations
-XXX Any deprecated features, syntax, modules etc. should be listed here.
-In particular, deprecated modules should be listed here even if they are
-listed as an updated module in the L</Modules and Pragmata> section.
+=head2 Omitting a space between regular expression and subsequent word
-[ List each deprecation as a =head2 entry ]
+Omitting a space between a regex pattern or pattern modifiers and the
+following word is deprecated. Deprecation for regular expression matches
+was added in Perl 5.13.2. In this release, the deprecation is extended
+to regular expression substitutions. For example,
+C<< s/foo/bar/sand $bar >> will still be parsed as
+C<< s/foo/bar/s and $bar >> but will issue a warning.
-=head1 Performance Enhancements
+=head2 Deprecation warning added for deprecated-in-core .pl libs
-XXX Changes which enhance performance without changing behaviour go here. There
-may well be none in a stable release.
+This is a mandatory warning, not obeying -X or lexical warning bits.
+The warning is modelled on that supplied by deprecate.pm for
+deprecated-in-core .pm libraries. It points to the specific CPAN
+distribution that contains the .pl libraries. The CPAN version, of
+course, does not generate the warning. (0111154)
-[ List each enhancement as a =item entry ]
+=head1 Performance Enhancements
=over 4
=item *
-XXX
+There are several small optimizations to improve CPU cache performance
=back
=head1 Modules and Pragmata
-XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/>
-go here. If Module::CoreList is updated, generate an initial draft of the
-following sections using F<Porting/corelist-perldelta.pl>, which prints stub
-entries to STDOUT. Results can be pasted in place of the '=head2' entries
-below. A paragraph summary for important changes should then be added by hand.
-In an ideal world, dual-life modules would have a F<Changes> file that could be
-cribbed.
-
-[ Within each section, list entries as a =item entry ]
+=head2 Updated Modules and Pragmata
-=head2 New Modules and Pragmata
+XXX Make sure these get sorted, are phrased similarly and all version
+numbers are correct
=over 4
=item *
-XXX
-
-=back
+autodie updated to CPAN version 2.10 (a009834)
-=head2 Updated Modules and Pragmata
+=item *
-=over 4
+charnames -- viacode() is now significantly faster (f3227b7)
=item *
-autodie updated to CPAN version 2.10 (a009834)
+version now prevents object methods from being called as class methods
+(d808b68)
=item *
=item *
-Archive-Tar updated to CPAN version 1.62 (d33cd7c)
-
+Archive-Tar updated to version 1.64 (afabe0e)
+
Important changes since 1.54 include: compatibility with busybox
implementations of tar which was added by Mark Swayne; a fix so
that write() and create_archive() close only handles
=item *
+Compress-Raw-Bzip2 updated to CPAN version 2.027 (9e09409)
+
+=item *
+
+Compress-Raw-Zlib updated to CPAN version 2.027 (f02c02e)
+
+=item *
+
+CPANPLUS updated to version 0.9007 (d4e225a)
+
+Fix the shell test to skip if test is not being run under a
+terminal; resolved the issue where a prereq on Config would not be
+recognised as a core module
+
+=item *
+
+Digest-MD5 updated to CPAN version 2.40 (326fafa)
+
+=item *
+
Digest-SHA updated to CPAN version 5.48 (dfe1edc)
=item *
+Exporter no longer overrides C<$SIG{__WARN__}> (RT #74472) (9b86bb5)
+
+=item *
+
ExtUtils-CBuilder updated to CPAN version 0.2703 (7b0eef9)
=item *
=item *
+ExtUtil-ParseXS updated to version 2.2206 (494e8c4)
+
+=item *
+
+File::Copy skips suid tests on a nosuid partition (cae9400)
+
+These tests were being skipped on OpenBSD, but nosuid partitions can
+exist on other systems too. Now it just checks if it can create a suid
+directory, if not the tests are skipped.
+
+Perl builds without errors in a nosuid /tmp with this patch.
+
+=item *
+
+IO-Compress upated to CPAN version 2.027 (e8796d6)
+
+=item *
+
+IPC-Cmd updated to CPAN version 0.60 (e667e1e)
+
+=item *
+
IPC-SysV updated to CPAN version 2.03 (10613b6)
+=item *
+
+Locale::Maketext guts have been merged back into the main module (87d86da)
+and adds external cache support (ace47d6)
+
+=item *
+
+Module-Build updated to CPAN version 0.3607 (40c9afb)
+
=item *
Module-Load updated to CPAN version 0.18 (93eaa32)
=item *
+Term-ANSIColor to CPAN version 3.00 (2c33c76)
+
+=item *
+
+Test-Harness to CPAN version 3.21 (6d31366)
+
+=item *
+
Time-HiRes updated to CPAN version 1.9721 (68c5b4d)
=item *
=back
-=head2 Removed Modules and Pragmata
+=head1 Documentation
-=over 4
+=head2 New Documentation
+
+=head3 L<perl5121delta>
+
+The Perl 5.12.1 perldelta file was added from the Perl maintenance branch
+
+=head2 Changes to Existing Documentation
+
+=head3 General changes
+
+=over
=item *
-XXX
+Octal character escapes in documentation now prefer a three-digit octal
+escape or the new C<\o{}> escape as they have more consistent behavior
+in different contexts than other forms. (ce7b6f0) (d8b950d) (e1f120a)
-=back
+=item *
-=head1 Documentation
+Documentation now standardizes on the term 'capture group' over 'buffer'
+in regular expression documentation (c27a5cf)
-XXX Changes to files in F<pod/> go here. Consider grouping entries by
-file and be sure to link to the appropriate page, e.g. L<perlfunc>.
+=back
-[ Within each section, list entries as a =item entry ]
+=head3 L<perlfunc>
-=head2 New Documentation
+=over
-XXX Changes which create B<new> files in F<pod/> go here.
+=item *
-=over 4
+Added cautionary note about "no VERSION" (e0de7c2)
-=item L<XXX>
+=item *
-XXX
+Add additional notes regarding srand and forking (d460397)
=back
-=head2 Changes to Existing Documentation
-
-XXX Changes which significantly change existing files in F<pod/> go here.
-However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics>
-section.
+=head3 L<perlop>
=over 4
-=item L<XXX>
+=item *
-XXX
+Improved documentation of unusual character escapes (bf82ca4)
+
+=item *
+
+Clarifies how hexadecimal escapes are interpreted, with particular
+attention to the treatment of invalid characters. (9644846)
=back
-=head1 Diagnostics
+=head3 L<perlrun>
-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>.
+=over
-XXX New or changed warnings emitted by the core's C<C> code go here. Also
-include any changes in L<perldiag> that reconcile it to the C<C> code.
+=item *
-[ Within each section, list entries as a =item entry ]
+Clarifies the behavior of the C<-0NNN> switch for C<-0400> or higher (7ba31cb)
-=head2 New Diagnostics
+=back
-XXX Newly added diagnostic messages go here
+=head3 L<perlpolicy>
-=over 4
+=over
=item *
-XXX
+Added the policy on compatibility and deprecation along with definitions of
+terms like "deprecation" (70e4a83)
=back
-=head2 Changes to Existing Diagnostics
-
-XXX Changes (i.e. rewording) of diagnostic messages go here
+=head3 L<perlre>
-=over 4
+=over
=item *
-XXX
+Added examples on the perils of not using \g{} when there are more
+than nine back-references (9d86067)
=back
-=head1 Utility Changes
-
-XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go
-here. Most of these are built within the directories F<utils> and F<x2p>.
+=head3 L<perltie>
-[ List utility changes as a =item entry. Use L<XXX> with program names to get
-proper documentation linking. ]
-
-=over 4
+=over
-=item L<XXX>
+=item *
-XXX
+Some examples updated for modern Perl style (67d00dd)
=back
-=head1 Configuration and Compilation
-
-XXX Changes to F<Configure>, F<installperl>, F<installman>, and analogous tools
-go here. Any other changes to the Perl build process should be listed here.
-However, any platform-specific changes should be listed in the
-L</Platform Support> section, instead.
+=head1 Utility Changes
-[ List changes as a =item entry ].
+=head3 L<perldb>
-=over 4
+=over
=item *
-XXX
+The remote terminal works after forking and spawns new sessions - one
+for each forked process.
-=back
+=item *
-=head1 Testing
+Uses the less pager path from Config instead of searching for it (bf320d6)
-XXX Any significant changes to the testing of a freshly built perl should be
-listed here. Changes which create B<new> files in F<t/> go here as do any
-large changes to the testing harness (e.g. when parallel testing was added).
-Changes to existing files in F<t/> aren't worth summarising, although the bugs
-that they represent may be covered elsewhere.
+=back
-[ List each test improvement as a =item entry ]
+=head1 Configuration and Compilation
=over 4
=item *
-XXX
+Adjusts 'make test.valgrind' to account for cpan/dist/ext separation. (e07ce2e)
=back
-=head1 Platform Support
+=head1 Testing
-XXX Any changes to platform support should be listed in the sections below.
+=over 4
-[ Within the sections, list each platform as a =item entry with specific
-changes as paragraphs below it. ]
+=item *
-=head2 New Platforms
+F<t/harness> clears PERL5LIB, PERLLIB, PERL5OPT as t/TEST does (a2d3de1)
-XXX List any platforms that this version of perl compiles on, that previous
-versions did not. These will either be enabled by new files in the F<hints/>
-directories, or new subdirectories and F<README> files at the top level of the
-source tree.
+=item *
-=over 4
+Many common testing routines were refactored into t/lib/common.pl
-=item XXX-some-platform
+=item *
-XXX
+Several test files have been modernized to use Test::More
=back
-=head2 Discontinued Platforms
+=head1 Platform Support
-XXX List any platforms that this version of perl no longer compiles on.
+=head2 Discontinued Platforms
=over 4
Support for MacOS Classic within ExtUtils::MakeMaker was removed from Perl in
December 2004. Vestigial MacOS Classic specific code has now been removed
-from other core modules as well.
+from other core modules as well (8f8c2a4..c457df0).
=back
=head2 Platform-Specific Notes
-XXX List any changes for specific platforms. This could include configuration
-and compilation changes or changes in portability/compatibility. However,
-changes within modules for platforms should generally be listed in the
-L</Modules and Pragmata> section.
-
=over 4
-=item XXX-some-platform
+=item Win32
-XXX
+t/io/openpid.t now uses the alarm() watchdog strategy for more
+robustness. (5732108)
=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.
+=over 4
-[ List each test improvement as a =item entry ]
+=item *
-=over 4
+Under some circumstances, the C<CvGV()> field of a CV is now reference
+counted. To ensure consistent behaviour, direct assignment to it, for
+example C<CvGV(cv) = gv> is now a compile-time error. A new macro,
+C<CvGV_set(cv,gv)> has been introduced to perform this operation safely.
+Note that modification of this field is not part of of the public API,
+regardless of this new macro. This change caused some
+L<issues|/"Known Problems"> in modules that used the private C<GvGV()>
+field.
+
+=item *
+
+It is now possible for XS code to hook into Perl's lexical scope
+mechanism at compile time, using the new C<Perl_blockhook_register>
+function. See L<perlguts/"Compile-time scope hooks">.
=item *
-Added Perl_croak_no_modify() to implement Perl_croak("%s", PL_no_modify).
-(6ad8f25)
+Added C<Perl_croak_no_modify()> to implement
+C<Perl_croak("%s", PL_no_modify)>. (6ad8f25)
=item *
-Added prototypes for tie() and untie() to allow overloading (RT#75902)
+Added prototypes for C<tie()> and C<untie()> to allow overloading. (RT#75902)
(1db4d19)
+=item *
+
+Adds C<my_[l]stat_flags()> to replace C<my_[l]stat()>. C<my_stat()> and
+C<my_lstat()> call get magic on the stack arg, so create C<_flags()>
+variants that allow us to control this. (0d7d409)
+
=back
=head1 Selected Bug Fixes
-XXX Important bug fixes in the core language are summarised here.
-Bug fixes in files in F<ext/> and F<lib/> are best summarised in
-L</Modules and Pragmata>.
+=over 4
-[ List each fix as a =item entry ]
+=item *
-=over 4
+Some work has been done on the internal pointers that link between symbol
+tables (stashes), typeglobs and subroutines. This has the effect that
+various edge cases related to deleting stashes or stash entries (e.g.
+<%FOO:: = ()>), and complex typeglob or code reference aliasing, will no
+longer crash the interpreter.
+
+=item *
+
+Fixed readline() when interrupted by signals so it no longer returns
+the "same thing" as before or random memory.
=item *
Fixed a regression of kill() when a match variable is used for the
-process ID to kill. (RT #75812) (8af710e)
+process ID to kill. (RT#75812) (8af710e)
=item *
Fixed several subtle bugs in sort() when @_ is accessed within a subroutine
used for sorting. (RT#72334) (8f443ca)
+=item *
+
+Catch yyparse() exceptions in C<< (?{...}) >> (RT#2353) (634d691)
-=back
+=item *
-=head1 Known Problems
+Avoid UTF-8 cache panics with offsets beyond a string (RT #75898) (3e2d381)
+
+=item *
+
+Fixed POSIX::strftime memory leak (RT#73520) (c4bc4aa)
+
+=item *
+
+Doesn't set strict with C<no VERSION> if C<VERSION> is greater than 5.12.
+(da8fb5d)
-XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any
-tests that had to be C<TODO>ed for the release would be noted here, unless
-they were specific to a particular platform (see below).
+=item *
+
+Avoids multiple FETCH/stringify on filetest ops (40c852d)
-This is a list of some significant unfixed bugs, which are regressions
-from either 5.XXX.XXX or 5.XXX.XXX.
+=item *
-[ List each fix as a =item entry ]
+Fixed issue with string C<eval> not detecting taint of overloaded/tied
+arguments (RT #75716) (895b760)
+
+=item *
+
+Fix potential crashes of string C<eval> when evaluating a object with
+overloaded stringification by creating a stringified copy when necessary
+(3e5c018)
+
+=item *
+
+Fixed bug where overloaded stringification could remove tainting
+(RT #75716) (a02ec77)
+
+=item *
+
+Plugs more memory leaks in vms.c. (9e2bec0)
+
+=item *
+
+Fix pthread include error for Time::Piece (e9f284c)
+
+=back
+
+=head1 Known Problems
=over 4
=item *
-XXX
+Bug fixes involving CvGV reference counting break L<Sub::Name>. A
+patch has been sent upstream to the maintainer.
+
+=item *
+
+readline() returns an empty string instead of undef when it is
+interrupted by a signal.
=back
=back
-=head1 Obituary
-
-XXX If any significant core contributor has died, we've added a short obituary
-here.
-
=head1 Acknowledgements
XXX The list of people to thank goes here.