diff options
Diffstat (limited to 'upstream/mageia-cauldron/man1/perl5120delta.1')
-rw-r--r-- | upstream/mageia-cauldron/man1/perl5120delta.1 | 2580 |
1 files changed, 2580 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man1/perl5120delta.1 b/upstream/mageia-cauldron/man1/perl5120delta.1 new file mode 100644 index 00000000..5eb75037 --- /dev/null +++ b/upstream/mageia-cauldron/man1/perl5120delta.1 @@ -0,0 +1,2580 @@ +.\" -*- mode: troff; coding: utf-8 -*- +.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. +.ie n \{\ +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is >0, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{\ +. if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{\ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" ======================================================================== +.\" +.IX Title "PERL5120DELTA 1" +.TH PERL5120DELTA 1 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH NAME +perl5120delta \- what is new for perl v5.12.0 +.SH DESCRIPTION +.IX Header "DESCRIPTION" +This document describes differences between the 5.10.0 release and the +5.12.0 release. +.PP +Many of the bug fixes in 5.12.0 are already included in the 5.10.1 +maintenance release. +.PP +You can see the list of those changes in the 5.10.1 release notes +(perl5101delta). +.SH "Core Enhancements" +.IX Header "Core Enhancements" +.ie n .SS "New ""package NAME VERSION"" syntax" +.el .SS "New \f(CWpackage NAME VERSION\fP syntax" +.IX Subsection "New package NAME VERSION syntax" +This new syntax allows a module author to set the \f(CW$VERSION\fR of a namespace +when the namespace is declared with 'package'. It eliminates the need +for \f(CW\*(C`our $VERSION = ...\*(C'\fR and similar constructs. E.g. +.PP +.Vb 2 +\& package Foo::Bar 1.23; +\& # $Foo::Bar::VERSION == 1.23 +.Ve +.PP +There are several advantages to this: +.IP \(bu 4 +\&\f(CW$VERSION\fR is parsed in exactly the same way as \f(CW\*(C`use NAME VERSION\*(C'\fR +.IP \(bu 4 +\&\f(CW$VERSION\fR is set at compile time +.IP \(bu 4 +\&\f(CW$VERSION\fR is a version object that provides proper overloading of +comparison operators so comparing \f(CW$VERSION\fR to decimal (1.23) or +dotted-decimal (v1.2.3) version numbers works correctly. +.IP \(bu 4 +Eliminates \f(CW\*(C`$VERSION = ...\*(C'\fR and \f(CW\*(C`eval $VERSION\*(C'\fR clutter +.IP \(bu 4 +As it requires VERSION to be a numeric literal or v\-string +literal, it can be statically parsed by toolchain modules +without \f(CW\*(C`eval\*(C'\fR the way MM\->parse_version does for \f(CW\*(C`$VERSION = ...\*(C'\fR +.PP +It does not break old code with only \f(CW\*(C`package NAME\*(C'\fR, but code that uses +\&\f(CW\*(C`package NAME VERSION\*(C'\fR will need to be restricted to perl 5.12.0 or newer +This is analogous to the change to \f(CW\*(C`open\*(C'\fR from two-args to three-args. +Users requiring the latest Perl will benefit, and perhaps after several +years, it will become a standard practice. +.PP +However, \f(CW\*(C`package NAME VERSION\*(C'\fR requires a new, 'strict' version +number format. See "Version number formats" for details. +.ie n .SS "The ""..."" operator" +.el .SS "The \f(CW...\fP operator" +.IX Subsection "The ... operator" +A new operator, \f(CW\*(C`...\*(C'\fR, nicknamed the Yada Yada operator, has been added. +It is intended to mark placeholder code that is not yet implemented. +See "Yada Yada Operator" in perlop. +.SS "Implicit strictures" +.IX Subsection "Implicit strictures" +Using the \f(CW\*(C`use VERSION\*(C'\fR syntax with a version number greater or equal +to 5.11.0 will lexically enable strictures just like \f(CW\*(C`use strict\*(C'\fR +would do (in addition to enabling features.) The following: +.PP +.Vb 1 +\& use 5.12.0; +.Ve +.PP +means: +.PP +.Vb 2 +\& use strict; +\& use feature \*(Aq:5.12\*(Aq; +.Ve +.SS "Unicode improvements" +.IX Subsection "Unicode improvements" +Perl 5.12 comes with Unicode 5.2, the latest version available to +us at the time of release. This version of Unicode was released in +October 2009. See <http://www.unicode.org/versions/Unicode5.2.0> for +further details about what's changed in this version of the standard. +See perlunicode for instructions on installing and using other versions +of Unicode. +.PP +Additionally, Perl's developers have significantly improved Perl's Unicode +implementation. For full details, see "Unicode overhaul" below. +.SS "Y2038 compliance" +.IX Subsection "Y2038 compliance" +Perl's core time-related functions are now Y2038 compliant. (It may not mean much to you, but your kids will love it!) +.SS "qr overloading" +.IX Subsection "qr overloading" +It is now possible to overload the \f(CW\*(C`qr//\*(C'\fR operator, that is, +conversion to regexp, like it was already possible to overload +conversion to boolean, string or number of objects. It is invoked when +an object appears on the right hand side of the \f(CW\*(C`=~\*(C'\fR operator or when +it is interpolated into a regexp. See overload. +.SS "Pluggable keywords" +.IX Subsection "Pluggable keywords" +Extension modules can now cleanly hook into the Perl parser to define +new kinds of keyword-headed expression and compound statement. The +syntax following the keyword is defined entirely by the extension. This +allows a completely non-Perl sublanguage to be parsed inline, with the +correct ops cleanly generated. +.PP +See "PL_keyword_plugin" in perlapi for the mechanism. The Perl core +source distribution also includes a new module +XS::APItest::KeywordRPN, which implements reverse Polish notation +arithmetic via pluggable keywords. This module is mainly used for test +purposes, and is not normally installed, but also serves as an example +of how to use the new mechanism. +.PP +Perl's developers consider this feature to be experimental. We may remove +it or change it in a backwards-incompatible way in Perl 5.14. +.SS "APIs for more internals" +.IX Subsection "APIs for more internals" +The lowest layers of the lexer and parts of the pad system now have C +APIs available to XS extensions. These are necessary to support proper +use of pluggable keywords, but have other uses too. The new APIs are +experimental, and only cover a small proportion of what would be +necessary to take full advantage of the core's facilities in these +areas. It is intended that the Perl 5.13 development cycle will see the +addition of a full range of clean, supported interfaces. +.PP +Perl's developers consider this feature to be experimental. We may remove +it or change it in a backwards-incompatible way in Perl 5.14. +.SS "Overridable function lookup" +.IX Subsection "Overridable function lookup" +Where an extension module hooks the creation of rv2cv ops to modify the +subroutine lookup process, this now works correctly for bareword +subroutine calls. This means that prototypes on subroutines referenced +this way will be processed correctly. (Previously bareword subroutine +names were initially looked up, for parsing purposes, by an unhookable +mechanism, so extensions could only properly influence subroutine names +that appeared with an \f(CW\*(C`&\*(C'\fR sigil.) +.SS "A proper interface for pluggable Method Resolution Orders" +.IX Subsection "A proper interface for pluggable Method Resolution Orders" +As of Perl 5.12.0 there is a new interface for plugging and using method +resolution orders other than the default linear depth first search. +The C3 method resolution order added in 5.10.0 has been re-implemented as +a plugin, without changing its Perl-space interface. See perlmroapi for +more information. +.ie n .SS """\eN"" experimental regex escape" +.el .SS "\f(CW\eN\fP experimental regex escape" +.IX Subsection "N experimental regex escape" +Perl now supports \f(CW\*(C`\eN\*(C'\fR, a new regex escape which you can think of as +the inverse of \f(CW\*(C`\en\*(C'\fR. It will match any character that is not a newline, +independently from the presence or absence of the single line match +modifier \f(CW\*(C`/s\*(C'\fR. It is not usable within a character class. \f(CW\*(C`\eN{3}\*(C'\fR +means to match 3 non-newlines; \f(CW\*(C`\eN{5,}\*(C'\fR means to match at least 5. +\&\f(CW\*(C`\eN{NAME}\*(C'\fR still means the character or sequence named \f(CW\*(C`NAME\*(C'\fR, but +\&\f(CW\*(C`NAME\*(C'\fR no longer can be things like \f(CW3\fR, or \f(CW\*(C`5,\*(C'\fR. +.PP +This will break a custom charnames translator which allows numbers for character names, as \f(CW\*(C`\eN{3}\*(C'\fR will +now mean to match 3 non-newline characters, and not the character whose +name is \f(CW3\fR. (No name defined by the Unicode standard is a number, +so only custom translators might be affected.) +.PP +Perl's developers are somewhat concerned about possible user confusion +with the existing \f(CW\*(C`\eN{...}\*(C'\fR construct which matches characters by their +Unicode name. Consequently, this feature is experimental. We may remove +it or change it in a backwards-incompatible way in Perl 5.14. +.SS "DTrace support" +.IX Subsection "DTrace support" +Perl now has some support for DTrace. See "DTrace support" in \fIINSTALL\fR. +.ie n .SS "Support for ""configure_requires"" in CPAN module metadata" +.el .SS "Support for \f(CWconfigure_requires\fP in CPAN module metadata" +.IX Subsection "Support for configure_requires in CPAN module metadata" +Both \f(CW\*(C`CPAN\*(C'\fR and \f(CW\*(C`CPANPLUS\*(C'\fR now support the \f(CW\*(C`configure_requires\*(C'\fR +keyword in the \fIMETA.yml\fR metadata file included in most recent CPAN +distributions. This allows distribution authors to specify configuration +prerequisites that must be installed before running \fIMakefile.PL\fR +or \fIBuild.PL\fR. +.PP +See the documentation for \f(CW\*(C`ExtUtils::MakeMaker\*(C'\fR or \f(CW\*(C`Module::Build\*(C'\fR for +more on how to specify \f(CW\*(C`configure_requires\*(C'\fR when creating a distribution +for CPAN. +.ie n .SS """each"", ""keys"", ""values"" are now more flexible" +.el .SS "\f(CWeach\fP, \f(CWkeys\fP, \f(CWvalues\fP are now more flexible" +.IX Subsection "each, keys, values are now more flexible" +The \f(CW\*(C`each\*(C'\fR, \f(CW\*(C`keys\*(C'\fR, \f(CW\*(C`values\*(C'\fR function can now operate on arrays. +.ie n .SS """when"" as a statement modifier" +.el .SS "\f(CWwhen\fP as a statement modifier" +.IX Subsection "when as a statement modifier" +\&\f(CW\*(C`when\*(C'\fR is now allowed to be used as a statement modifier. +.ie n .SS "$, flexibility" +.el .SS "\f(CW$,\fP flexibility" +.IX Subsection "$, flexibility" +The variable \f(CW$,\fR may now be tied. +.SS "// in when clauses" +.IX Subsection "// in when clauses" +// now behaves like || in when clauses +.SS "Enabling warnings from your shell environment" +.IX Subsection "Enabling warnings from your shell environment" +You can now set \f(CW\*(C`\-W\*(C'\fR from the \f(CW\*(C`PERL5OPT\*(C'\fR environment variable +.ie n .SS """delete local""" +.el .SS "\f(CWdelete local\fP" +.IX Subsection "delete local" +\&\f(CW\*(C`delete local\*(C'\fR now allows you to locally delete a hash entry. +.SS "New support for Abstract namespace sockets" +.IX Subsection "New support for Abstract namespace sockets" +Abstract namespace sockets are Linux-specific socket type that live in +AF_UNIX family, slightly abusing it to be able to use arbitrary +character arrays as addresses: They start with nul byte and are not +terminated by nul byte, but with the length passed to the \fBsocket()\fR +system call. +.SS "32\-bit limit on substr arguments removed" +.IX Subsection "32-bit limit on substr arguments removed" +The 32\-bit limit on \f(CW\*(C`substr\*(C'\fR arguments has now been removed. The full +range of the system's signed and unsigned integers is now available for +the \f(CW\*(C`pos\*(C'\fR and \f(CW\*(C`len\*(C'\fR arguments. +.SH "Potentially Incompatible Changes" +.IX Header "Potentially Incompatible Changes" +.SS "Deprecations warn by default" +.IX Subsection "Deprecations warn by default" +Over the years, Perl's developers have deprecated a number of language +features for a variety of reasons. Perl now defaults to issuing a +warning if a deprecated language feature is used. Many of the deprecations +Perl now warns you about have been deprecated for many years. You can +find a list of what was deprecated in a given release of Perl in the +\&\f(CW\*(C`perl5xxdelta.pod\*(C'\fR file for that release. +.PP +To disable this feature in a given lexical scope, you should use \f(CW\*(C`no +warnings \*(Aqdeprecated\*(Aq;\*(C'\fR For information about which language features +are deprecated and explanations of various deprecation warnings, please +see perldiag. See "Deprecations" below for the list of features +and modules Perl's developers have deprecated as part of this release. +.SS "Version number formats" +.IX Subsection "Version number formats" +Acceptable version number formats have been formalized into "strict" and +"lax" rules. \f(CW\*(C`package NAME VERSION\*(C'\fR takes a strict version number. +\&\f(CW\*(C`UNIVERSAL::VERSION\*(C'\fR and the version object constructors take lax +version numbers. Providing an invalid version will result in a fatal +error. The version argument in \f(CW\*(C`use NAME VERSION\*(C'\fR is first parsed as a +numeric literal or v\-string and then passed to \f(CW\*(C`UNIVERSAL::VERSION\*(C'\fR +(and must then pass the "lax" format test). +.PP +These formats are documented fully in the version module. To a first +approximation, a "strict" version number is a positive decimal number +(integer or decimal-fraction) without exponentiation or else a +dotted-decimal v\-string with a leading 'v' character and at least three +components. A "lax" version number allows v\-strings with fewer than +three components or without a leading 'v'. Under "lax" rules, both +decimal and dotted-decimal versions may have a trailing "alpha" +component separated by an underscore character after a fractional or +dotted-decimal component. +.PP +The version module adds \f(CW\*(C`version::is_strict\*(C'\fR and \f(CW\*(C`version::is_lax\*(C'\fR +functions to check a scalar against these rules. +.ie n .SS "@INC reorganization" +.el .SS "\f(CW@INC\fP reorganization" +.IX Subsection "@INC reorganization" +In \f(CW@INC\fR, \f(CW\*(C`ARCHLIB\*(C'\fR and \f(CW\*(C`PRIVLIB\*(C'\fR now occur after the current +version's \f(CW\*(C`site_perl\*(C'\fR and \f(CW\*(C`vendor_perl\*(C'\fR. Modules installed into +\&\f(CW\*(C`site_perl\*(C'\fR and \f(CW\*(C`vendor_perl\*(C'\fR will now be loaded in preference to +those installed in \f(CW\*(C`ARCHLIB\*(C'\fR and \f(CW\*(C`PRIVLIB\*(C'\fR. +.SS "REGEXPs are now first class" +.IX Subsection "REGEXPs are now first class" +Internally, Perl now treats compiled regular expressions (such as +those created with \f(CW\*(C`qr//\*(C'\fR) as first class entities. Perl modules which +serialize, deserialize or otherwise have deep interaction with Perl's +internal data structures need to be updated for this change. Most +affected CPAN modules have already been updated as of this writing. +.SS "Switch statement changes" +.IX Subsection "Switch statement changes" +The \f(CW\*(C`given\*(C'\fR/\f(CW\*(C`when\*(C'\fR switch statement handles complex statements better +than Perl 5.10.0 did (These enhancements are also available in +5.10.1 and subsequent 5.10 releases.) There are two new cases where +\&\f(CW\*(C`when\*(C'\fR now interprets its argument as a boolean, instead of an +expression to be used in a smart match: +.IP "flip-flop operators" 4 +.IX Item "flip-flop operators" +The \f(CW\*(C`..\*(C'\fR and \f(CW\*(C`...\*(C'\fR flip-flop operators are now evaluated in boolean +context, following their usual semantics; see "Range Operators" in perlop. +.Sp +Note that, as in perl 5.10.0, \f(CW\*(C`when (1..10)\*(C'\fR will not work to test +whether a given value is an integer between 1 and 10; you should use +\&\f(CW\*(C`when ([1..10])\*(C'\fR instead (note the array reference). +.Sp +However, contrary to 5.10.0, evaluating the flip-flop operators in +boolean context ensures it can now be useful in a \f(CWwhen()\fR, notably +for implementing bistable conditions, like in: +.Sp +.Vb 3 +\& when (/^=begin/ .. /^=end/) { +\& # do something +\& } +.Ve +.IP "defined-or operator" 4 +.IX Item "defined-or operator" +A compound expression involving the defined-or operator, as in +\&\f(CW\*(C`when (expr1 // expr2)\*(C'\fR, will be treated as boolean if the first +expression is boolean. (This just extends the existing rule that applies +to the regular or operator, as in \f(CW\*(C`when (expr1 || expr2)\*(C'\fR.) +.SS "Smart match changes" +.IX Subsection "Smart match changes" +Since Perl 5.10.0, Perl's developers have made a number of changes to +the smart match operator. These, of course, also alter the behaviour +of the switch statements where smart matching is implicitly used. +These changes were also made for the 5.10.1 release, and will remain in +subsequent 5.10 releases. +.PP +\fIChanges to type-based dispatch\fR +.IX Subsection "Changes to type-based dispatch" +.PP +The smart match operator \f(CW\*(C`~~\*(C'\fR is no longer commutative. The behaviour of +a smart match now depends primarily on the type of its right hand +argument. Moreover, its semantics have been adjusted for greater +consistency or usefulness in several cases. While the general backwards +compatibility is maintained, several changes must be noted: +.IP \(bu 4 +Code references with an empty prototype are no longer treated specially. +They are passed an argument like the other code references (even if they +choose to ignore it). +.IP \(bu 4 +\&\f(CW\*(C`%hash ~~ sub {}\*(C'\fR and \f(CW\*(C`@array ~~ sub {}\*(C'\fR now test that the subroutine +returns a true value for each key of the hash (or element of the +array), instead of passing the whole hash or array as a reference to +the subroutine. +.IP \(bu 4 +Due to the commutativity breakage, code references are no longer +treated specially when appearing on the left of the \f(CW\*(C`~~\*(C'\fR operator, +but like any vulgar scalar. +.IP \(bu 4 +\&\f(CW\*(C`undef ~~ %hash\*(C'\fR is always false (since \f(CW\*(C`undef\*(C'\fR can't be a key in a +hash). No implicit conversion to \f(CW""\fR is done (as was the case in perl +5.10.0). +.IP \(bu 4 +\&\f(CW\*(C`$scalar ~~ @array\*(C'\fR now always distributes the smart match across the +elements of the array. It's true if one element in \f(CW@array\fR verifies +\&\f(CW\*(C`$scalar ~~ $element\*(C'\fR. This is a generalization of the old behaviour +that tested whether the array contained the scalar. +.PP +The full dispatch table for the smart match operator is given in +"Smart matching in detail" in perlsyn. +.PP +\fISmart match and overloading\fR +.IX Subsection "Smart match and overloading" +.PP +According to the rule of dispatch based on the rightmost argument type, +when an object overloading \f(CW\*(C`~~\*(C'\fR appears on the right side of the +operator, the overload routine will always be called (with a 3rd argument +set to a true value, see overload.) However, when the object will +appear on the left, the overload routine will be called only when the +rightmost argument is a simple scalar. This way, distributivity of smart +match across arrays is not broken, as well as the other behaviours with +complex types (coderefs, hashes, regexes). Thus, writers of overloading +routines for smart match mostly need to worry only with comparing +against a scalar, and possibly with stringification overloading; the +other common cases will be automatically handled consistently. +.PP +\&\f(CW\*(C`~~\*(C'\fR will now refuse to work on objects that do not overload it (in order +to avoid relying on the object's underlying structure). (However, if the +object overloads the stringification or the numification operators, and +if overload fallback is active, it will be used instead, as usual.) +.SS "Other potentially incompatible changes" +.IX Subsection "Other potentially incompatible changes" +.IP \(bu 4 +The definitions of a number of Unicode properties have changed to match +those of the current Unicode standard. These are listed above under +"Unicode overhaul". This change may break code that expects the old +definitions. +.IP \(bu 4 +The boolkeys op has moved to the group of hash ops. This breaks binary +compatibility. +.IP \(bu 4 +Filehandles are now always blessed into \f(CW\*(C`IO::File\*(C'\fR. +.Sp +The previous behaviour was to bless Filehandles into FileHandle +(an empty proxy class) if it was loaded into memory and otherwise +to bless them into \f(CW\*(C`IO::Handle\*(C'\fR. +.IP \(bu 4 +The semantics of \f(CW\*(C`use feature :5.10*\*(C'\fR have changed slightly. +See "Modules and Pragmata" for more information. +.IP \(bu 4 +Perl's developers now use git, rather than Perforce. This should be +a purely internal change only relevant to people actively working on +the core. However, you may see minor difference in perl as a consequence +of the change. For example in some of details of the output of \f(CW\*(C`perl +\&\-V\*(C'\fR. See perlrepository for more information. +.IP \(bu 4 +As part of the \f(CW\*(C`Test::Harness\*(C'\fR 2.x to 3.x upgrade, the experimental +\&\f(CW\*(C`Test::Harness::Straps\*(C'\fR module has been removed. +See "Modules and Pragmata" for more details. +.IP \(bu 4 +As part of the \f(CW\*(C`ExtUtils::MakeMaker\*(C'\fR upgrade, the +\&\f(CW\*(C`ExtUtils::MakeMaker::bytes\*(C'\fR and \f(CW\*(C`ExtUtils::MakeMaker::vmsish\*(C'\fR modules +have been removed from this distribution. +.IP \(bu 4 +\&\f(CW\*(C`Module::CoreList\*(C'\fR no longer contains the \f(CW%:patchlevel\fR hash. +.IP \(bu 4 +\&\f(CW\*(C`length undef\*(C'\fR now returns undef. +.IP \(bu 4 +Unsupported private C API functions are now declared "static" to prevent +leakage to Perl's public API. +.IP \(bu 4 +To support the bootstrapping process, \fIminiperl\fR no longer builds with +UTF\-8 support in the regexp engine. +.Sp +This allows a build to complete with PERL_UNICODE set and a UTF\-8 locale. +Without this there's a bootstrapping problem, as miniperl can't load +the UTF\-8 components of the regexp engine, because they're not yet built. +.IP \(bu 4 +\&\fIminiperl\fR's \f(CW@INC\fR is now restricted to just \f(CW\*(C`\-I...\*(C'\fR, the split of +\&\f(CW$ENV{PERL5LIB}\fR, and "\f(CW\*(C`.\*(C'\fR" +.IP \(bu 4 +A space or a newline is now required after a \f(CW"#line XXX"\fR directive. +.IP \(bu 4 +Tied filehandles now have an additional method EOF which provides the +EOF type. +.IP \(bu 4 +To better match all other flow control statements, \f(CW\*(C`foreach\*(C'\fR may no +longer be used as an attribute. +.IP \(bu 4 +Perl's command-line switch "\-P", which was deprecated in version 5.10.0, has +now been removed. The CPAN module \f(CW\*(C`Filter::cpp\*(C'\fR can be used as an +alternative. +.SH Deprecations +.IX Header "Deprecations" +From time to time, Perl's developers find it necessary to deprecate +features or modules we've previously shipped as part of the core +distribution. We are well aware of the pain and frustration that a +backwards-incompatible change to Perl can cause for developers building +or maintaining software in Perl. You can be sure that when we deprecate +a functionality or syntax, it isn't a choice we make lightly. Sometimes, +we choose to deprecate functionality or syntax because it was found to +be poorly designed or implemented. Sometimes, this is because they're +holding back other features or causing performance problems. Sometimes, +the reasons are more complex. Wherever possible, we try to keep deprecated +functionality available to developers in its previous form for at least +one major release. So long as a deprecated feature isn't actively +disrupting our ability to maintain and extend Perl, we'll try to leave +it in place as long as possible. +.PP +The following items are now deprecated: +.IP suidperl 4 +.IX Item "suidperl" +\&\f(CW\*(C`suidperl\*(C'\fR is no longer part of Perl. It used to provide a mechanism to +emulate setuid permission bits on systems that don't support it properly. +.ie n .IP "Use of "":="" to mean an empty attribute list" 4 +.el .IP "Use of \f(CW:=\fR to mean an empty attribute list" 4 +.IX Item "Use of := to mean an empty attribute list" +An accident of Perl's parser meant that these constructions were all +equivalent: +.Sp +.Vb 3 +\& my $pi := 4; +\& my $pi : = 4; +\& my $pi : = 4; +.Ve +.Sp +with the \f(CW\*(C`:\*(C'\fR being treated as the start of an attribute list, which +ends before the \f(CW\*(C`=\*(C'\fR. As whitespace is not significant here, all are +parsed as an empty attribute list, hence all the above are equivalent +to, and better written as +.Sp +.Vb 1 +\& my $pi = 4; +.Ve +.Sp +because no attribute processing is done for an empty list. +.Sp +As is, this meant that \f(CW\*(C`:=\*(C'\fR cannot be used as a new token, without +silently changing the meaning of existing code. Hence that particular +form is now deprecated, and will become a syntax error. If it is +absolutely necessary to have empty attribute lists (for example, +because of a code generator) then avoid the warning by adding a space +before the \f(CW\*(C`=\*(C'\fR. +.ie n .IP """UNIVERSAL\->import()""" 4 +.el .IP \f(CWUNIVERSAL\->import()\fR 4 +.IX Item "UNIVERSAL->import()" +The method \f(CW\*(C`UNIVERSAL\->import()\*(C'\fR is now deprecated. Attempting to +pass import arguments to a \f(CW\*(C`use UNIVERSAL\*(C'\fR statement will result in a +deprecation warning. +.IP "Use of ""goto"" to jump into a construct" 4 +.IX Item "Use of ""goto"" to jump into a construct" +Using \f(CW\*(C`goto\*(C'\fR to jump from an outer scope into an inner scope is now +deprecated. This rare use case was causing problems in the +implementation of scopes. +.IP "Custom character names in \eN{name} that don't look like names" 4 +.IX Item "Custom character names in N{name} that don't look like names" +In \f(CW\*(C`\eN{\fR\f(CIname\fR\f(CW}\*(C'\fR, \fIname\fR can be just about anything. The standard +Unicode names have a very limited domain, but a custom name translator +could create names that are, for example, made up entirely of punctuation +symbols. It is now deprecated to make names that don't begin with an +alphabetic character, and aren't alphanumeric or contain other than +a very few other characters, namely spaces, dashes, parentheses +and colons. Because of the added meaning of \f(CW\*(C`\eN\*(C'\fR (See \f(CW\*(C`"\eN" +experimental regex escape\*(C'\fR), names that look like curly brace \-enclosed +quantifiers won't work. For example, \f(CW\*(C`\eN{3,4}\*(C'\fR now means to match 3 to +4 non-newlines; before a custom name \f(CW\*(C`3,4\*(C'\fR could have been created. +.IP "Deprecated Modules" 4 +.IX Item "Deprecated Modules" +The following modules will be removed from the core distribution in a +future release, and should be installed from CPAN instead. Distributions +on CPAN which require these should add them to their prerequisites. The +core versions of these modules warnings will issue a deprecation warning. +.Sp +If you ship a packaged version of Perl, either alone or as part of a +larger system, then you should carefully consider the repercussions of +core module deprecations. You may want to consider shipping your default +build of Perl with packages for some or all deprecated modules which +install into \f(CW\*(C`vendor\*(C'\fR or \f(CW\*(C`site\*(C'\fR perl library directories. This will +inhibit the deprecation warnings. +.Sp +Alternatively, you may want to consider patching \fIlib/deprecate.pm\fR +to provide deprecation warnings specific to your packaging system +or distribution of Perl, consistent with how your packaging system +or distribution manages a staged transition from a release where the +installation of a single package provides the given functionality, to +a later release where the system administrator needs to know to install +multiple packages to get that same functionality. +.Sp +You can silence these deprecation warnings by installing the modules +in question from CPAN. To install the latest version of all of them, +just install \f(CW\*(C`Task::Deprecations::5_12\*(C'\fR. +.RS 4 +.IP Class::ISA 4 +.IX Item "Class::ISA" +.PD 0 +.IP Pod::Plainer 4 +.IX Item "Pod::Plainer" +.IP Shell 4 +.IX Item "Shell" +.IP Switch 4 +.IX Item "Switch" +.PD +Switch is buggy and should be avoided. You may find Perl's new +\&\f(CW\*(C`given\*(C'\fR/\f(CW\*(C`when\*(C'\fR feature a suitable replacement. See "Switch +statements" in perlsyn for more information. +.RE +.RS 4 +.RE +.IP "Assignment to $[" 4 +.IX Item "Assignment to $[" +.PD 0 +.IP "Use of the attribute :locked on subroutines" 4 +.IX Item "Use of the attribute :locked on subroutines" +.IP "Use of ""locked"" with the attributes pragma" 4 +.IX Item "Use of ""locked"" with the attributes pragma" +.IP "Use of ""unique"" with the attributes pragma" 4 +.IX Item "Use of ""unique"" with the attributes pragma" +.IP Perl_pmflag 4 +.IX Item "Perl_pmflag" +.PD +\&\f(CW\*(C`Perl_pmflag\*(C'\fR is no longer part of Perl's public API. Calling it now +generates a deprecation warning, and it will be removed in a future +release. Although listed as part of the API, it was never documented, +and only ever used in \fItoke.c\fR, and prior to 5.10, \fIregcomp.c\fR. In +core, it has been replaced by a static function. +.IP "Numerous Perl 4\-era libraries" 4 +.IX Item "Numerous Perl 4-era libraries" +\&\fItermcap.pl\fR, \fItainted.pl\fR, \fIstat.pl\fR, \fIshellwords.pl\fR, \fIpwd.pl\fR, +\&\fIopen3.pl\fR, \fIopen2.pl\fR, \fInewgetopt.pl\fR, \fIlook.pl\fR, \fIfind.pl\fR, +\&\fIfinddepth.pl\fR, \fIimportenv.pl\fR, \fIhostname.pl\fR, \fIgetopts.pl\fR, +\&\fIgetopt.pl\fR, \fIgetcwd.pl\fR, \fIflush.pl\fR, \fIfastcwd.pl\fR, \fIexceptions.pl\fR, +\&\fIctime.pl\fR, \fIcomplete.pl\fR, \fIcacheout.pl\fR, \fIbigrat.pl\fR, \fIbigint.pl\fR, +\&\fIbigfloat.pl\fR, \fIassert.pl\fR, \fIabbrev.pl\fR, \fIdotsh.pl\fR, and +\&\fItimelocal.pl\fR are all now deprecated. Earlier, Perl's developers +intended to remove these libraries from Perl's core for the 5.14.0 release. +.Sp +During final testing before the release of 5.12.0, several developers +discovered current production code using these ancient libraries, some +inside the Perl core itself. Accordingly, the pumpking granted them +a stay of execution. They will begin to warn about their deprecation +in the 5.14.0 release and will be removed in the 5.16.0 release. +.SH "Unicode overhaul" +.IX Header "Unicode overhaul" +Perl's developers have made a concerted effort to update Perl to be in +sync with the latest Unicode standard. Changes for this include: +.PP +Perl can now handle every Unicode character property. New documentation, +perluniprops, lists all available non-Unihan character properties. By +default, perl does not expose Unihan, deprecated or Unicode-internal +properties. See below for more details on these; there is also a section +in the pod listing them, and explaining why they are not exposed. +.PP +Perl now fully supports the Unicode compound-style of using \f(CW\*(C`=\*(C'\fR +and \f(CW\*(C`:\*(C'\fR in writing regular expressions: \f(CW\*(C`\ep{property=value}\*(C'\fR and +\&\f(CW\*(C`\ep{property:value}\*(C'\fR (both of which mean the same thing). +.PP +Perl now fully supports the Unicode loose matching rules for text between +the braces in \f(CW\*(C`\ep{...}\*(C'\fR constructs. In addition, Perl allows underscores +between digits of numbers. +.PP +Perl now accepts all the Unicode-defined synonyms for properties and +property values. +.PP +\&\f(CW\*(C`qr/\eX/\*(C'\fR, which matches a Unicode logical character, has +been expanded to work better with various Asian languages. It +now is defined as an \fIextended grapheme cluster\fR. (See +<http://www.unicode.org/reports/tr29/>). Anything matched previously +and that made sense will continue to be accepted. Additionally: +.IP \(bu 4 +\&\f(CW\*(C`\eX\*(C'\fR will not break apart a \f(CW\*(C`CR\ LF\*(C'\fR sequence. +.IP \(bu 4 +\&\f(CW\*(C`\eX\*(C'\fR will now match a sequence which includes the \f(CW\*(C`ZWJ\*(C'\fR and \f(CW\*(C`ZWNJ\*(C'\fR +characters. +.IP \(bu 4 +\&\f(CW\*(C`\eX\*(C'\fR will now always match at least one character, including an initial +mark. Marks generally come after a base character, but it is possible in +Unicode to have them in isolation, and \f(CW\*(C`\eX\*(C'\fR will now handle that case, +for example at the beginning of a line, or after a \f(CW\*(C`ZWSP\*(C'\fR. And this is +the part where \f(CW\*(C`\eX\*(C'\fR doesn't match the things that it used to that don't +make sense. Formerly, for example, you could have the nonsensical case +of an accented LF. +.IP \(bu 4 +\&\f(CW\*(C`\eX\*(C'\fR will now match a (Korean) Hangul syllable sequence, and the Thai +and Lao exception cases. +.PP +Otherwise, this change should be transparent for the non-affected +languages. +.PP +\&\f(CW\*(C`\ep{...}\*(C'\fR matches using the Canonical_Combining_Class property were +completely broken in previous releases of Perl. They should now work +correctly. +.PP +Before Perl 5.12, the Unicode \f(CW\*(C`Decomposition_Type=Compat\*(C'\fR property +and a Perl extension had the same name, which led to neither matching +all the correct values (with more than 100 mistakes in one, and several +thousand in the other). The Perl extension has now been renamed to be +\&\f(CW\*(C`Decomposition_Type=Noncanonical\*(C'\fR (short: \f(CW\*(C`dt=noncanon\*(C'\fR). It has the +same meaning as was previously intended, namely the union of all the +non-canonical Decomposition types, with Unicode \f(CW\*(C`Compat\*(C'\fR being just +one of those. +.PP +\&\f(CW\*(C`\ep{Decomposition_Type=Canonical}\*(C'\fR now includes the Hangul syllables. +.PP +\&\f(CW\*(C`\ep{Uppercase}\*(C'\fR and \f(CW\*(C`\ep{Lowercase}\*(C'\fR now work as the Unicode standard +says they should. This means they each match a few more characters than +they used to. +.PP +\&\f(CW\*(C`\ep{Cntrl}\*(C'\fR now matches the same characters as \f(CW\*(C`\ep{Control}\*(C'\fR. This +means it no longer will match Private Use (gc=co), Surrogates (gc=cs), +nor Format (gc=cf) code points. The Format code points represent the +biggest possible problem. All but 36 of them are either officially +deprecated or strongly discouraged from being used. Of those 36, likely +the most widely used are the soft hyphen (U+00AD), and BOM, ZWSP, ZWNJ, +WJ, and similar characters, plus bidirectional controls. +.PP +\&\f(CW\*(C`\ep{Alpha}\*(C'\fR now matches the same characters as \f(CW\*(C`\ep{Alphabetic}\*(C'\fR. Before +5.12, Perl's definition included a number of things that aren't +really alpha (all marks) while omitting many that were. The definitions +of \f(CW\*(C`\ep{Alnum}\*(C'\fR and \f(CW\*(C`\ep{Word}\*(C'\fR depend on Alpha's definition and have +changed accordingly. +.PP +\&\f(CW\*(C`\ep{Word}\*(C'\fR no longer incorrectly matches non-word characters such +as fractions. +.PP +\&\f(CW\*(C`\ep{Print}\*(C'\fR no longer matches the line control characters: Tab, LF, +CR, FF, VT, and NEL. This brings it in line with standards and the +documentation. +.PP +\&\f(CW\*(C`\ep{XDigit}\*(C'\fR now matches the same characters as \f(CW\*(C`\ep{Hex_Digit}\*(C'\fR. This +means that in addition to the characters it currently matches, +\&\f(CW\*(C`[A\-Fa\-f0\-9]\*(C'\fR, it will also match the 22 fullwidth equivalents, for +example U+FF10: FULLWIDTH DIGIT ZERO. +.PP +The Numeric type property has been extended to include the Unihan +characters. +.PP +There is a new Perl extension, the 'Present_In', or simply 'In', +property. This is an extension of the Unicode Age property, but +\&\f(CW\*(C`\ep{In=5.0}\*(C'\fR matches any code point whose usage has been determined +\&\fIas of\fR Unicode version 5.0. The \f(CW\*(C`\ep{Age=5.0}\*(C'\fR only matches code points +added in \fIprecisely\fR version 5.0. +.PP +A number of properties now have the correct values for unassigned +code points. The affected properties are Bidi_Class, East_Asian_Width, +Joining_Type, Decomposition_Type, Hangul_Syllable_Type, Numeric_Type, +and Line_Break. +.PP +The Default_Ignorable_Code_Point, ID_Continue, and ID_Start properties +are now up to date with current Unicode definitions. +.PP +Earlier versions of Perl erroneously exposed certain properties that +are supposed to be Unicode internal-only. Use of these in regular +expressions will now generate, if enabled, a deprecation warning message. +The properties are: Other_Alphabetic, Other_Default_Ignorable_Code_Point, +Other_Grapheme_Extend, Other_ID_Continue, Other_ID_Start, Other_Lowercase, +Other_Math, and Other_Uppercase. +.PP +It is now possible to change which Unicode properties Perl understands +on a per-installation basis. As mentioned above, certain properties +are turned off by default. These include all the Unihan properties +(which should be accessible via the CPAN module Unicode::Unihan) and any +deprecated or Unicode internal-only property that Perl has never exposed. +.PP +The generated files in the \f(CW\*(C`lib/unicore/To\*(C'\fR directory are now more +clearly marked as being stable, directly usable by applications. New hash +entries in them give the format of the normal entries, which allows for +easier machine parsing. Perl can generate files in this directory for +any property, though most are suppressed. You can find instructions +for changing which are written in perluniprops. +.SH "Modules and Pragmata" +.IX Header "Modules and Pragmata" +.SS "New Modules and Pragmata" +.IX Subsection "New Modules and Pragmata" +.ie n .IP """autodie""" 4 +.el .IP \f(CWautodie\fR 4 +.IX Item "autodie" +\&\f(CW\*(C`autodie\*(C'\fR is a new lexically-scoped alternative for the \f(CW\*(C`Fatal\*(C'\fR module. +The bundled version is 2.06_01. Note that in this release, using a string +eval when \f(CW\*(C`autodie\*(C'\fR is in effect can cause the autodie behaviour to leak +into the surrounding scope. See "BUGS" in autodie for more details. +.Sp +Version 2.06_01 has been added to the Perl core. +.ie n .IP """Compress::Raw::Bzip2""" 4 +.el .IP \f(CWCompress::Raw::Bzip2\fR 4 +.IX Item "Compress::Raw::Bzip2" +Version 2.024 has been added to the Perl core. +.ie n .IP """overloading""" 4 +.el .IP \f(CWoverloading\fR 4 +.IX Item "overloading" +\&\f(CW\*(C`overloading\*(C'\fR allows you to lexically disable or enable overloading +for some or all operations. +.Sp +Version 0.001 has been added to the Perl core. +.ie n .IP """parent""" 4 +.el .IP \f(CWparent\fR 4 +.IX Item "parent" +\&\f(CW\*(C`parent\*(C'\fR establishes an ISA relationship with base classes at compile +time. It provides the key feature of \f(CW\*(C`base\*(C'\fR without further unwanted +behaviors. +.Sp +Version 0.223 has been added to the Perl core. +.ie n .IP """Parse::CPAN::Meta""" 4 +.el .IP \f(CWParse::CPAN::Meta\fR 4 +.IX Item "Parse::CPAN::Meta" +Version 1.40 has been added to the Perl core. +.ie n .IP """VMS::DCLsym""" 4 +.el .IP \f(CWVMS::DCLsym\fR 4 +.IX Item "VMS::DCLsym" +Version 1.03 has been added to the Perl core. +.ie n .IP """VMS::Stdio""" 4 +.el .IP \f(CWVMS::Stdio\fR 4 +.IX Item "VMS::Stdio" +Version 2.4 has been added to the Perl core. +.ie n .IP """XS::APItest::KeywordRPN""" 4 +.el .IP \f(CWXS::APItest::KeywordRPN\fR 4 +.IX Item "XS::APItest::KeywordRPN" +Version 0.003 has been added to the Perl core. +.SS "Updated Pragmata" +.IX Subsection "Updated Pragmata" +.ie n .IP """base""" 4 +.el .IP \f(CWbase\fR 4 +.IX Item "base" +Upgraded from version 2.13 to 2.15. +.ie n .IP """bignum""" 4 +.el .IP \f(CWbignum\fR 4 +.IX Item "bignum" +Upgraded from version 0.22 to 0.23. +.ie n .IP """charnames""" 4 +.el .IP \f(CWcharnames\fR 4 +.IX Item "charnames" +\&\f(CW\*(C`charnames\*(C'\fR now contains the Unicode \fINameAliases.txt\fR database file. +This has the effect of adding some extra \f(CW\*(C`\eN\*(C'\fR character names that +formerly wouldn't have been recognised; for example, \f(CW"\eN{LATIN CAPITAL +LETTER GHA}"\fR. +.Sp +Upgraded from version 1.06 to 1.07. +.ie n .IP """constant""" 4 +.el .IP \f(CWconstant\fR 4 +.IX Item "constant" +Upgraded from version 1.13 to 1.20. +.ie n .IP """diagnostics""" 4 +.el .IP \f(CWdiagnostics\fR 4 +.IX Item "diagnostics" +\&\f(CW\*(C`diagnostics\*(C'\fR now supports %.0f formatting internally. +.Sp +\&\f(CW\*(C`diagnostics\*(C'\fR no longer suppresses \f(CW\*(C`Use of uninitialized value in range +(or flip)\*(C'\fR warnings. [perl #71204] +.Sp +Upgraded from version 1.17 to 1.19. +.ie n .IP """feature""" 4 +.el .IP \f(CWfeature\fR 4 +.IX Item "feature" +In \f(CW\*(C`feature\*(C'\fR, the meaning of the \f(CW\*(C`:5.10\*(C'\fR and \f(CW\*(C`:5.10.X\*(C'\fR feature +bundles has changed slightly. The last component, if any (i.e. \f(CW\*(C`X\*(C'\fR) is +simply ignored. This is predicated on the assumption that new features +will not, in general, be added to maintenance releases. So \f(CW\*(C`:5.10\*(C'\fR +and \f(CW\*(C`:5.10.X\*(C'\fR have identical effect. This is a change to the behaviour +documented for 5.10.0. +.Sp +\&\f(CW\*(C`feature\*(C'\fR now includes the \f(CW\*(C`unicode_strings\*(C'\fR feature: +.Sp +.Vb 1 +\& use feature "unicode_strings"; +.Ve +.Sp +This pragma turns on Unicode semantics for the case-changing operations +(\f(CW\*(C`uc\*(C'\fR, \f(CW\*(C`lc\*(C'\fR, \f(CW\*(C`ucfirst\*(C'\fR, \f(CW\*(C`lcfirst\*(C'\fR) on strings that don't have the +internal UTF\-8 flag set, but that contain single-byte characters between +128 and 255. +.Sp +Upgraded from version 1.11 to 1.16. +.ie n .IP """less""" 4 +.el .IP \f(CWless\fR 4 +.IX Item "less" +\&\f(CW\*(C`less\*(C'\fR now includes the \f(CW\*(C`stash_name\*(C'\fR method to allow subclasses of +\&\f(CW\*(C`less\*(C'\fR to pick where in %^H to store their stash. +.Sp +Upgraded from version 0.02 to 0.03. +.ie n .IP """lib""" 4 +.el .IP \f(CWlib\fR 4 +.IX Item "lib" +Upgraded from version 0.5565 to 0.62. +.ie n .IP """mro""" 4 +.el .IP \f(CWmro\fR 4 +.IX Item "mro" +\&\f(CW\*(C`mro\*(C'\fR is now implemented as an XS extension. The documented interface has +not changed. Code relying on the implementation detail that some \f(CW\*(C`mro::\*(C'\fR +methods happened to be available at all times gets to "keep both pieces". +.Sp +Upgraded from version 1.00 to 1.02. +.ie n .IP """overload""" 4 +.el .IP \f(CWoverload\fR 4 +.IX Item "overload" +\&\f(CW\*(C`overload\*(C'\fR now allow overloading of 'qr'. +.Sp +Upgraded from version 1.06 to 1.10. +.ie n .IP """threads""" 4 +.el .IP \f(CWthreads\fR 4 +.IX Item "threads" +Upgraded from version 1.67 to 1.75. +.ie n .IP """threads::shared""" 4 +.el .IP \f(CWthreads::shared\fR 4 +.IX Item "threads::shared" +Upgraded from version 1.14 to 1.32. +.ie n .IP """version""" 4 +.el .IP \f(CWversion\fR 4 +.IX Item "version" +\&\f(CW\*(C`version\*(C'\fR now has support for "Version number formats" as described +earlier in this document and in its own documentation. +.Sp +Upgraded from version 0.74 to 0.82. +.ie n .IP """warnings""" 4 +.el .IP \f(CWwarnings\fR 4 +.IX Item "warnings" +\&\f(CW\*(C`warnings\*(C'\fR has a new \f(CWwarnings::fatal_enabled()\fR function. It also +includes a new \f(CW\*(C`illegalproto\*(C'\fR warning category. See also "New or +Changed Diagnostics" for this change. +.Sp +Upgraded from version 1.06 to 1.09. +.SS "Updated Modules" +.IX Subsection "Updated Modules" +.ie n .IP """Archive::Extract""" 4 +.el .IP \f(CWArchive::Extract\fR 4 +.IX Item "Archive::Extract" +Upgraded from version 0.24 to 0.38. +.ie n .IP """Archive::Tar""" 4 +.el .IP \f(CWArchive::Tar\fR 4 +.IX Item "Archive::Tar" +Upgraded from version 1.38 to 1.54. +.ie n .IP """Attribute::Handlers""" 4 +.el .IP \f(CWAttribute::Handlers\fR 4 +.IX Item "Attribute::Handlers" +Upgraded from version 0.79 to 0.87. +.ie n .IP """AutoLoader""" 4 +.el .IP \f(CWAutoLoader\fR 4 +.IX Item "AutoLoader" +Upgraded from version 5.63 to 5.70. +.ie n .IP """B::Concise""" 4 +.el .IP \f(CWB::Concise\fR 4 +.IX Item "B::Concise" +Upgraded from version 0.74 to 0.78. +.ie n .IP """B::Debug""" 4 +.el .IP \f(CWB::Debug\fR 4 +.IX Item "B::Debug" +Upgraded from version 1.05 to 1.12. +.ie n .IP """B::Deparse""" 4 +.el .IP \f(CWB::Deparse\fR 4 +.IX Item "B::Deparse" +Upgraded from version 0.83 to 0.96. +.ie n .IP """B::Lint""" 4 +.el .IP \f(CWB::Lint\fR 4 +.IX Item "B::Lint" +Upgraded from version 1.09 to 1.11_01. +.ie n .IP """CGI""" 4 +.el .IP \f(CWCGI\fR 4 +.IX Item "CGI" +Upgraded from version 3.29 to 3.48. +.ie n .IP """Class::ISA""" 4 +.el .IP \f(CWClass::ISA\fR 4 +.IX Item "Class::ISA" +Upgraded from version 0.33 to 0.36. +.Sp +NOTE: \f(CW\*(C`Class::ISA\*(C'\fR is deprecated and may be removed from a future +version of Perl. +.ie n .IP """Compress::Raw::Zlib""" 4 +.el .IP \f(CWCompress::Raw::Zlib\fR 4 +.IX Item "Compress::Raw::Zlib" +Upgraded from version 2.008 to 2.024. +.ie n .IP """CPAN""" 4 +.el .IP \f(CWCPAN\fR 4 +.IX Item "CPAN" +Upgraded from version 1.9205 to 1.94_56. +.ie n .IP """CPANPLUS""" 4 +.el .IP \f(CWCPANPLUS\fR 4 +.IX Item "CPANPLUS" +Upgraded from version 0.84 to 0.90. +.ie n .IP """CPANPLUS::Dist::Build""" 4 +.el .IP \f(CWCPANPLUS::Dist::Build\fR 4 +.IX Item "CPANPLUS::Dist::Build" +Upgraded from version 0.06_02 to 0.46. +.ie n .IP """Data::Dumper""" 4 +.el .IP \f(CWData::Dumper\fR 4 +.IX Item "Data::Dumper" +Upgraded from version 2.121_14 to 2.125. +.ie n .IP """DB_File""" 4 +.el .IP \f(CWDB_File\fR 4 +.IX Item "DB_File" +Upgraded from version 1.816_1 to 1.820. +.ie n .IP """Devel::PPPort""" 4 +.el .IP \f(CWDevel::PPPort\fR 4 +.IX Item "Devel::PPPort" +Upgraded from version 3.13 to 3.19. +.ie n .IP """Digest""" 4 +.el .IP \f(CWDigest\fR 4 +.IX Item "Digest" +Upgraded from version 1.15 to 1.16. +.ie n .IP """Digest::MD5""" 4 +.el .IP \f(CWDigest::MD5\fR 4 +.IX Item "Digest::MD5" +Upgraded from version 2.36_01 to 2.39. +.ie n .IP """Digest::SHA""" 4 +.el .IP \f(CWDigest::SHA\fR 4 +.IX Item "Digest::SHA" +Upgraded from version 5.45 to 5.47. +.ie n .IP """Encode""" 4 +.el .IP \f(CWEncode\fR 4 +.IX Item "Encode" +Upgraded from version 2.23 to 2.39. +.ie n .IP """Exporter""" 4 +.el .IP \f(CWExporter\fR 4 +.IX Item "Exporter" +Upgraded from version 5.62 to 5.64_01. +.ie n .IP """ExtUtils::CBuilder""" 4 +.el .IP \f(CWExtUtils::CBuilder\fR 4 +.IX Item "ExtUtils::CBuilder" +Upgraded from version 0.21 to 0.27. +.ie n .IP """ExtUtils::Command""" 4 +.el .IP \f(CWExtUtils::Command\fR 4 +.IX Item "ExtUtils::Command" +Upgraded from version 1.13 to 1.16. +.ie n .IP """ExtUtils::Constant""" 4 +.el .IP \f(CWExtUtils::Constant\fR 4 +.IX Item "ExtUtils::Constant" +Upgraded from version 0.2 to 0.22. +.ie n .IP """ExtUtils::Install""" 4 +.el .IP \f(CWExtUtils::Install\fR 4 +.IX Item "ExtUtils::Install" +Upgraded from version 1.44 to 1.55. +.ie n .IP """ExtUtils::MakeMaker""" 4 +.el .IP \f(CWExtUtils::MakeMaker\fR 4 +.IX Item "ExtUtils::MakeMaker" +Upgraded from version 6.42 to 6.56. +.ie n .IP """ExtUtils::Manifest""" 4 +.el .IP \f(CWExtUtils::Manifest\fR 4 +.IX Item "ExtUtils::Manifest" +Upgraded from version 1.51_01 to 1.57. +.ie n .IP """ExtUtils::ParseXS""" 4 +.el .IP \f(CWExtUtils::ParseXS\fR 4 +.IX Item "ExtUtils::ParseXS" +Upgraded from version 2.18_02 to 2.21. +.ie n .IP """File::Fetch""" 4 +.el .IP \f(CWFile::Fetch\fR 4 +.IX Item "File::Fetch" +Upgraded from version 0.14 to 0.24. +.ie n .IP """File::Path""" 4 +.el .IP \f(CWFile::Path\fR 4 +.IX Item "File::Path" +Upgraded from version 2.04 to 2.08_01. +.ie n .IP """File::Temp""" 4 +.el .IP \f(CWFile::Temp\fR 4 +.IX Item "File::Temp" +Upgraded from version 0.18 to 0.22. +.ie n .IP """Filter::Simple""" 4 +.el .IP \f(CWFilter::Simple\fR 4 +.IX Item "Filter::Simple" +Upgraded from version 0.82 to 0.84. +.ie n .IP """Filter::Util::Call""" 4 +.el .IP \f(CWFilter::Util::Call\fR 4 +.IX Item "Filter::Util::Call" +Upgraded from version 1.07 to 1.08. +.ie n .IP """Getopt::Long""" 4 +.el .IP \f(CWGetopt::Long\fR 4 +.IX Item "Getopt::Long" +Upgraded from version 2.37 to 2.38. +.ie n .IP """IO""" 4 +.el .IP \f(CWIO\fR 4 +.IX Item "IO" +Upgraded from version 1.23_01 to 1.25_02. +.ie n .IP """IO::Zlib""" 4 +.el .IP \f(CWIO::Zlib\fR 4 +.IX Item "IO::Zlib" +Upgraded from version 1.07 to 1.10. +.ie n .IP """IPC::Cmd""" 4 +.el .IP \f(CWIPC::Cmd\fR 4 +.IX Item "IPC::Cmd" +Upgraded from version 0.40_1 to 0.54. +.ie n .IP """IPC::SysV""" 4 +.el .IP \f(CWIPC::SysV\fR 4 +.IX Item "IPC::SysV" +Upgraded from version 1.05 to 2.01. +.ie n .IP """Locale::Maketext""" 4 +.el .IP \f(CWLocale::Maketext\fR 4 +.IX Item "Locale::Maketext" +Upgraded from version 1.12 to 1.14. +.ie n .IP """Locale::Maketext::Simple""" 4 +.el .IP \f(CWLocale::Maketext::Simple\fR 4 +.IX Item "Locale::Maketext::Simple" +Upgraded from version 0.18 to 0.21. +.ie n .IP """Log::Message""" 4 +.el .IP \f(CWLog::Message\fR 4 +.IX Item "Log::Message" +Upgraded from version 0.01 to 0.02. +.ie n .IP """Log::Message::Simple""" 4 +.el .IP \f(CWLog::Message::Simple\fR 4 +.IX Item "Log::Message::Simple" +Upgraded from version 0.04 to 0.06. +.ie n .IP """Math::BigInt""" 4 +.el .IP \f(CWMath::BigInt\fR 4 +.IX Item "Math::BigInt" +Upgraded from version 1.88 to 1.89_01. +.ie n .IP """Math::BigInt::FastCalc""" 4 +.el .IP \f(CWMath::BigInt::FastCalc\fR 4 +.IX Item "Math::BigInt::FastCalc" +Upgraded from version 0.16 to 0.19. +.ie n .IP """Math::BigRat""" 4 +.el .IP \f(CWMath::BigRat\fR 4 +.IX Item "Math::BigRat" +Upgraded from version 0.21 to 0.24. +.ie n .IP """Math::Complex""" 4 +.el .IP \f(CWMath::Complex\fR 4 +.IX Item "Math::Complex" +Upgraded from version 1.37 to 1.56. +.ie n .IP """Memoize""" 4 +.el .IP \f(CWMemoize\fR 4 +.IX Item "Memoize" +Upgraded from version 1.01_02 to 1.01_03. +.ie n .IP """MIME::Base64""" 4 +.el .IP \f(CWMIME::Base64\fR 4 +.IX Item "MIME::Base64" +Upgraded from version 3.07_01 to 3.08. +.ie n .IP """Module::Build""" 4 +.el .IP \f(CWModule::Build\fR 4 +.IX Item "Module::Build" +Upgraded from version 0.2808_01 to 0.3603. +.ie n .IP """Module::CoreList""" 4 +.el .IP \f(CWModule::CoreList\fR 4 +.IX Item "Module::CoreList" +Upgraded from version 2.12 to 2.29. +.ie n .IP """Module::Load""" 4 +.el .IP \f(CWModule::Load\fR 4 +.IX Item "Module::Load" +Upgraded from version 0.12 to 0.16. +.ie n .IP """Module::Load::Conditional""" 4 +.el .IP \f(CWModule::Load::Conditional\fR 4 +.IX Item "Module::Load::Conditional" +Upgraded from version 0.22 to 0.34. +.ie n .IP """Module::Loaded""" 4 +.el .IP \f(CWModule::Loaded\fR 4 +.IX Item "Module::Loaded" +Upgraded from version 0.01 to 0.06. +.ie n .IP """Module::Pluggable""" 4 +.el .IP \f(CWModule::Pluggable\fR 4 +.IX Item "Module::Pluggable" +Upgraded from version 3.6 to 3.9. +.ie n .IP """Net::Ping""" 4 +.el .IP \f(CWNet::Ping\fR 4 +.IX Item "Net::Ping" +Upgraded from version 2.33 to 2.36. +.ie n .IP """NEXT""" 4 +.el .IP \f(CWNEXT\fR 4 +.IX Item "NEXT" +Upgraded from version 0.60_01 to 0.64. +.ie n .IP """Object::Accessor""" 4 +.el .IP \f(CWObject::Accessor\fR 4 +.IX Item "Object::Accessor" +Upgraded from version 0.32 to 0.36. +.ie n .IP """Package::Constants""" 4 +.el .IP \f(CWPackage::Constants\fR 4 +.IX Item "Package::Constants" +Upgraded from version 0.01 to 0.02. +.ie n .IP """PerlIO""" 4 +.el .IP \f(CWPerlIO\fR 4 +.IX Item "PerlIO" +Upgraded from version 1.04 to 1.06. +.ie n .IP """Pod::Parser""" 4 +.el .IP \f(CWPod::Parser\fR 4 +.IX Item "Pod::Parser" +Upgraded from version 1.35 to 1.37. +.ie n .IP """Pod::Perldoc""" 4 +.el .IP \f(CWPod::Perldoc\fR 4 +.IX Item "Pod::Perldoc" +Upgraded from version 3.14_02 to 3.15_02. +.ie n .IP """Pod::Plainer""" 4 +.el .IP \f(CWPod::Plainer\fR 4 +.IX Item "Pod::Plainer" +Upgraded from version 0.01 to 1.02. +.Sp +NOTE: \f(CW\*(C`Pod::Plainer\*(C'\fR is deprecated and may be removed from a future +version of Perl. +.ie n .IP """Pod::Simple""" 4 +.el .IP \f(CWPod::Simple\fR 4 +.IX Item "Pod::Simple" +Upgraded from version 3.05 to 3.13. +.ie n .IP """Safe""" 4 +.el .IP \f(CWSafe\fR 4 +.IX Item "Safe" +Upgraded from version 2.12 to 2.22. +.ie n .IP """SelfLoader""" 4 +.el .IP \f(CWSelfLoader\fR 4 +.IX Item "SelfLoader" +Upgraded from version 1.11 to 1.17. +.ie n .IP """Storable""" 4 +.el .IP \f(CWStorable\fR 4 +.IX Item "Storable" +Upgraded from version 2.18 to 2.22. +.ie n .IP """Switch""" 4 +.el .IP \f(CWSwitch\fR 4 +.IX Item "Switch" +Upgraded from version 2.13 to 2.16. +.Sp +NOTE: \f(CW\*(C`Switch\*(C'\fR is deprecated and may be removed from a future version +of Perl. +.ie n .IP """Sys::Syslog""" 4 +.el .IP \f(CWSys::Syslog\fR 4 +.IX Item "Sys::Syslog" +Upgraded from version 0.22 to 0.27. +.ie n .IP """Term::ANSIColor""" 4 +.el .IP \f(CWTerm::ANSIColor\fR 4 +.IX Item "Term::ANSIColor" +Upgraded from version 1.12 to 2.02. +.ie n .IP """Term::UI""" 4 +.el .IP \f(CWTerm::UI\fR 4 +.IX Item "Term::UI" +Upgraded from version 0.18 to 0.20. +.ie n .IP """Test""" 4 +.el .IP \f(CWTest\fR 4 +.IX Item "Test" +Upgraded from version 1.25 to 1.25_02. +.ie n .IP """Test::Harness""" 4 +.el .IP \f(CWTest::Harness\fR 4 +.IX Item "Test::Harness" +Upgraded from version 2.64 to 3.17. +.ie n .IP """Test::Simple""" 4 +.el .IP \f(CWTest::Simple\fR 4 +.IX Item "Test::Simple" +Upgraded from version 0.72 to 0.94. +.ie n .IP """Text::Balanced""" 4 +.el .IP \f(CWText::Balanced\fR 4 +.IX Item "Text::Balanced" +Upgraded from version 2.0.0 to 2.02. +.ie n .IP """Text::ParseWords""" 4 +.el .IP \f(CWText::ParseWords\fR 4 +.IX Item "Text::ParseWords" +Upgraded from version 3.26 to 3.27. +.ie n .IP """Text::Soundex""" 4 +.el .IP \f(CWText::Soundex\fR 4 +.IX Item "Text::Soundex" +Upgraded from version 3.03 to 3.03_01. +.ie n .IP """Thread::Queue""" 4 +.el .IP \f(CWThread::Queue\fR 4 +.IX Item "Thread::Queue" +Upgraded from version 2.00 to 2.11. +.ie n .IP """Thread::Semaphore""" 4 +.el .IP \f(CWThread::Semaphore\fR 4 +.IX Item "Thread::Semaphore" +Upgraded from version 2.01 to 2.09. +.ie n .IP """Tie::RefHash""" 4 +.el .IP \f(CWTie::RefHash\fR 4 +.IX Item "Tie::RefHash" +Upgraded from version 1.37 to 1.38. +.ie n .IP """Time::HiRes""" 4 +.el .IP \f(CWTime::HiRes\fR 4 +.IX Item "Time::HiRes" +Upgraded from version 1.9711 to 1.9719. +.ie n .IP """Time::Local""" 4 +.el .IP \f(CWTime::Local\fR 4 +.IX Item "Time::Local" +Upgraded from version 1.18 to 1.1901_01. +.ie n .IP """Time::Piece""" 4 +.el .IP \f(CWTime::Piece\fR 4 +.IX Item "Time::Piece" +Upgraded from version 1.12 to 1.15. +.ie n .IP """Unicode::Collate""" 4 +.el .IP \f(CWUnicode::Collate\fR 4 +.IX Item "Unicode::Collate" +Upgraded from version 0.52 to 0.52_01. +.ie n .IP """Unicode::Normalize""" 4 +.el .IP \f(CWUnicode::Normalize\fR 4 +.IX Item "Unicode::Normalize" +Upgraded from version 1.02 to 1.03. +.ie n .IP """Win32""" 4 +.el .IP \f(CWWin32\fR 4 +.IX Item "Win32" +Upgraded from version 0.34 to 0.39. +.ie n .IP """Win32API::File""" 4 +.el .IP \f(CWWin32API::File\fR 4 +.IX Item "Win32API::File" +Upgraded from version 0.1001_01 to 0.1101. +.ie n .IP """XSLoader""" 4 +.el .IP \f(CWXSLoader\fR 4 +.IX Item "XSLoader" +Upgraded from version 0.08 to 0.10. +.SS "Removed Modules and Pragmata" +.IX Subsection "Removed Modules and Pragmata" +.ie n .IP """attrs""" 4 +.el .IP \f(CWattrs\fR 4 +.IX Item "attrs" +Removed from the Perl core. Prior version was 1.02. +.ie n .IP """CPAN::API::HOWTO""" 4 +.el .IP \f(CWCPAN::API::HOWTO\fR 4 +.IX Item "CPAN::API::HOWTO" +Removed from the Perl core. Prior version was 'undef'. +.ie n .IP """CPAN::DeferedCode""" 4 +.el .IP \f(CWCPAN::DeferedCode\fR 4 +.IX Item "CPAN::DeferedCode" +Removed from the Perl core. Prior version was 5.50. +.ie n .IP """CPANPLUS::inc""" 4 +.el .IP \f(CWCPANPLUS::inc\fR 4 +.IX Item "CPANPLUS::inc" +Removed from the Perl core. Prior version was 'undef'. +.ie n .IP """DCLsym""" 4 +.el .IP \f(CWDCLsym\fR 4 +.IX Item "DCLsym" +Removed from the Perl core. Prior version was 1.03. +.ie n .IP """ExtUtils::MakeMaker::bytes""" 4 +.el .IP \f(CWExtUtils::MakeMaker::bytes\fR 4 +.IX Item "ExtUtils::MakeMaker::bytes" +Removed from the Perl core. Prior version was 6.42. +.ie n .IP """ExtUtils::MakeMaker::vmsish""" 4 +.el .IP \f(CWExtUtils::MakeMaker::vmsish\fR 4 +.IX Item "ExtUtils::MakeMaker::vmsish" +Removed from the Perl core. Prior version was 6.42. +.ie n .IP """Stdio""" 4 +.el .IP \f(CWStdio\fR 4 +.IX Item "Stdio" +Removed from the Perl core. Prior version was 2.3. +.ie n .IP """Test::Harness::Assert""" 4 +.el .IP \f(CWTest::Harness::Assert\fR 4 +.IX Item "Test::Harness::Assert" +Removed from the Perl core. Prior version was 0.02. +.ie n .IP """Test::Harness::Iterator""" 4 +.el .IP \f(CWTest::Harness::Iterator\fR 4 +.IX Item "Test::Harness::Iterator" +Removed from the Perl core. Prior version was 0.02. +.ie n .IP """Test::Harness::Point""" 4 +.el .IP \f(CWTest::Harness::Point\fR 4 +.IX Item "Test::Harness::Point" +Removed from the Perl core. Prior version was 0.01. +.ie n .IP """Test::Harness::Results""" 4 +.el .IP \f(CWTest::Harness::Results\fR 4 +.IX Item "Test::Harness::Results" +Removed from the Perl core. Prior version was 0.01. +.ie n .IP """Test::Harness::Straps""" 4 +.el .IP \f(CWTest::Harness::Straps\fR 4 +.IX Item "Test::Harness::Straps" +Removed from the Perl core. Prior version was 0.26_01. +.ie n .IP """Test::Harness::Util""" 4 +.el .IP \f(CWTest::Harness::Util\fR 4 +.IX Item "Test::Harness::Util" +Removed from the Perl core. Prior version was 0.01. +.ie n .IP """XSSymSet""" 4 +.el .IP \f(CWXSSymSet\fR 4 +.IX Item "XSSymSet" +Removed from the Perl core. Prior version was 1.1. +.SS "Deprecated Modules and Pragmata" +.IX Subsection "Deprecated Modules and Pragmata" +See "Deprecated Modules" above. +.SH Documentation +.IX Header "Documentation" +.SS "New Documentation" +.IX Subsection "New Documentation" +.IP \(bu 4 +perlhaiku contains instructions on how to build perl for the Haiku +platform. +.IP \(bu 4 +perlmroapi describes the new interface for pluggable Method Resolution +Orders. +.IP \(bu 4 +perlperf, by Richard Foley, provides an introduction to the use of +performance and optimization techniques which can be used with particular +reference to perl programs. +.IP \(bu 4 +perlrepository describes how to access the perl source using the \fIgit\fR +version control system. +.IP \(bu 4 +perlpolicy extends the "Social contract about contributed modules" into +the beginnings of a document on Perl porting policies. +.SS "Changes to Existing Documentation" +.IX Subsection "Changes to Existing Documentation" +.IP \(bu 4 +The various large \fIChanges*\fR files (which listed every change made +to perl over the last 18 years) have been removed, and replaced by a +small file, also called \fIChanges\fR, which just explains how that same +information may be extracted from the git version control system. +.IP \(bu 4 +\&\fIPorting/patching.pod\fR has been deleted, as it mainly described +interacting with the old Perforce-based repository, which is now obsolete. +Information still relevant has been moved to perlrepository. +.IP \(bu 4 +The syntax \f(CW\*(C`unless (EXPR) BLOCK else BLOCK\*(C'\fR is now documented as valid, +as is the syntax \f(CW\*(C`unless (EXPR) BLOCK elsif (EXPR) BLOCK ... else +BLOCK\*(C'\fR, although actually using the latter may not be the best idea for +the readability of your source code. +.IP \(bu 4 +Documented \-X overloading. +.IP \(bu 4 +Documented that \f(CWwhen()\fR treats specially most of the filetest operators +.IP \(bu 4 +Documented \f(CW\*(C`when\*(C'\fR as a syntax modifier. +.IP \(bu 4 +Eliminated "Old Perl threads tutorial", which described 5005 threads. +.Sp +\&\fIpod/perlthrtut.pod\fR is the same material reworked for ithreads. +.IP \(bu 4 +Correct previous documentation: v\-strings are not deprecated +.Sp +With version objects, we need them to use MODULE VERSION syntax. This +patch removes the deprecation notice. +.IP \(bu 4 +Security contact information is now part of perlsec. +.IP \(bu 4 +A significant fraction of the core documentation has been updated to +clarify the behavior of Perl's Unicode handling. +.Sp +Much of the remaining core documentation has been reviewed and edited +for clarity, consistent use of language, and to fix the spelling of Tom +Christiansen's name. +.IP \(bu 4 +The Pod specification (perlpodspec) has been updated to bring the +specification in line with modern usage already supported by most Pod +systems. A parameter string may now follow the format name in a +"begin/end" region. Links to URIs with a text description are now +allowed. The usage of \f(CW\*(C`L<"section">\*(C'\fR has been marked as +deprecated. +.IP \(bu 4 +if.pm has been documented in "use" in perlfunc as a means to get +conditional loading of modules despite the implicit BEGIN block around +\&\f(CW\*(C`use\*(C'\fR. +.IP \(bu 4 +The documentation for \f(CW$1\fR in perlvar.pod has been clarified. +.IP \(bu 4 +\&\f(CW\*(C`\eN{U+\fR\f(CIcode point\fR\f(CW}\*(C'\fR is now documented. +.SH "Selected Performance Enhancements" +.IX Header "Selected Performance Enhancements" +.IP \(bu 4 +A new internal cache means that \f(CWisa()\fR will often be faster. +.IP \(bu 4 +The implementation of \f(CW\*(C`C3\*(C'\fR Method Resolution Order has been +optimised \- linearisation for classes with single inheritance is 40% +faster. Performance for multiple inheritance is unchanged. +.IP \(bu 4 +Under \f(CW\*(C`use locale\*(C'\fR, the locale-relevant information is now cached on +read-only values, such as the list returned by \f(CW\*(C`keys %hash\*(C'\fR. This makes +operations such as \f(CW\*(C`sort keys %hash\*(C'\fR in the scope of \f(CW\*(C`use locale\*(C'\fR +much faster. +.IP \(bu 4 +Empty \f(CW\*(C`DESTROY\*(C'\fR methods are no longer called. +.IP \(bu 4 +\&\f(CWPerl_sv_utf8_upgrade()\fR is now faster. +.IP \(bu 4 +\&\f(CW\*(C`keys\*(C'\fR on empty hash is now faster. +.IP \(bu 4 +\&\f(CW\*(C`if (%foo)\*(C'\fR has been optimized to be faster than \f(CW\*(C`if (keys %foo)\*(C'\fR. +.IP \(bu 4 +The string repetition operator (\f(CW\*(C`$str x $num\*(C'\fR) is now several times +faster when \f(CW$str\fR has length one or \f(CW$num\fR is large. +.IP \(bu 4 +Reversing an array to itself (as in \f(CW\*(C`@a = reverse @a\*(C'\fR) in void context +now happens in-place and is several orders of magnitude faster than +it used to be. It will also preserve non-existent elements whenever +possible, i.e. for non magical arrays or tied arrays with \f(CW\*(C`EXISTS\*(C'\fR +and \f(CW\*(C`DELETE\*(C'\fR methods. +.SH "Installation and Configuration Improvements" +.IX Header "Installation and Configuration Improvements" +.IP \(bu 4 +perlapi, perlintern, perlmodlib and perltoc are now all +generated at build time, rather than being shipped as part of the release. +.IP \(bu 4 +If \f(CW\*(C`vendorlib\*(C'\fR and \f(CW\*(C`vendorarch\*(C'\fR are the same, then they are only added +to \f(CW@INC\fR once. +.IP \(bu 4 +\&\f(CW$Config{usedevel}\fR and the C\-level \f(CW\*(C`PERL_USE_DEVEL\*(C'\fR are now defined if +perl is built with \f(CW\*(C`\-Dusedevel\*(C'\fR. +.IP \(bu 4 +\&\fIConfigure\fR will enable use of \f(CW\*(C`\-fstack\-protector\*(C'\fR, to provide protection +against stack-smashing attacks, if the compiler supports it. +.IP \(bu 4 +\&\fIConfigure\fR will now determine the correct prototypes for re-entrant +functions and for \f(CW\*(C`gconvert\*(C'\fR if you are using a C++ compiler rather +than a C compiler. +.IP \(bu 4 +On Unix, if you build from a tree containing a git repository, the +configuration process will note the commit hash you have checked out, for +display in the output of \f(CW\*(C`perl \-v\*(C'\fR and \f(CW\*(C`perl \-V\*(C'\fR. Unpushed local commits +are automatically added to the list of local patches displayed by +\&\f(CW\*(C`perl \-V\*(C'\fR. +.IP \(bu 4 +Perl now supports SystemTap's \f(CW\*(C`dtrace\*(C'\fR compatibility layer and an +issue with linking \f(CW\*(C`miniperl\*(C'\fR has been fixed in the process. +.IP \(bu 4 +perldoc now uses \f(CW\*(C`less \-R\*(C'\fR instead of \f(CW\*(C`less\*(C'\fR for improved behaviour +in the face of \f(CW\*(C`groff\*(C'\fR's new usage of ANSI escape codes. +.IP \(bu 4 +\&\f(CW\*(C`perl \-V\*(C'\fR now reports use of the compile-time options \f(CW\*(C`USE_PERL_ATOF\*(C'\fR and +\&\f(CW\*(C`USE_ATTRIBUTES_FOR_PERLIO\*(C'\fR. +.IP \(bu 4 +As part of the flattening of \fIext\fR, all extensions on all platforms are +built by \fImake_ext.pl\fR. This replaces the Unix-specific +\&\fIext/util/make_ext\fR, VMS-specific \fImake_ext.com\fR and Win32\-specific +\&\fIwin32/buildext.pl\fR. +.SH "Internal Changes" +.IX Header "Internal Changes" +Each release of Perl sees numerous internal changes which shouldn't +affect day to day usage but may still be notable for developers working +with Perl's source code. +.IP \(bu 4 +The J.R.R. Tolkien quotes at the head of C source file have been checked +and proper citations added, thanks to a patch from Tom Christiansen. +.IP \(bu 4 +The internal structure of the dual-life modules traditionally found in +the \fIlib/\fR and \fIext/\fR directories in the perl source has changed +significantly. Where possible, dual-lifed modules have been extracted +from \fIlib/\fR and \fIext/\fR. +.Sp +Dual-lifed modules maintained by Perl's developers as part of the Perl +core now live in \fIdist/\fR. Dual-lifed modules maintained primarily on +CPAN now live in \fIcpan/\fR. When reporting a bug in a module located +under \fIcpan/\fR, please send your bug report directly to the module's +bug tracker or author, rather than Perl's bug tracker. +.IP \(bu 4 +\&\f(CW\*(C`\eN{...}\*(C'\fR now compiles better, always forces UTF\-8 internal representation +.Sp +Perl's developers have fixed several problems with the recognition of +\&\f(CW\*(C`\eN{...}\*(C'\fR constructs. As part of this, perl will store any scalar +or regex containing \f(CW\*(C`\eN{\fR\f(CIname\fR\f(CW}\*(C'\fR or \f(CW\*(C`\eN{U+\fR\f(CIcode point\fR\f(CW}\*(C'\fR in its +definition in UTF\-8 format. (This was true previously for all occurrences +of \f(CW\*(C`\eN{\fR\f(CIname\fR\f(CW}\*(C'\fR that did not use a custom translator, but now it's +always true.) +.IP \(bu 4 +Perl_magic_setmglob now knows about globs, fixing RT #71254. +.IP \(bu 4 +\&\f(CW\*(C`SVt_RV\*(C'\fR no longer exists. RVs are now stored in IVs. +.IP \(bu 4 +\&\f(CWPerl_vcroak()\fR now accepts a null first argument. In addition, a full +audit was made of the "not NULL" compiler annotations, and those for +several other internal functions were corrected. +.IP \(bu 4 +New macros \f(CW\*(C`dSAVEDERRNO\*(C'\fR, \f(CW\*(C`dSAVE_ERRNO\*(C'\fR, \f(CW\*(C`SAVE_ERRNO\*(C'\fR, \f(CW\*(C`RESTORE_ERRNO\*(C'\fR +have been added to formalise the temporary saving of the \f(CW\*(C`errno\*(C'\fR +variable. +.IP \(bu 4 +The function \f(CW\*(C`Perl_sv_insert_flags\*(C'\fR has been added to augment +\&\f(CW\*(C`Perl_sv_insert\*(C'\fR. +.IP \(bu 4 +The function \f(CWPerl_newSV_type(type)\fR has been added, equivalent to +\&\f(CWPerl_newSV()\fR followed by \f(CWPerl_sv_upgrade(type)\fR. +.IP \(bu 4 +The function \f(CWPerl_newSVpvn_flags()\fR has been added, equivalent to +\&\f(CWPerl_newSVpvn()\fR and then performing the action relevant to the flag. +.Sp +Two flag bits are currently supported. +.RS 4 +.IP \(bu 4 +\&\f(CW\*(C`SVf_UTF8\*(C'\fR will call \f(CWSvUTF8_on()\fR for you. (Note that this does +not convert a sequence of ISO 8859\-1 characters to UTF\-8). A wrapper, +\&\f(CWnewSVpvn_utf8()\fR is available for this. +.IP \(bu 4 +\&\f(CW\*(C`SVs_TEMP\*(C'\fR now calls \f(CWPerl_sv_2mortal()\fR on the new SV. +.RE +.RS 4 +.Sp +There is also a wrapper that takes constant strings, \f(CWnewSVpvs_flags()\fR. +.RE +.IP \(bu 4 +The function \f(CW\*(C`Perl_croak_xs_usage\*(C'\fR has been added as a wrapper to +\&\f(CW\*(C`Perl_croak\*(C'\fR. +.IP \(bu 4 +Perl now exports the functions \f(CW\*(C`PerlIO_find_layer\*(C'\fR and \f(CW\*(C`PerlIO_list_alloc\*(C'\fR. +.IP \(bu 4 +\&\f(CW\*(C`PL_na\*(C'\fR has been exterminated from the core code, replaced by local +STRLEN temporaries, or \f(CW*_nolen()\fR calls. Either approach is faster than +\&\f(CW\*(C`PL_na\*(C'\fR, which is a pointer dereference into the interpreter structure +under ithreads, and a global variable otherwise. +.IP \(bu 4 +\&\f(CWPerl_mg_free()\fR used to leave freed memory accessible via \f(CWSvMAGIC()\fR +on the scalar. It now updates the linked list to remove each piece of +magic as it is freed. +.IP \(bu 4 +Under ithreads, the regex in \f(CW\*(C`PL_reg_curpm\*(C'\fR is now reference +counted. This eliminates a lot of hackish workarounds to cope with it +not being reference counted. +.IP \(bu 4 +\&\f(CWPerl_mg_magical()\fR would sometimes incorrectly turn on \f(CWSvRMAGICAL()\fR. +This has been fixed. +.IP \(bu 4 +The \fIpublic\fR IV and NV flags are now not set if the string value has +trailing "garbage". This behaviour is consistent with not setting the +public IV or NV flags if the value is out of range for the type. +.IP \(bu 4 +Uses of \f(CW\*(C`Nullav\*(C'\fR, \f(CW\*(C`Nullcv\*(C'\fR, \f(CW\*(C`Nullhv\*(C'\fR, \f(CW\*(C`Nullop\*(C'\fR, \f(CW\*(C`Nullsv\*(C'\fR etc have +been replaced by \f(CW\*(C`NULL\*(C'\fR in the core code, and non-dual-life modules, +as \f(CW\*(C`NULL\*(C'\fR is clearer to those unfamiliar with the core code. +.IP \(bu 4 +A macro \f(CWMUTABLE_PTR(p)\fR has been added, which on (non-pedantic) gcc will +not cast away \f(CW\*(C`const\*(C'\fR, returning a \f(CW\*(C`void *\*(C'\fR. Macros \f(CWMUTABLE_SV(av)\fR, +\&\f(CWMUTABLE_SV(cv)\fR etc build on this, casting to \f(CW\*(C`AV *\*(C'\fR etc without +casting away \f(CW\*(C`const\*(C'\fR. This allows proper compile-time auditing of +\&\f(CW\*(C`const\*(C'\fR correctness in the core, and helped picked up some errors +(now fixed). +.IP \(bu 4 +Macros \f(CWmPUSHs()\fR and \f(CWmXPUSHs()\fR have been added, for pushing SVs on the +stack and mortalizing them. +.IP \(bu 4 +Use of the private structure \f(CW\*(C`mro_meta\*(C'\fR has changed slightly. Nothing +outside the core should be accessing this directly anyway. +.IP \(bu 4 +A new tool, \fIPorting/expand\-macro.pl\fR has been added, that allows you +to view how a C preprocessor macro would be expanded when compiled. +This is handy when trying to decode the macro hell that is the perl +guts. +.SH Testing +.IX Header "Testing" +.SS "Testing improvements" +.IX Subsection "Testing improvements" +.IP "Parallel tests" 4 +.IX Item "Parallel tests" +The core distribution can now run its regression tests in parallel on +Unix-like platforms. Instead of running \f(CW\*(C`make test\*(C'\fR, set \f(CW\*(C`TEST_JOBS\*(C'\fR in +your environment to the number of tests to run in parallel, and run +\&\f(CW\*(C`make test_harness\*(C'\fR. On a Bourne-like shell, this can be done as +.Sp +.Vb 1 +\& TEST_JOBS=3 make test_harness # Run 3 tests in parallel +.Ve +.Sp +An environment variable is used, rather than parallel make itself, because +TAP::Harness needs to be able to schedule individual non-conflicting test +scripts itself, and there is no standard interface to \f(CW\*(C`make\*(C'\fR utilities to +interact with their job schedulers. +.Sp +Note that currently some test scripts may fail when run in parallel (most +notably \f(CW\*(C`ext/IO/t/io_dir.t\*(C'\fR). If necessary run just the failing scripts +again sequentially and see if the failures go away. +.IP "Test harness flexibility" 4 +.IX Item "Test harness flexibility" +It's now possible to override \f(CW\*(C`PERL5OPT\*(C'\fR and friends in \fIt/TEST\fR +.IP "Test watchdog" 4 +.IX Item "Test watchdog" +Several tests that have the potential to hang forever if they fail now +incorporate a "watchdog" functionality that will kill them after a timeout, +which helps ensure that \f(CW\*(C`make test\*(C'\fR and \f(CW\*(C`make test_harness\*(C'\fR run to +completion automatically. +.SS "New Tests" +.IX Subsection "New Tests" +Perl's developers have added a number of new tests to the core. +In addition to the items listed below, many modules updated from CPAN +incorporate new tests. +.IP \(bu 4 +Significant cleanups to core tests to ensure that language and +interpreter features are not used before they're tested. +.IP \(bu 4 +\&\f(CW\*(C`make test_porting\*(C'\fR now runs a number of important pre-commit checks +which might be of use to anyone working on the Perl core. +.IP \(bu 4 +\&\fIt/porting/podcheck.t\fR automatically checks the well-formedness of +POD found in all .pl, .pm and .pod files in the \fIMANIFEST\fR, other than in +dual-lifed modules which are primarily maintained outside the Perl core. +.IP \(bu 4 +\&\fIt/porting/manifest.t\fR now tests that all files listed in MANIFEST +are present. +.IP \(bu 4 +\&\fIt/op/while_readdir.t\fR tests that a bare readdir in while loop sets \f(CW$_\fR. +.IP \(bu 4 +\&\fIt/comp/retainedlines.t\fR checks that the debugger can retain source +lines from \f(CW\*(C`eval\*(C'\fR. +.IP \(bu 4 +\&\fIt/io/perlio_fail.t\fR checks that bad layers fail. +.IP \(bu 4 +\&\fIt/io/perlio_leaks.t\fR checks that PerlIO layers are not leaking. +.IP \(bu 4 +\&\fIt/io/perlio_open.t\fR checks that certain special forms of open work. +.IP \(bu 4 +\&\fIt/io/perlio.t\fR includes general PerlIO tests. +.IP \(bu 4 +\&\fIt/io/pvbm.t\fR checks that there is no unexpected interaction between +the internal types \f(CW\*(C`PVBM\*(C'\fR and \f(CW\*(C`PVGV\*(C'\fR. +.IP \(bu 4 +\&\fIt/mro/package_aliases.t\fR checks that mro works properly in the presence +of aliased packages. +.IP \(bu 4 +\&\fIt/op/dbm.t\fR tests \f(CW\*(C`dbmopen\*(C'\fR and \f(CW\*(C`dbmclose\*(C'\fR. +.IP \(bu 4 +\&\fIt/op/index_thr.t\fR tests the interaction of \f(CW\*(C`index\*(C'\fR and threads. +.IP \(bu 4 +\&\fIt/op/pat_thr.t\fR tests the interaction of esoteric patterns and threads. +.IP \(bu 4 +\&\fIt/op/qr_gc.t\fR tests that \f(CW\*(C`qr\*(C'\fR doesn't leak. +.IP \(bu 4 +\&\fIt/op/reg_email_thr.t\fR tests the interaction of regex recursion and threads. +.IP \(bu 4 +\&\fIt/op/regexp_qr_embed_thr.t\fR tests the interaction of patterns with +embedded \f(CW\*(C`qr//\*(C'\fR and threads. +.IP \(bu 4 +\&\fIt/op/regexp_unicode_prop.t\fR tests Unicode properties in regular +expressions. +.IP \(bu 4 +\&\fIt/op/regexp_unicode_prop_thr.t\fR tests the interaction of Unicode +properties and threads. +.IP \(bu 4 +\&\fIt/op/reg_nc_tie.t\fR tests the tied methods of \f(CW\*(C`Tie::Hash::NamedCapture\*(C'\fR. +.IP \(bu 4 +\&\fIt/op/reg_posixcc.t\fR checks that POSIX character classes behave +consistently. +.IP \(bu 4 +\&\fIt/op/re.t\fR checks that exportable \f(CW\*(C`re\*(C'\fR functions in \fIuniversal.c\fR work. +.IP \(bu 4 +\&\fIt/op/setpgrpstack.t\fR checks that \f(CW\*(C`setpgrp\*(C'\fR works. +.IP \(bu 4 +\&\fIt/op/substr_thr.t\fR tests the interaction of \f(CW\*(C`substr\*(C'\fR and threads. +.IP \(bu 4 +\&\fIt/op/upgrade.t\fR checks that upgrading and assigning scalars works. +.IP \(bu 4 +\&\fIt/uni/lex_utf8.t\fR checks that Unicode in the lexer works. +.IP \(bu 4 +\&\fIt/uni/tie.t\fR checks that Unicode and \f(CW\*(C`tie\*(C'\fR work. +.IP \(bu 4 +\&\fIt/comp/final_line_num.t\fR tests whether line numbers are correct at EOF +.IP \(bu 4 +\&\fIt/comp/form_scope.t\fR tests format scoping. +.IP \(bu 4 +\&\fIt/comp/line_debug.t\fR tests whether \f(CW\*(C`@{"_<$file"}\*(C'\fR works. +.IP \(bu 4 +\&\fIt/op/filetest_t.t\fR tests if \-t file test works. +.IP \(bu 4 +\&\fIt/op/qr.t\fR tests \f(CW\*(C`qr\*(C'\fR. +.IP \(bu 4 +\&\fIt/op/utf8cache.t\fR tests malfunctions of the utf8 cache. +.IP \(bu 4 +\&\fIt/re/uniprops.t\fR test unicodes \f(CW\*(C`\ep{}\*(C'\fR regex constructs. +.IP \(bu 4 +\&\fIt/op/filehandle.t\fR tests some suitably portable filetest operators +to check that they work as expected, particularly in the light of some +internal changes made in how filehandles are blessed. +.IP \(bu 4 +\&\fIt/op/time_loop.t\fR tests that unix times greater than \f(CW\*(C`2**63\*(C'\fR, which +can now be handed to \f(CW\*(C`gmtime\*(C'\fR and \f(CW\*(C`localtime\*(C'\fR, do not cause an internal +overflow or an excessively long loop. +.SH "New or Changed Diagnostics" +.IX Header "New or Changed Diagnostics" +.SS "New Diagnostics" +.IX Subsection "New Diagnostics" +.IP \(bu 4 +SV allocation tracing has been added to the diagnostics enabled by \f(CW\*(C`\-Dm\*(C'\fR. +The tracing can alternatively output via the \f(CW\*(C`PERL_MEM_LOG\*(C'\fR mechanism, if +that was enabled when the \fIperl\fR binary was compiled. +.IP \(bu 4 +Smartmatch resolution tracing has been added as a new diagnostic. Use +\&\f(CW\*(C`\-DM\*(C'\fR to enable it. +.IP \(bu 4 +A new debugging flag \f(CW\*(C`\-DB\*(C'\fR now dumps subroutine definitions, leaving +\&\f(CW\*(C`\-Dx\*(C'\fR for its original purpose of dumping syntax trees. +.IP \(bu 4 +Perl 5.12 provides a number of new diagnostic messages to help you write +better code. See perldiag for details of these new messages. +.RS 4 +.IP \(bu 4 +\&\f(CW\*(C`Bad plugin affecting keyword \*(Aq%s\*(Aq\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`gmtime(%.0f) too large\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`Lexing code attempted to stuff non\-Latin\-1 character into Latin\-1 input\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`Lexing code internal error (%s)\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`localtime(%.0f) too large\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`Overloaded dereference did not return a reference\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`Overloaded qr did not return a REGEXP\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`Perl_pmflag() is deprecated, and will be removed from the XS API\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`lvalue attribute ignored after the subroutine has been defined\*(C'\fR +.Sp +This new warning is issued when one attempts to mark a subroutine as +lvalue after it has been defined. +.IP \(bu 4 +Perl now warns you if \f(CW\*(C`++\*(C'\fR or \f(CW\*(C`\-\-\*(C'\fR are unable to change the value +because it's beyond the limit of representation. +.Sp +This uses a new warnings category: "imprecision". +.IP \(bu 4 +\&\f(CW\*(C`lc\*(C'\fR, \f(CW\*(C`uc\*(C'\fR, \f(CW\*(C`lcfirst\*(C'\fR, and \f(CW\*(C`ucfirst\*(C'\fR warn when passed undef. +.IP \(bu 4 +\&\f(CW\*(C`Show constant in "Useless use of a constant in void context"\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`Prototype after \*(Aq%s\*(Aq\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`panic: sv_chop %s\*(C'\fR +.Sp +This new fatal error occurs when the C routine \f(CWPerl_sv_chop()\fR was +passed a position that is not within the scalar's string buffer. This +could be caused by buggy XS code, and at this point recovery is not +possible. +.IP \(bu 4 +The fatal error \f(CW\*(C`Malformed UTF\-8 returned by \eN\*(C'\fR is now produced if the +\&\f(CW\*(C`charnames\*(C'\fR handler returns malformed UTF\-8. +.IP \(bu 4 +If an unresolved named character or sequence was encountered when +compiling a regex pattern then the fatal error \f(CW\*(C`\eN{NAME} must be resolved +by the lexer\*(C'\fR is now produced. This can happen, for example, when using a +single-quotish context like \f(CW\*(C`$re = \*(Aq\eN{SPACE}\*(Aq; /$re/;\*(C'\fR. See perldiag +for more examples of how the lexer can get bypassed. +.IP \(bu 4 +\&\f(CW\*(C`Invalid hexadecimal number in \eN{U+...}\*(C'\fR is a new fatal error +triggered when the character constant represented by \f(CW\*(C`...\*(C'\fR is not a +valid hexadecimal number. +.IP \(bu 4 +The new meaning of \f(CW\*(C`\eN\*(C'\fR as \f(CW\*(C`[^\en]\*(C'\fR is not valid in a bracketed character +class, just like \f(CW\*(C`.\*(C'\fR in a character class loses its special meaning, +and will cause the fatal error \f(CW\*(C`\eN in a character class must be a named +character: \eN{...}\*(C'\fR. +.IP \(bu 4 +The rules on what is legal for the \f(CW\*(C`...\*(C'\fR in \f(CW\*(C`\eN{...}\*(C'\fR have been +tightened up so that unless the \f(CW\*(C`...\*(C'\fR begins with an alphabetic +character and continues with a combination of alphanumerics, dashes, +spaces, parentheses or colons then the warning \f(CW\*(C`Deprecated character(s) +in \eN{...} starting at \*(Aq%s\*(Aq\*(C'\fR is now issued. +.IP \(bu 4 +The warning \f(CW\*(C`Using just the first characters returned by \eN{}\*(C'\fR will +be issued if the \f(CW\*(C`charnames\*(C'\fR handler returns a sequence of characters +which exceeds the limit of the number of characters that can be used. The +message will indicate which characters were used and which were discarded. +.RE +.RS 4 +.RE +.SS "Changed Diagnostics" +.IX Subsection "Changed Diagnostics" +A number of existing diagnostic messages have been improved or corrected: +.IP \(bu 4 +A new warning category \f(CW\*(C`illegalproto\*(C'\fR allows finer-grained control of +warnings around function prototypes. +.Sp +The two warnings: +.RS 4 +.ie n .IP """Illegal character in prototype for %s : %s""" 4 +.el .IP "\f(CWIllegal character in prototype for %s : %s\fR" 4 +.IX Item "Illegal character in prototype for %s : %s" +.PD 0 +.ie n .IP """Prototype after \*(Aq%c\*(Aq for %s : %s""" 4 +.el .IP "\f(CWPrototype after \*(Aq%c\*(Aq for %s : %s\fR" 4 +.IX Item "Prototype after %c for %s : %s" +.RE +.RS 4 +.PD +.Sp +have been moved from the \f(CW\*(C`syntax\*(C'\fR top-level warnings category into a new +first-level category, \f(CW\*(C`illegalproto\*(C'\fR. These two warnings are currently +the only ones emitted during parsing of an invalid/illegal prototype, +so one can now use +.Sp +.Vb 1 +\& no warnings \*(Aqillegalproto\*(Aq; +.Ve +.Sp +to suppress only those, but not other syntax-related warnings. Warnings +where prototypes are changed, ignored, or not met are still in the +\&\f(CW\*(C`prototype\*(C'\fR category as before. +.RE +.IP \(bu 4 +\&\f(CW\*(C`Deep recursion on subroutine "%s"\*(C'\fR +.Sp +It is now possible to change the depth threshold for this warning from the +default of 100, by recompiling the \fIperl\fR binary, setting the C +pre-processor macro \f(CW\*(C`PERL_SUB_DEPTH_WARN\*(C'\fR to the desired value. +.IP \(bu 4 +\&\f(CW\*(C`Illegal character in prototype\*(C'\fR warning is now more precise +when reporting illegal characters after _ +.IP \(bu 4 +mro merging error messages are now very similar to those produced by +Algorithm::C3. +.IP \(bu 4 +Amelioration of the error message "Unrecognized character \f(CW%s\fR in column \f(CW%d\fR" +.Sp +Changes the error message to "Unrecognized character \f(CW%s\fR; marked by <\-\- +HERE after \f(CW%s\fR<\-\- HERE near column \f(CW%d\fR". This should make it a little +simpler to spot and correct the suspicious character. +.IP \(bu 4 +Perl now explicitly points to \f(CW$.\fR when it causes an uninitialized +warning for ranges in scalar context. +.IP \(bu 4 +\&\f(CW\*(C`split\*(C'\fR now warns when called in void context. +.IP \(bu 4 +\&\f(CW\*(C`printf\*(C'\fR\-style functions called with too few arguments will now issue the +warning \f(CW"Missing argument in %s"\fR [perl #71000] +.IP \(bu 4 +Perl now properly returns a syntax error instead of segfaulting +if \f(CW\*(C`each\*(C'\fR, \f(CW\*(C`keys\*(C'\fR, or \f(CW\*(C`values\*(C'\fR is used without an argument. +.IP \(bu 4 +\&\f(CWtell()\fR now fails properly if called without an argument and when no +previous file was read. +.Sp +\&\f(CWtell()\fR now returns \f(CW\-1\fR, and sets errno to \f(CW\*(C`EBADF\*(C'\fR, thus restoring +the 5.8.x behaviour. +.IP \(bu 4 +\&\f(CW\*(C`overload\*(C'\fR no longer implicitly unsets fallback on repeated 'use +overload' lines. +.IP \(bu 4 +\&\fBPOSIX::strftime()\fR can now handle Unicode characters in the format string. +.IP \(bu 4 +The \f(CW\*(C`syntax\*(C'\fR category was removed from 5 warnings that should only be in +\&\f(CW\*(C`deprecated\*(C'\fR. +.IP \(bu 4 +Three fatal \f(CW\*(C`pack\*(C'\fR/\f(CW\*(C`unpack\*(C'\fR error messages have been normalized to +\&\f(CW\*(C`panic: %s\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`Unicode character is illegal\*(C'\fR has been rephrased to be more accurate +.Sp +It now reads \f(CW\*(C`Unicode non\-character is illegal in interchange\*(C'\fR and the +perldiag documentation has been expanded a bit. +.IP \(bu 4 +Currently, all but the first of the several characters that the +\&\f(CW\*(C`charnames\*(C'\fR handler may return are discarded when used in a regular +expression pattern bracketed character class. If this happens then the +warning \f(CW\*(C`Using just the first character returned by \eN{} in character +class\*(C'\fR will be issued. +.IP \(bu 4 +The warning \f(CW\*(C`Missing right brace on \eN{} or unescaped left brace after +\&\eN. Assuming the latter\*(C'\fR will be issued if Perl encounters a \f(CW\*(C`\eN{\*(C'\fR +but doesn't find a matching \f(CW\*(C`}\*(C'\fR. In this case Perl doesn't know if it +was mistakenly omitted, or if "match non-newline" followed by "match +a \f(CW\*(C`{\*(C'\fR" was desired. It assumes the latter because that is actually a +valid interpretation as written, unlike the other case. If you meant +the former, you need to add the matching right brace. If you did mean +the latter, you can silence this warning by writing instead \f(CW\*(C`\eN\e{\*(C'\fR. +.IP \(bu 4 +\&\f(CW\*(C`gmtime\*(C'\fR and \f(CW\*(C`localtime\*(C'\fR called with numbers smaller than they can +reliably handle will now issue the warnings \f(CW\*(C`gmtime(%.0f) too small\*(C'\fR +and \f(CW\*(C`localtime(%.0f) too small\*(C'\fR. +.PP +The following diagnostic messages have been removed: +.IP \(bu 4 +\&\f(CW\*(C`Runaway format\*(C'\fR +.IP \(bu 4 +\&\f(CW\*(C`Can\*(Aqt locate package %s for the parents of %s\*(C'\fR +.Sp +In general this warning it only got produced in +conjunction with other warnings, and removing it allowed an ISA lookup +optimisation to be added. +.IP \(bu 4 +\&\f(CW\*(C`v\-string in use/require is non\-portable\*(C'\fR +.SH "Utility Changes" +.IX Header "Utility Changes" +.IP \(bu 4 +\&\fIh2ph\fR now looks in \f(CW\*(C`include\-fixed\*(C'\fR too, which is a recent addition +to gcc's search path. +.IP \(bu 4 +\&\fIh2xs\fR no longer incorrectly treats enum values like macros. +It also now handles C++ style comments (\f(CW\*(C`//\*(C'\fR) properly in enums. +.IP \(bu 4 +\&\fIperl5db.pl\fR now supports \f(CW\*(C`LVALUE\*(C'\fR subroutines. Additionally, the +debugger now correctly handles proxy constant subroutines, and +subroutine stubs. +.IP \(bu 4 +\&\fIperlbug\fR now uses \f(CW%Module::CoreList::bug_tracker\fR to print out +upstream bug tracker URLs. If a user identifies a particular module +as the topic of their bug report and we're able to divine the URL for +its upstream bug tracker, perlbug now provide a message to the user +explaining that the core copies the CPAN version directly, and provide +the URL for reporting the bug directly to the upstream author. +.Sp +\&\fIperlbug\fR no longer reports "Message sent" when it hasn't actually sent +the message +.IP \(bu 4 +\&\fIperlthanks\fR is a new utility for sending non-bug-reports to the +authors and maintainers of Perl. Getting nothing but bug reports can +become a bit demoralising. If Perl 5.12 works well for you, please try +out \fIperlthanks\fR. It will make the developers smile. +.IP \(bu 4 +Perl's developers have fixed bugs in \fIa2p\fR having to do with the +\&\f(CWmatch()\fR operator in list context. Additionally, \fIa2p\fR no longer +generates code that uses the \f(CW$[\fR variable. +.SH "Selected Bug Fixes" +.IX Header "Selected Bug Fixes" +.IP \(bu 4 +U+0FFFF is now a legal character in regular expressions. +.IP \(bu 4 +pp_qr now always returns a new regexp SV. Resolves RT #69852. +.Sp +Instead of returning a(nother) reference to the (pre-compiled) regexp +in the optree, use \fBreg_temp_copy()\fR to create a copy of it, and return a +reference to that. This resolves issues about Regexp::DESTROY not being +called in a timely fashion (the original bug tracked by RT #69852), as +well as bugs related to blessing regexps, and of assigning to regexps, +as described in correspondence added to the ticket. +.Sp +It transpires that we also need to undo the \fBSvPVX()\fR sharing when ithreads +cloning a Regexp SV, because mother_re is set to NULL, instead of a +cloned copy of the mother_re. This change might fix bugs with regexps +and threads in certain other situations, but as yet neither tests nor +bug reports have indicated any problems, so it might not actually be an +edge case that it's possible to reach. +.IP \(bu 4 +Several compilation errors and segfaults when perl was built with \f(CW\*(C`\-Dmad\*(C'\fR +were fixed. +.IP \(bu 4 +Fixes for lexer API changes in 5.11.2 which broke NYTProf's savesrc option. +.IP \(bu 4 +\&\f(CW\*(C`\-t\*(C'\fR should only return TRUE for file handles connected to a TTY +.Sp +The Microsoft C version of \f(CWisatty()\fR returns TRUE for all character mode +devices, including the \fI/dev/null\fR\-style "nul" device and printers like +"lpt1". +.IP \(bu 4 +Fixed a regression caused by commit fafafbaf which caused a panic during +parameter passing [perl #70171] +.IP \(bu 4 +On systems which in-place edits without backup files, \-i'*' now works as +the documentation says it does [perl #70802] +.IP \(bu 4 +Saving and restoring magic flags no longer loses readonly flag. +.IP \(bu 4 +The malformed syntax \f(CW\*(C`grep EXPR LIST\*(C'\fR (note the missing comma) no longer +causes abrupt and total failure. +.IP \(bu 4 +Regular expressions compiled with \f(CW\*(C`qr{}\*(C'\fR literals properly set \f(CW\*(C`$\*(Aq\*(C'\fR when +matching again. +.IP \(bu 4 +Using named subroutines with \f(CW\*(C`sort\*(C'\fR should no longer lead to bus errors +[perl #71076] +.IP \(bu 4 +Numerous bugfixes catch small issues caused by the recently-added Lexer API. +.IP \(bu 4 +Smart match against \f(CW@_\fR sometimes gave false negatives. [perl #71078] +.IP \(bu 4 +\&\f(CW$@\fR may now be assigned a read-only value (without error or busting +the stack). +.IP \(bu 4 +\&\f(CW\*(C`sort\*(C'\fR called recursively from within an active comparison subroutine no +longer causes a bus error if run multiple times. [perl #71076] +.IP \(bu 4 +Tie::Hash::NamedCapture::* will not abort if passed bad input (RT #71828) +.IP \(bu 4 +\&\f(CW@_\fR and \f(CW$_\fR no longer leak under threads (RT #34342 and #41138, also +#70602, #70974) +.IP \(bu 4 +\&\f(CW\*(C`\-I\*(C'\fR on shebang line now adds directories in front of \f(CW@INC\fR +as documented, and as does \f(CW\*(C`\-I\*(C'\fR when specified on the command-line. +.IP \(bu 4 +\&\f(CW\*(C`kill\*(C'\fR is now fatal when called on non-numeric process identifiers. +Previously, an \f(CW\*(C`undef\*(C'\fR process identifier would be interpreted as a +request to kill process 0, which would terminate the current process +group on POSIX systems. Since process identifiers are always integers, +killing a non-numeric process is now fatal. +.IP \(bu 4 +5.10.0 inadvertently disabled an optimisation, which caused a measurable +performance drop in list assignment, such as is often used to assign +function parameters from \f(CW@_\fR. The optimisation has been re-instated, and +the performance regression fixed. (This fix is also present in 5.10.1) +.IP \(bu 4 +Fixed memory leak on \f(CW\*(C`while (1) { map 1, 1 }\*(C'\fR [RT #53038]. +.IP \(bu 4 +Some potential coredumps in PerlIO fixed [RT #57322,54828]. +.IP \(bu 4 +The debugger now works with lvalue subroutines. +.IP \(bu 4 +The debugger's \f(CW\*(C`m\*(C'\fR command was broken on modules that defined constants +[RT #61222]. +.IP \(bu 4 +\&\f(CW\*(C`crypt\*(C'\fR and string complement could return tainted values for untainted +arguments [RT #59998]. +.IP \(bu 4 +The \f(CW\*(C`\-i\*(C'\fR\fI.suffix\fR command-line switch now recreates the file using +restricted permissions, before changing its mode to match the original +file. This eliminates a potential race condition [RT #60904]. +.IP \(bu 4 +On some Unix systems, the value in \f(CW$?\fR would not have the top bit set +(\f(CW\*(C`$? & 128\*(C'\fR) even if the child core dumped. +.IP \(bu 4 +Under some circumstances, \f(CW$^R\fR could incorrectly become undefined +[RT #57042]. +.IP \(bu 4 +In the XS API, various hash functions, when passed a pre-computed hash where +the key is UTF\-8, might result in an incorrect lookup. +.IP \(bu 4 +XS code including \fIXSUB.h\fR before \fIperl.h\fR gave a compile-time error +[RT #57176]. +.IP \(bu 4 +\&\f(CW\*(C`$object\->isa(\*(AqFoo\*(Aq)\*(C'\fR would report false if the package \f(CW\*(C`Foo\*(C'\fR +didn't exist, even if the object's \f(CW@ISA\fR contained \f(CW\*(C`Foo\*(C'\fR. +.IP \(bu 4 +Various bugs in the new-to 5.10.0 mro code, triggered by manipulating +\&\f(CW@ISA\fR, have been found and fixed. +.IP \(bu 4 +Bitwise operations on references could crash the interpreter, e.g. +\&\f(CW\*(C`$x=\e$y; $x |= "foo"\*(C'\fR [RT #54956]. +.IP \(bu 4 +Patterns including alternation might be sensitive to the internal UTF\-8 +representation, e.g. +.Sp +.Vb 3 +\& my $byte = chr(192); +\& my $utf8 = chr(192); utf8::upgrade($utf8); +\& $utf8 =~ /$byte|X}/i; # failed in 5.10.0 +.Ve +.IP \(bu 4 +Within UTF8\-encoded Perl source files (i.e. where \f(CW\*(C`use utf8\*(C'\fR is in +effect), double-quoted literal strings could be corrupted where a \f(CW\*(C`\exNN\*(C'\fR, +\&\f(CW\*(C`\e0NNN\*(C'\fR or \f(CW\*(C`\eN{}\*(C'\fR is followed by a literal character with ordinal value +greater than 255 [RT #59908]. +.IP \(bu 4 +\&\f(CW\*(C`B::Deparse\*(C'\fR failed to correctly deparse various constructs: +\&\f(CW\*(C`readpipe STRING\*(C'\fR [RT #62428], \f(CWCORE::require(STRING)\fR [RT #62488], +\&\f(CW\*(C`sub foo(_)\*(C'\fR [RT #62484]. +.IP \(bu 4 +Using \f(CW\*(C`setpgrp\*(C'\fR with no arguments could corrupt the perl stack. +.IP \(bu 4 +The block form of \f(CW\*(C`eval\*(C'\fR is now specifically trappable by \f(CW\*(C`Safe\*(C'\fR and +\&\f(CW\*(C`ops\*(C'\fR. Previously it was erroneously treated like string \f(CW\*(C`eval\*(C'\fR. +.IP \(bu 4 +In 5.10.0, the two characters \f(CW\*(C`[~\*(C'\fR were sometimes parsed as the smart +match operator (\f(CW\*(C`~~\*(C'\fR) [RT #63854]. +.IP \(bu 4 +In 5.10.0, the \f(CW\*(C`*\*(C'\fR quantifier in patterns was sometimes treated as +\&\f(CW\*(C`{0,32767}\*(C'\fR [RT #60034, #60464]. For example, this match would fail: +.Sp +.Vb 1 +\& ("ab" x 32768) =~ /^(ab)*$/ +.Ve +.IP \(bu 4 +\&\f(CW\*(C`shmget\*(C'\fR was limited to a 32 bit segment size on a 64 bit OS [RT #63924]. +.IP \(bu 4 +Using \f(CW\*(C`next\*(C'\fR or \f(CW\*(C`last\*(C'\fR to exit a \f(CW\*(C`given\*(C'\fR block no longer produces a +spurious warning like the following: +.Sp +.Vb 1 +\& Exiting given via last at foo.pl line 123 +.Ve +.IP \(bu 4 +Assigning a format to a glob could corrupt the format; e.g.: +.Sp +.Vb 1 +\& *bar=*foo{FORMAT}; # foo format now bad +.Ve +.IP \(bu 4 +Attempting to coerce a typeglob to a string or number could cause an +assertion failure. The correct error message is now generated, +\&\f(CW\*(C`Can\*(Aqt coerce GLOB to \fR\f(CI$type\fR\f(CW\*(C'\fR. +.IP \(bu 4 +Under \f(CW\*(C`use filetest \*(Aqaccess\*(Aq\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR was using the wrong access +mode. This has been fixed [RT #49003]. +.IP \(bu 4 +\&\f(CW\*(C`length\*(C'\fR on a tied scalar that returned a Unicode value would not be +correct the first time. This has been fixed. +.IP \(bu 4 +Using an array \f(CW\*(C`tie\*(C'\fR inside in array \f(CW\*(C`tie\*(C'\fR could SEGV. This has been +fixed. [RT #51636] +.IP \(bu 4 +A race condition inside \f(CWPerlIOStdio_close()\fR has been identified and +fixed. This used to cause various threading issues, including SEGVs. +.IP \(bu 4 +In \f(CW\*(C`unpack\*(C'\fR, the use of \f(CW\*(C`()\*(C'\fR groups in scalar context was internally +placing a list on the interpreter's stack, which manifested in various +ways, including SEGVs. This is now fixed [RT #50256]. +.IP \(bu 4 +Magic was called twice in \f(CW\*(C`substr\*(C'\fR, \f(CW\*(C`\e&$x\*(C'\fR, \f(CW\*(C`tie $x, $m\*(C'\fR and \f(CW\*(C`chop\*(C'\fR. +These have all been fixed. +.IP \(bu 4 +A 5.10.0 optimisation to clear the temporary stack within the implicit +loop of \f(CW\*(C`s///ge\*(C'\fR has been reverted, as it turned out to be the cause of +obscure bugs in seemingly unrelated parts of the interpreter [commit +ef0d4e17921ee3de]. +.IP \(bu 4 +The line numbers for warnings inside \f(CW\*(C`elsif\*(C'\fR are now correct. +.IP \(bu 4 +The \f(CW\*(C`..\*(C'\fR operator now works correctly with ranges whose ends are at or +close to the values of the smallest and largest integers. +.IP \(bu 4 +\&\f(CW\*(C`binmode STDIN, \*(Aq:raw\*(Aq\*(C'\fR could lead to segmentation faults on some platforms. +This has been fixed [RT #54828]. +.IP \(bu 4 +An off-by-one error meant that \f(CW\*(C`index $str, ...\*(C'\fR was effectively being +executed as \f(CW\*(C`index "$str\e0", ...\*(C'\fR. This has been fixed [RT #53746]. +.IP \(bu 4 +Various leaks associated with named captures in regexes have been fixed +[RT #57024]. +.IP \(bu 4 +A weak reference to a hash would leak. This was affecting \f(CW\*(C`DBI\*(C'\fR +[RT #56908]. +.IP \(bu 4 +Using (?|) in a regex could cause a segfault [RT #59734]. +.IP \(bu 4 +Use of a UTF\-8 \f(CW\*(C`tr//\*(C'\fR within a closure could cause a segfault [RT #61520]. +.IP \(bu 4 +Calling \f(CWPerl_sv_chop()\fR or otherwise upgrading an SV could result in an +unaligned 64\-bit access on the SPARC architecture [RT #60574]. +.IP \(bu 4 +In the 5.10.0 release, \f(CW\*(C`inc_version_list\*(C'\fR would incorrectly list +\&\f(CW\*(C`5.10.*\*(C'\fR after \f(CW\*(C`5.8.*\*(C'\fR; this affected the \f(CW@INC\fR search order +[RT #67628]. +.IP \(bu 4 +In 5.10.0, \f(CW\*(C`pack "a*", $tainted_value\*(C'\fR returned a non-tainted value +[RT #52552]. +.IP \(bu 4 +In 5.10.0, \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`sprintf\*(C'\fR could produce the fatal error +\&\f(CW\*(C`panic: utf8_mg_pos_cache_update\*(C'\fR when printing UTF\-8 strings +[RT #62666]. +.IP \(bu 4 +In the 5.10.0 release, a dynamically created \f(CW\*(C`AUTOLOAD\*(C'\fR method might be +missed (method cache issue) [RT #60220,60232]. +.IP \(bu 4 +In the 5.10.0 release, a combination of \f(CW\*(C`use feature\*(C'\fR and \f(CW\*(C`//ee\*(C'\fR could +cause a memory leak [RT #63110]. +.IP \(bu 4 +\&\f(CW\*(C`\-C\*(C'\fR on the shebang (\f(CW\*(C`#!\*(C'\fR) line is once more permitted if it is also +specified on the command line. \f(CW\*(C`\-C\*(C'\fR on the shebang line used to be a +silent no-op \fIif\fR it was not also on the command line, so perl 5.10.0 +disallowed it, which broke some scripts. Now perl checks whether it is +also on the command line and only dies if it is not [RT #67880]. +.IP \(bu 4 +In 5.10.0, certain types of re-entrant regular expression could crash, +or cause the following assertion failure [RT #60508]: +.Sp +.Vb 1 +\& Assertion rx\->sublen >= (s \- rx\->subbeg) + i failed +.Ve +.IP \(bu 4 +Perl now includes previously missing files from the Unicode Character +Database. +.IP \(bu 4 +Perl now honors \f(CW\*(C`TMPDIR\*(C'\fR when opening an anonymous temporary file. +.SH "Platform Specific Changes" +.IX Header "Platform Specific Changes" +Perl is incredibly portable. In general, if a platform has a C compiler, +someone has ported Perl to it (or will soon). We're happy to announce +that Perl 5.12 includes support for several new platforms. At the same +time, it's time to bid farewell to some (very) old friends. +.SS "New Platforms" +.IX Subsection "New Platforms" +.IP Haiku 4 +.IX Item "Haiku" +Perl's developers have merged patches from Haiku's maintainers. Perl +should now build on Haiku. +.IP "MirOS BSD" 4 +.IX Item "MirOS BSD" +Perl should now build on MirOS BSD. +.SS "Discontinued Platforms" +.IX Subsection "Discontinued Platforms" +.IP Domain/OS 4 +.IX Item "Domain/OS" +.PD 0 +.IP MiNT 4 +.IX Item "MiNT" +.IP "Tenon MachTen" 4 +.IX Item "Tenon MachTen" +.PD +.SS "Updated Platforms" +.IX Subsection "Updated Platforms" +.IP AIX 4 +.IX Item "AIX" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Removed \fIlibbsd\fR for AIX 5L and 6.1. Only \f(CWflock()\fR was used from +\&\fIlibbsd\fR. +.IP \(bu 4 +Removed \fIlibgdbm\fR for AIX 5L and 6.1 if \fIlibgdbm\fR < 1.8.3\-5 is +installed. The \fIlibgdbm\fR is delivered as an optional package with the +AIX Toolbox. Unfortunately the versions below 1.8.3\-5 are broken. +.IP \(bu 4 +Hints changes mean that AIX 4.2 should work again. +.RE +.RS 4 +.RE +.IP Cygwin 4 +.IX Item "Cygwin" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Perl now supports IPv6 on Cygwin 1.7 and newer. +.IP \(bu 4 +On Cygwin we now strip the last number from the DLL. This has been the +behaviour in the cygwin.com build for years. The hints files have been +updated. +.RE +.RS 4 +.RE +.IP "Darwin (Mac OS X)" 4 +.IX Item "Darwin (Mac OS X)" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Skip testing the be_BY.CP1131 locale on Darwin 10 (Mac OS X 10.6), +as it's still buggy. +.IP \(bu 4 +Correct infelicities in the regexp used to identify buggy locales +on Darwin 8 and 9 (Mac OS X 10.4 and 10.5, respectively). +.RE +.RS 4 +.RE +.IP "DragonFly BSD" 4 +.IX Item "DragonFly BSD" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Fix thread library selection [perl #69686] +.RE +.RS 4 +.RE +.IP FreeBSD 4 +.IX Item "FreeBSD" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +The hints files now identify the correct threading libraries on FreeBSD 7 +and later. +.RE +.RS 4 +.RE +.IP Irix 4 +.IX Item "Irix" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +We now work around a bizarre preprocessor bug in the Irix 6.5 compiler: +\&\f(CW\*(C`cc \-E \-\*(C'\fR unfortunately goes into K&R mode, but \f(CW\*(C`cc \-E file.c\*(C'\fR doesn't. +.RE +.RS 4 +.RE +.IP NetBSD 4 +.IX Item "NetBSD" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Hints now supports versions 5.*. +.RE +.RS 4 +.RE +.IP OpenVMS 4 +.IX Item "OpenVMS" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +\&\f(CW\*(C`\-UDEBUGGING\*(C'\fR is now the default on VMS. +.Sp +Like it has been everywhere else for ages and ages. Also make command-line +selection of \-UDEBUGGING and \-DDEBUGGING work in configure.com; before +the only way to turn it off was by saying no in answer to the interactive +question. +.IP \(bu 4 +The default pipe buffer size on VMS has been updated to 8192 on 64\-bit +systems. +.IP \(bu 4 +Reads from the in-memory temporary files of \f(CW\*(C`PerlIO::scalar\*(C'\fR used to fail +if \f(CW$/\fR was set to a numeric reference (to indicate record-style reads). +This is now fixed. +.IP \(bu 4 +VMS now supports \f(CW\*(C`getgrgid\*(C'\fR. +.IP \(bu 4 +Many improvements and cleanups have been made to the VMS file name handling +and conversion code. +.IP \(bu 4 +Enabling the \f(CW\*(C`PERL_VMS_POSIX_EXIT\*(C'\fR logical name now encodes a POSIX exit +status in a VMS condition value for better interaction with GNV's bash +shell and other utilities that depend on POSIX exit values. See +"$?" in perlvms for details. +.IP \(bu 4 +\&\f(CW\*(C`File::Copy\*(C'\fR now detects Unix compatibility mode on VMS. +.RE +.RS 4 +.RE +.IP "Stratus VOS" 4 +.IX Item "Stratus VOS" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Various changes from Stratus have been merged in. +.RE +.RS 4 +.RE +.IP Symbian 4 +.IX Item "Symbian" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +There is now support for Symbian S60 3.2 SDK and S60 5.0 SDK. +.RE +.RS 4 +.RE +.IP Windows 4 +.IX Item "Windows" +.RS 4 +.PD 0 +.IP \(bu 4 +.PD +Perl 5.12 supports Windows 2000 and later. The supporting code for +legacy versions of Windows is still included, but will be removed +during the next development cycle. +.IP \(bu 4 +Initial support for building Perl with MinGW\-w64 is now available. +.IP \(bu 4 +\&\fIperl.exe\fR now includes a manifest resource to specify the \f(CW\*(C`trustInfo\*(C'\fR +settings for Windows Vista and later. Without this setting Windows +would treat \fIperl.exe\fR as a legacy application and apply various +heuristics like redirecting access to protected file system areas +(like the "Program Files" folder) to the users "VirtualStore" +instead of generating a proper "permission denied" error. +.Sp +The manifest resource also requests the Microsoft Common-Controls +version 6.0 (themed controls introduced in Windows XP). Check out the +Win32::VisualStyles module on CPAN to switch back to old style +unthemed controls for legacy applications. +.IP \(bu 4 +The \f(CW\*(C`\-t\*(C'\fR filetest operator now only returns true if the filehandle +is connected to a console window. In previous versions of Perl it +would return true for all character mode devices, including \fINUL\fR +and \fILPT1\fR. +.IP \(bu 4 +The \f(CW\*(C`\-p\*(C'\fR filetest operator now works correctly, and the +Fcntl::S_IFIFO constant is defined when Perl is compiled with +Microsoft Visual C. In previous Perl versions \f(CW\*(C`\-p\*(C'\fR always +returned a false value, and the Fcntl::S_IFIFO constant +was not defined. +.Sp +This bug is specific to Microsoft Visual C and never affected +Perl binaries built with MinGW. +.IP \(bu 4 +The socket error codes are now more widely supported: The POSIX +module will define the symbolic names, like POSIX::EWOULDBLOCK, +and stringification of socket error codes in $! works as well +now; +.Sp +.Vb 2 +\& C:\e>perl \-MPOSIX \-E "$!=POSIX::EWOULDBLOCK; say $!" +\& A non\-blocking socket operation could not be completed immediately. +.Ve +.IP \(bu 4 +\&\fBflock()\fR will now set sensible error codes in $!. Previous Perl versions +copied the value of $^E into $!, which caused much confusion. +.IP \(bu 4 +\&\fBselect()\fR now supports all empty \f(CW\*(C`fd_set\*(C'\fRs more correctly. +.IP \(bu 4 +\&\f(CW\*(Aq.\efoo\*(Aq\fR and \f(CW\*(Aq..\efoo\*(Aq\fR were treated differently than +\&\f(CW\*(Aq./foo\*(Aq\fR and \f(CW\*(Aq../foo\*(Aq\fR by \f(CW\*(C`do\*(C'\fR and \f(CW\*(C`require\*(C'\fR [RT #63492]. +.IP \(bu 4 +Improved message window handling means that \f(CW\*(C`alarm\*(C'\fR and \f(CW\*(C`kill\*(C'\fR messages +will no longer be dropped under race conditions. +.IP \(bu 4 +Various bits of Perl's build infrastructure are no longer converted to +win32 line endings at release time. If this hurts you, please report the +problem with the perlbug program included with perl. +.RE +.RS 4 +.RE +.SH "Known Problems" +.IX Header "Known Problems" +This is a list of some significant unfixed bugs, which are regressions +from either 5.10.x or 5.8.x. +.IP \(bu 4 +Some CPANPLUS tests may fail if there is a functioning file +\&\fI../../cpanp\-run\-perl\fR outside your build directory. The failure +shouldn't imply there's a problem with the actual functional +software. The bug is already fixed in [RT #74188] and is scheduled for +inclusion in perl\-v5.12.1. +.IP \(bu 4 +\&\f(CW\*(C`List::Util::first\*(C'\fR misbehaves in the presence of a lexical \f(CW$_\fR +(typically introduced by \f(CW\*(C`my $_\*(C'\fR or implicitly by \f(CW\*(C`given\*(C'\fR). The variable +which gets set for each iteration is the package variable \f(CW$_\fR, not the +lexical \f(CW$_\fR [RT #67694]. +.Sp +A similar issue may occur in other modules that provide functions which +take a block as their first argument, like +.Sp +.Vb 1 +\& foo { ... $_ ...} list +.Ve +.IP \(bu 4 +Some regexes may run much more slowly when run in a child thread compared +with the thread the pattern was compiled into [RT #55600]. +.IP \(bu 4 +Things like \f(CW\*(C`"\eN{LATIN SMALL LIGATURE FF}" =~ /\eN{LATIN SMALL LETTER F}+/\*(C'\fR +will appear to hang as they get into a very long running loop [RT #72998]. +.IP \(bu 4 +Several porters have reported mysterious crashes when Perl's entire +test suite is run after a build on certain Windows 2000 systems. When +run by hand, the individual tests reportedly work fine. +.SH Errata +.IX Header "Errata" +.IP \(bu 4 +This one is actually a change introduced in 5.10.0, but it was missed +from that release's perldelta, so it is mentioned here instead. +.Sp +A bugfix related to the handling of the \f(CW\*(C`/m\*(C'\fR modifier and \f(CW\*(C`qr\*(C'\fR resulted +in a change of behaviour between 5.8.x and 5.10.0: +.Sp +.Vb 2 +\& # matches in 5.8.x, doesn\*(Aqt match in 5.10.0 +\& $re = qr/^bar/; "foo\enbar" =~ /$re/m; +.Ve +.SH Acknowledgements +.IX Header "Acknowledgements" +Perl 5.12.0 represents approximately two years of development since +Perl 5.10.0 and contains over 750,000 lines of changes across over +3,000 files from over 200 authors and committers. +.PP +Perl continues to flourish into its third decade thanks to a vibrant +community of users and developers. The following people are known to +have contributed the improvements that became Perl 5.12.0: +.PP +Aaron Crane, Abe Timmerman, Abhijit Menon-Sen, Abigail, Adam Russell, +Adriano Ferreira, Ævar Arnfjörð Bjarmason, Alan Grover, Alexandr +Ciornii, Alex Davies, Alex Vandiver, Andreas Koenig, Andrew Rodland, +andrew@sundale.net, Andy Armstrong, Andy Dougherty, Jose AUGUSTE-ETIENNE, +Benjamin Smith, Ben Morrow, bharanee rathna, Bo Borgerson, Bo Lindbergh, +Brad Gilbert, Bram, Brendan O'Dea, brian d foy, Charles Bailey, +Chip Salzenberg, Chris 'BinGOs' Williams, Christoph Lamprecht, Chris +Williams, chromatic, Claes Jakobsson, Craig A. Berry, Dan Dascalescu, +Daniel Frederick Crisman, Daniel M. Quinlan, Dan Jacobson, Dan Kogai, +Dave Mitchell, Dave Rolsky, David Cantrell, David Dick, David Golden, +David Mitchell, David M. Syzdek, David Nicol, David Wheeler, Dennis +Kaarsemaker, Dintelmann, Peter, Dominic Dunlop, Dr.Ruud, Duke Leto, +Enrico Sorcinelli, Eric Brine, Father Chrysostomos, Florian Ragwitz, +Frank Wiegand, Gabor Szabo, Gene Sullivan, Geoffrey T. Dairiki, George +Greer, Gerard Goossen, Gisle Aas, Goro Fuji, Graham Barr, Green, Paul, +Hans Dieter Pearcey, Harmen, H. Merijn Brand, Hugo van der Sanden, +Ian Goodacre, Igor Sutton, Ingo Weinhold, James Bence, James Mastros, +Jan Dubois, Jari Aalto, Jarkko Hietaniemi, Jay Hannah, Jerry Hedden, +Jesse Vincent, Jim Cromie, Jody Belka, John E. Malmberg, John Malmberg, +John Peacock, John Peacock via RT, John P. Linderman, John Wright, +Josh ben Jore, Jos I. Boumans, Karl Williamson, Kenichi Ishigaki, Ken +Williams, Kevin Brintnall, Kevin Ryde, Kurt Starsinic, Leon Brocard, +Lubomir Rintel, Luke Ross, Marcel Grünauer, Marcus Holland-Moritz, Mark +Jason Dominus, Marko Asplund, Martin Hasch, Mashrab Kuvatov, Matt Kraai, +Matt S Trout, Max Maischein, Michael Breen, Michael Cartmell, Michael +G Schwern, Michael Witten, Mike Giroux, Milosz Tanski, Moritz Lenz, +Nicholas Clark, Nick Cleaton, Niko Tyni, Offer Kaye, Osvaldo Villalon, +Paul Fenwick, Paul Gaborit, Paul Green, Paul Johnson, Paul Marquess, +Philip Hazel, Philippe Bruhat, Rafael Garcia-Suarez, Rainer Tammer, +Rajesh Mandalemula, Reini Urban, Renée Bäcker, Ricardo Signes, +Ricardo SIGNES, Richard Foley, Rich Rauenzahn, Rick Delaney, Risto +Kankkunen, Robert May, Roberto C. Sanchez, Robin Barker, SADAHIRO +Tomoyuki, Salvador Ortiz Garcia, Sam Vilain, Scott Lanning, Sébastien +Aperghis-Tramoni, Sérgio Durigan Júnior, Shlomi Fish, Simon 'corecode' +Schubert, Sisyphus, Slaven Rezic, Smylers, Steffen Müller, Steffen +Ullrich, Stepan Kasal, Steve Hay, Steven Schubiger, Steve Peters, Tels, +The Doctor, Tim Bunce, Tim Jenness, Todd Rinaldo, Tom Christiansen, +Tom Hukins, Tom Wyant, Tony Cook, Torsten Schoenfeld, Tye McQueen, +Vadim Konovalov, Vincent Pit, Hio YAMASHINA, Yasuhiro Matsumoto, +Yitzchak Scott-Thoennes, Yuval Kogman, Yves Orton, Zefram, Zsban Ambrus +.PP +This is woefully incomplete as it's automatically generated from version +control history. In particular, it doesn't include the names of the +(very much appreciated) contributors who reported issues in previous +versions of Perl that helped make Perl 5.12.0 better. For a more complete +list of all of Perl's historical contributors, please see the \f(CW\*(C`AUTHORS\*(C'\fR +file in the Perl 5.12.0 distribution. +.PP +Our "retired" pumpkings Nicholas Clark and Rafael Garcia-Suarez +deserve special thanks for their brilliant and substantive ongoing +contributions. Nicholas personally authored over 30% of the patches +since 5.10.0. Rafael comes in second in patch authorship with 11%, +but is first by a long shot in committing patches authored by others, +pushing 44% of the commits since 5.10.0 in this category, often after +providing considerable coaching to the patch authors. These statistics +in no way comprise all of their contributions, but express in shorthand +that we couldn't have done it without them. +.PP +Many of the changes included in this version originated in the CPAN +modules included in Perl's core. We're grateful to the entire CPAN +community for helping Perl to flourish. +.SH "Reporting Bugs" +.IX Header "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. +.PP +If you believe you have an unreported bug, please run the \fBperlbug\fR +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 \f(CW\*(C`perl \-V\*(C'\fR, will be sent off to perlbug@perl.org to be +analyzed by the Perl porting team. +.PP +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. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +The \fIChanges\fR file for an explanation of how to view exhaustive details +on what changed. +.PP +The \fIINSTALL\fR file for how to build Perl. +.PP +The \fIREADME\fR file for general stuff. +.PP +The \fIArtistic\fR and \fICopying\fR files for copyright information. +.PP +<http://dev.perl.org/perl5/errata.html> for a list of issues +found after this release, as well as a list of CPAN modules known +to be incompatible with this release. |