=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.19.9 =head1 DESCRIPTION This document describes differences between the 5.19.8 release and the 5.19.9 release. If you are upgrading from an earlier release such as 5.19.7, first read L, which describes differences between 5.19.7 and 5.19.8. =head1 Notice XXX Any important notices here =head1 Core Enhancements XXX New core language features go here. Summarize user-visible core language enhancements. Particularly prominent performance optimisations could go here, but most should go in the L section. =head2 UTF-8 locales now supported better under C> A UTF-8 locale is one in which the character set is Unicode and the encoding is UTF-8. Now, the POSIX C category operations under such a locale (within the scope of C>), which include case changing (like C, C<"\U">), and character classification (C<\w>, C<\D>, C work just as if not under locale, except taint rules are followed. Prior to this, Perl only handled single-byte locales. This resolves [perl #56820]. =head2 C> now compiles on systems without locale ability Previously doing this caused the program to not compile. Within its scope the program behaves as if in the "C" locale. Thus programs written for platforms that support locales can run on locale-less platforms without change. Attempts to change the locale away from the "C" locale will, of course, fail. =head2 PERL_DEBUG_READONLY_COW On some operating systems Perl can be compiled in such a way that any attempt to modify string buffers shared by multiple SVs will crash. This way XS authors can test that their modules handle copy-on-write scalars correctly. See L for detail. This feature was actually added in 5.19.8, but was unintentionally omitted from its delta document. =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 Tainting happens under more circumstances; now conforms to documentation When changing the case of a string (C, C<"\U">, I.), within the scope of C, the result is now tainted no matter what the contents of the string were, as the documentation (L, L) indicates it should. Previously, if the string contained no characters whose case change could be affected by the locale, the result would not be tainted. For example, the result of C on an empty string or one containing only above-Latin1 code points is now tainted. This leads to more consistent tainting results. =head1 Deprecations XXX Any deprecated features, syntax, modules etc. should be listed here. =head2 Module removals XXX Remove this section if inapplicable. The following modules will be removed from the core distribution in a future release, and will at that time need to be installed from CPAN. Distributions on CPAN which require these modules will need to list them as prerequisites. The core versions of these modules will now issue C<"deprecated">-category warnings to alert you to this fact. To silence these deprecation warnings, install the modules in question from CPAN. Note that these are (with rare exceptions) fine modules that you are encouraged to continue to use. Their disinclusion from core primarily hinges on their necessity to bootstrapping a fully functional, CPAN-capable Perl installation, not usually on concerns over their design. =over =item XXX XXX Note that deprecated modules should be listed here even if they are listed as an updated module in the L section. =back [ List each other 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 * Code like: my $x; # or @x, %x my $y; is now optimized to: my ($x, $y); In combination with the padrange optimization, this means longer uninitialized my variable statements are also optimized, so: my $x; my @y; my %z; becomes: my ($x, @y, %z); [perl #121077] =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. 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 * L has been upgraded from version 1.24 to 1.25. It now knows how to handle whitespace it prototypes. Previously, it could loop infinitely. [perl #121050] =item * L has been upgraded from version 1.15 to 1.16. Devel::Peek::SvREFCNT() now ensures it has been passed a reference, as specified by its prototype. =item * L has been upgraded from version 1.37 to 1.38. A backwards-compatibility issue with older perls has been fixed. [cpan #92363] =item * L has been upgraded from version 1.21 to 1.22. C<< use warnings "FATAL"; >> now implies C<< "all" >>, and similarly for C<< use warnings "NONFATAL" >>. [perl #120977] =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 * New sections on L and L have been added. They were actually added in 5.19.8 but accidentally omitted from its delta document. =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. =head2 New Diagnostics XXX Newly added diagnostic messages go under here, separated into New Errors and New Warnings =head3 New Errors =over 4 =item * XXX L =back =head3 New Warnings =over 4 =item * XXX L =back =head2 Changes to Existing Diagnostics XXX Changes (i.e. rewording) of diagnostic messages go here =over 4 =item * XXX Describe change here =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 * The cross-compilation model has been renovated. There's several new options, and some backwards-incompatible changes: We now build binaries for miniperl and generate_uudmap to be used on the host, rather than running every miniperl call on the target; this means that, short of 'make test', we no longer need access to the target system once Configure is done. You can provide already-built binaries through the C and C options to Configure. Additionally, if targeting an EBCDIC platform from an ASCII host, or viceversa, you'll need to run Configure with C<-Uhostgenerate>, to indicate that generate_uudmap should be run on the target. Finally, there's also a way of having Configure end early, right after building the host binaries, by cross-compiling without specifying a C. The incompatible changes include no longer using xconfig.h, xlib, or Cross.pm, so canned config files and Makefiles will have to be updated. =item * Related to the above, there is now a way of specifying the location of sh (or equivalent) on the target system: C. For example, Android has its sh in /system/bin/sh, so if cross-compiling from a more normal Unixy system with sh in /bin/sh, "targetsh" would end up as /system/bin/sh, and "sh" as /bin/sh. =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 summarizing, although the bugs that they represent may be covered elsewhere. [ List each test improvement as a =item entry ] =over 4 =item * XXX =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 Android Perl can now be built for Android, either natively or through cross-compilation, for all three currently available architectures (ARM, MIPS, and x86), on a wide range of versions. =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 XXX-some-platform XXX =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 change as a =item entry ] =over 4 =item Regexp Engine Changes That Affect The Pluggable Regex Engine Interface Many flags that used to be exposed via regexp.h and used to populate the extflags member of struct regexp have been removed. These fields were technically private to Perl's own regexp engine and should not have been exposed there in the first place. The affected flags are: RXf_NOSCAN RXf_CANY_SEEN RXf_GPOS_SEEN RXf_GPOS_FLOAT RXf_ANCH_BOL RXf_ANCH_MBOL RXf_ANCH_SBOL RXf_ANCH_GPOS As well as the follow flag masks: RXf_ANCH_SINGLE RXf_ANCH All have been renamed to PREGf_ equivalents and moved to regcomp.h. The behavior previously achieved by setting one or more of the RXf_ANCH_ flags (via the RXf_ANCH mask) have now been replaced by a *single* flag bit in extflags: RXf_IS_ANCHORED pluggable regex engines which previously used to set these flags should now set this flag ALONE. =back =head1 Selected Bug Fixes XXX Important bug fixes in the core language are summarized here. Bug fixes in files in F and F are best summarized in L. [ List each fix as a =item entry ] =over 4 =item * Backticks (C< `` > or C< qx// >) combined with multiple threads on Win32 could result in output sent to stdout on one thread being captured by backticks of an external command in another thread. This could occur for pseudo-forked processes too, as Win32's psuedo-fork is implemented in terms of threads. [perl #77672] =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. Unfixed platform specific bugs also go here. [ List each fix as a =item entry ] =over 4 =item * XXX =back =head1 Errata From Previous Releases =over 4 =item perl5180delta.pod This pod file contains a statement saying that C (and its alias C) and C were no longer used and #defined to 0. This was the case for a short period, but the change was reverted before Perl 5.18 was released. As such it was not true in Perl 5.18.x, and is also not true now. Both flags continue to be used. The incorrect entry has been removed from C in this release. =back =head1 Obituary XXX If any significant core contributor has died, we've added a short obituary here. =head1 Acknowledgements XXX Generate this with: perl Porting/acknowledgements.pl v5.19.9..HEAD =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 https://rt.perl.org/ . 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 L 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 will 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