=encoding utf8 =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.6 =head1 DESCRIPTION This document describes differences between the 5.13.5 release and the 5.13.6 release. If you are upgrading from an earlier release such as 5.13.4, first read L, which describes differences between 5.13.4 and 5.13.5. =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 section. [ List each enhancement as a =head2 entry ] =head2 C<(?^...)> regex construct added to signify default modifiers A caret (also called a "cirumflex accent") C<"^"> immediately following a C<"(?"> in a regular expression now means that the subexpression is to not inherit the surrounding modifiers such as C, but to revert to the Perl defaults. Any modifiers following the caret override the defaults. The stringification of regular expressions now uses this notation. The main purpose of this is to allow tests that rely on the stringification to not have to change when new modifiers are added. See L. =head2 C<"d">, C<"l">, and C<"u"> regex modifiers added These modifiers are currently only available within a C<(?...)> construct. The C<"l"> modifier says to compile the regular expression as if it were in the scope of C, even if it is not. The C<"u"> modifier currently does nothing. The C<"d"> modifier is used in the scope of C to compile the regular expression as if it were not in that scope. See L. =head2 C<\N{...}> now handles Unicode named character sequences Unicode has a number of named character sequences, in which particular sequences of code points are given names. C<\N{...}> now recognizes these. See L. =head2 New function C This function is a run-time version of C<\N{...}>, returning the string of characters whose Unicode name is its parameter. It can handle Unicode named character sequences, whereas the pre-existing C cannot, as the latter returns a single code point. See L. =head1 Security XXX Any security-related notices go here. In particular, any security vulnerabilities closed should be noted here rather than in the L section. [ List each security issue as a =head2 entry ] =head1 Incompatible Changes =head2 Stringification of regexes has changed Default regular expression modifiers are now notated by using C<(?^...)>. Code relying on the old stringification will fail. The purpose of this is so that when new modifiers are added, such code will not have to change (after this one time), as the stringification will automatically incorporate the new modifiers. Code that needs to work properly with both old- and new-style regexes can avoid the whole issue by using (for Perls since 5.9.5): use re qw(regexp_pattern); my ($pat, $mods) = regexp_pattern($re_ref); where C<$re_ref> is a reference to a compiled regular expression. Upon return, C<$mods> will be a string containing all the non-default modifiers used when the regular expression was compiled, and C<$pattern> the actual pattern. If the actual stringification is important, or older Perls need to be supported, you can use something like the following: # Accept both old and new-style stringification my $modifiers = (qr/foobar/ =~ /\Q(?^/) ? '^' : '-xism'; And then use C<$modifiers> instead of C<-xism>. =head2 Regular expressions retain their localeness when interpolated Regular expressions compiled under C<"use locale"> now retain this when interpolated into a new regular expression compiled outside a C<"use locale">, and vice-versa. Previously, a regular expression interpolated into another one inherited the localeness of the surrounding one, losing whatever state it originally had. This is considered a bug fix, but may trip up code that has come to rely on the incorrect behavior. [ List each incompatible change as a =head2 entry ] =head2 Directory handles not copied to threads On systems that do not have a C function, newly-created threads no longer inherit directory handles from their parent threads. Such programs would probably have crashed anyway L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154>. =head2 Negation treats strings differently from before The unary negation operator C<-> now treats strings that look like numbers as numbers L<[perl #57706]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=57706>. =head2 Negative zero Negative zero (-0.0), when converted to a string, now becomes "0" on all platforms. It used to become "-0" on some, but "0" on others. If you still need to determine whether a zero is negative, use C or the L module on CPAN. =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 section. [ List each deprecation as a =head2 entry ] =head1 Performance Enhancements XXX Changes which enhance performance without changing behaviour go here. There may well be none in a stable release. [ List each enhancement as a =item entry ] =over 4 =item * XXX =back =head1 Modules and Pragmata XXX All changes to installed files in F, F, F and F go here. If Module::CoreList is updated, generate an initial draft of the following sections using F, 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 file that could be cribbed. [ Within each section, list entries as a =item entry ] =head2 New Modules and Pragmata =over 4 =item * XXX =back =head2 Updated Modules and Pragmata =over 4 =item * C has been upgraded from version 0.42 to 0.44 =item * C has been upgraded from version 1.18 to 1.19. It no longer autovivifies the C<*CORE::GLOBAL::caller> glob, something it started doing in 1.18, which was released with perl 5.13.4 L<[perl #78082]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=78082> =item * C has been upgraded from version 2.128 to 2.129. C no longer crashes with globs returned by C<*$io_ref> L<[perl #72332]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72332>. =item * C has been upgraded from version 2.40 to 2.51. It is now safe to use this module in combination with threads. =item * C has been upgraded from version 1.02 to 1.03. It allows patterns containing literal parentheses (they no longer need to be escaped). On Windows, it no longer adds an extra F<./> to the file names returned when the pattern is a relative glob with a drive specification, like F L<[perl #71712]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71712>. =item * C has been upgraded from version 1.17 to 1.18. It improves handling of backslashes on Windows, so that paths such as F are no longer generated L<[perl #71710]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71710>. =item * C has been upgraded from version 0.05 to 0.06 =item * C has been upgraded from version 1.06 to 1.07. The internal C routine now knows how to handle file descriptors, as documented, so duplicating STDIN in a child process using its file descriptor now works L<[perl #76474]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71710>. =item * C has been upgraded from version 1.15 to 1.16. It fixes an infinite loop in C when working with tainted values (L). C<< ->maketext >> calls will now backup and restore C<$@> so that error messages are not supressed (L). =item * C has been upgraded from version 1.95 to 1.97. This prevents C from crashing under C L<[perl #73534]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=73534>. =item * C has been upgraded from version 0.64 to 0.65. =item * C has been upgraded from version 1.10 to 1.11. C can now handle subroutines that are themselves blessed into overloaded classes L<[perl #71998]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71998>. =item * C has been upgraded from version 3.31_01 to 3.34. =item * C has been upgraded from version 1.04 to 1.05. It no longer tries to modify read-only arguments when generating a backtrace L<[perl #72340]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72340>. =item * C has been upgrade from version 1.77_03 to 1.81 =item * C has been upgraded from version 0.59 to 0.61 U::C::Locale newly supports locales: de__phonebook, nso, om, tn, vi, hr, ig, sq =item * C has been upgraded from version 1.06 to 1.07 =back =head2 Removed Modules and Pragmata =over 4 =item * XXX =back =head1 Documentation XXX Changes to files in F go here. Consider grouping entries by file and be sure to link to the appropriate page, e.g. L. =head2 New Documentation XXX Changes which create B files in F go here. =head3 L XXX Description of the purpose of the new file here =head2 Changes to Existing Documentation XXX Changes which significantly change existing files in F go here. However, any changes to F should go in the L section. =head3 L =over 4 =item * The documentation for the C macro was simply wrong in stating that get-magic is not processed. It has been corrected. =back =head1 Diagnostics 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. XXX New or changed warnings emitted by the core's C code go here. Also include any changes in L that reconcile it to the C code. [ Within each section, list entries as a =item entry ] =head2 New Diagnostics XXX Newly added diagnostic messages go here =over 4 =item * XXX =back =head2 Changes to Existing Diagnostics XXX Changes (i.e. rewording) of diagnostic messages go here =over 4 =item * The 'Layer does not match this perl' error message has been replaced with these more helpful messages: =over 4 =item * PerlIO layer function table size (%d) does not match size expected by this perl (%d) =item * PerlIO layer instance size (%d) does not match size expected by this perl (%d) =back L<[perl #73754]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=73754> =back =head1 Utility Changes XXX Changes to installed programs such as F and F go here. Most of these are built within the directories F and F. [ List utility changes as a =head3 entry for each utility and =item entries for each change Use L with program names to get proper documentation linking. ] =head3 L =over 4 =item * XXX =back =head1 Configuration and Compilation XXX Changes to F, F, F, 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 section, instead. [ List changes as a =item entry ]. =over 4 =item * XXX =back =head1 Testing XXX Any significant changes to the testing of a freshly built perl should be listed here. Changes which create B files in F go here as do any large changes to the testing harness (e.g. when parallel testing was added). Changes to existing files in F aren't worth summarising, although the bugs that they represent may be covered elsewhere. [ List each test improvement as a =item entry ] =over 4 =item * The script F has been added, which tests interaction of threads and directory handles. =back =head1 Platform Support XXX Any changes to platform support should be listed in the sections below. [ Within the sections, list each platform as a =item entry with specific changes as paragraphs below it. ] =head2 New Platforms 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 directories, or new subdirectories and F files at the top level of the source tree. =over 4 =item XXX-some-platform XXX =back =head2 Discontinued Platforms XXX List any platforms that this version of perl no longer compiles on. =over 4 =item XXX-some-platform XXX =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 section. =over 4 =item IRIX Conversion of strings to floating-point numbers is now more accurate on IRIX systems L<[perl #32380]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=32380>. =item Mac OS X Early versions of Mac OS X (Darwin) had buggy implementations of the C, C, C and C functions, so perl would pretend they did not exist. These functions are now recognised on Mac OS 10.5 (Leopard; Darwin 9) and higher, as they have been fixed L<[perl #72990]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72990>. =item OpenVOS perl now builds again with OpenVOS (formerly known as Stratus VOS) L<[perl #78132]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=78132>. =item Windows C<$Config{gccversion}> is now set correctly when perl is built using the mingw64 compiler from L L<[perl #73754]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=73754>. The build process proceeds more smoothly with mingw and dmake when F is in the PATH, due to a C fix. =back =head1 Internal Changes XXX Changes which affect the interface available to C code go here. Other significant internal changes for future core maintainers should be noted as well. [ List each test improvement as a =item entry ] =over 4 =item * See L, above. =item * The C, C, C and C functions have been added. These are like their non-_flags counterparts, but allow one to specify whether get-magic is processed. The C, C, C and C functions have been replaced with wrappers around the new functions. =item * A new C function has been added. This is like C, but it lets the calling code decide whether get-magic is handled. C is now a macro that calls the new function. =item * A new macro, C, has been added. This is like C, except that it does not process magic. It uses the new C function. =item * C no longer calls C on its second argument (the source string) if the flags passed to it do not include SV_GMAGIC. So it now matches what the documentation says it does. =back =head1 Selected Bug Fixes XXX Important bug fixes in the core language are summarised here. Bug fixes in files in F and F are best summarised in L. [ List each fix as a =item entry ] =over 4 =item * A regular expression match in the right-hand side of a global substitution (C) that is in the same scope will no longer cause match variables to have the wrong values on subsequent iterations. This can happen when an array or hash subscript is interpolated in the right-hand side, as in C L<[perl #19078]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=19078>. =item * Constant-folding used to cause $text =~ ( 1 ? /phoo/ : /bear/) to turn into $text =~ /phoo/ at compile time. Now it correctly matches against C<$_> L<[perl #20444]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=20444>. =item * Parsing Perl code (either with string C or by loading modules) from within a C block no longer causes the interpreter to crash L<[perl #70614]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=70614>. =item * When C<-d> is used on the shebang (C<#!>) line, the debugger now has access to the lines of the main program. In the past, this sometimes worked and sometimes did not, depending on what order things happened to be arranged in memory L<[perl #71806]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=71806>. =item * The C or C operator now calls get-magic (e.g., the C method of a tie) on its left-hand side just once, not twice L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>. =item * String comparison (C, C, C, C, C, C and C) and logical not (C and C) operators no longer call magic (e.g., tie methods) twice on their operands L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>. This bug was introduced in an earlier 5.13 release, and does not affect perl 5.12. =item * When a tied (or other magic) variable is used as, or in, a regular expression, it no longer has its C method called twice L<[perl #76814]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=76814>. This bug was introduced in an earlier 5.13 release, and does not affect perl 5.12. =item * The C<-C> command line option can now be followed by other options L<[perl #72434]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=72434>. =item * Assigning a glob to a PVLV used to convert it to a plain string. Now it works correctly, and a PVLV can hold a glob. This would happen when a nonexistent hash or array element was passed to a subroutine: sub { $_[0] = *foo }->($hash{key}); # $_[0] would have been the string "*main::foo" It also happened when a glob was assigned to, or returned from, an element of a tied array or hash L<[perl #36051]|http://rt.perl.org/rt3//Public/Bug/Display.html?id=36051>. =item * Creating a new thread when directory handles were open used to cause a crash, because the handles were not cloned, but simply passed to the new thread, resulting in a double free. Now directory handles are properly, on systems that have a C function. On other systems, new threads simply do not inherit directory handles from their parent threads L<[perl #75154]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=75154>. =item * The regular expression parser no longer hangs when parsing C<\18> and C<\88>. This bug was introduced in version 5.13.5 and did not affect earlier versions L<[perl #78058]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=78058>. =item * Subroutine redefinition works once more in the debugger L<[perl #48332]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=48332>. =item * The C<&> C<|> C<^> bitwise operators no longer coerce read-only arguments L<[perl #20661]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=20661>. =item * Stringifying a scalar containing -0.0 no longer has the affect of turning false into true L<[perl #45133]|http://rt.perl.org/rt3/Public/Bug/Display.html?id=45133>. =back =head1 Known Problems XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any tests that had to be Ced for the release would be noted here, unless they were specific to a particular platform (see below). This is a list of some significant unfixed bugs, which are regressions from either 5.XXX.XXX or 5.XXX.XXX. [ List each fix as a =item entry ] =over 4 =item * XXX =back =head1 Obituary XXX If any significant core contributor has died, we've added a short obituary here. =head1 Errata =over 4 =item * Fixed a typo in L regarding array slices and smart matching =back =head1 Acknowledgements XXX The list of people to thank goes here. =head1 Reporting Bugs If you find what you think is a bug, you might check the articles recently posted to the comp.lang.perl.misc newsgroup and the perl bug database at http://rt.perl.org/perlbug/ . There may also be information at http://www.perl.org/ , the Perl Home Page. If you believe you have an unreported bug, please run the B program included with your release. Be sure to trim your bug down to a tiny but sufficient test case. Your bug report, along with the output of C, will be sent off to perlbug@perl.org to be analysed by the Perl porting team. If the bug you are reporting has security implications, which make it inappropriate to send to a publicly archived mailing list, then please send it to perl5-security-report@perl.org. This points to a closed subscription unarchived mailing list, which includes all the core committers, who be able to help assess the impact of issues, figure out a resolution, and help co-ordinate the release of patches to mitigate or fix the problem across all platforms on which Perl is supported. Please only use this address for security issues in the Perl core, not for modules independently distributed on CPAN. =head1 SEE ALSO The F file for an explanation of how to view exhaustive details on what changed. The F file for how to build Perl. The F file for general stuff. The F and F files for copyright information. =cut