X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/f2602da35b6b2c3eb41887e64a9d860ef6ecfd84..985213f2fede57896814a0d7f5d12b04cc05be5b:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 13f2c1a..7c26831 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,856 +1,832 @@ =encoding utf8 +=for comment +This has been completed up to 0aae26c14, except for: +803e389 rurban CYG17 utf8 paths +d9298c1 rurban mymalloc isn't thread safe + =head1 NAME -perldelta - what is new for perl v5.15.7 +[ this is a template for a new perldelta file. Any text flagged as +XXX needs to be processed before release. ] + +perldelta - what is new for perl v5.15.8 =head1 DESCRIPTION -This document describes differences between the 5.15.6 release and -the 5.15.7 release. +This document describes differences between the 5.15.7 release and +the 5.15.8 release. -If you are upgrading from an earlier release such as 5.15.5, first read -L, which describes differences between 5.15.5 and -5.15.6. +If you are upgrading from an earlier release such as 5.15.6, first read +L, which describes differences between 5.15.6 and +5.15.7. -=head1 Core Enhancements +=head1 Notice -=head2 C no longer needed for C<\N{I}> - -The C module is now automatically loaded when needed as if -the C<:full> and C<:short> options had been specified. See -L. - -=head2 Improved performance for Unicode properties in regular expressions - -Matching a code point against a Unicode property is now done via a -binary search instead of linear. This means for example that the worst -case for a 1000 item property is 10 probes instead of 1000. This -inefficiency has been compensated for in the past by permanently storing -in a hash the results of a given probe plus the results for the adjacent -64 code points, under the theory that near-by code points are likely to -be searched for. A separate hash was used for each mention of a Unicode -property in each regular expression. Thus, C -would generate two hashes. Any probes in one instance would be unknown -to the other, and the hashes could expand separately to be quite large -if the regular expression were used on many different widely-separated -code points. This can lead to running out of memory in extreme cases. -Now, however, there is just one hash shared by all instances of a given -property. This means that if C<\p{foo}> is matched against "A" in one -regular expression in a thread, the result will be known immediately to -all regular expressions, and the relentless march of using up memory is -slowed considerably. +XXX Any important notices here -=head1 Deprecations +=head1 Core Enhancements -=head2 Deprecated Modules +XXX New core language features go here. Summarise user-visible core language +enhancements. Particularly prominent performance optimisations could go +here, but most should go in the L section. + +[ List each enhancement as a =head2 entry ] + +=head2 Improved ability to mix locales and Unicode, including UTF-8 locales + +An optional parameter has been added to C + + use locale ':not_characters'; + +which tells Perl to use all but the C and C +portions of the current locale. Instead, the character set is assumed +to be Unicode. This allows locales and Unicode to be seamlessly mixed, +including the increasingly frequent UTF-8 locales. When using this +hybrid form of locales, the C<:locale> layer to the L pragma can +be used to interface with the file system, and there are CPAN modules +available for ARGV and environment variable conversions. + +Full details are in L. + +=head2 New function C and corresponding escape sequence C<\F> for Unicode foldcase + +Unicode foldcase is an extension to lowercase that gives better results +when comparing two strings case-insensitively. It has long been used +internally in regular expression C matching. Now it is available +explicitly through the new C function call (enabled by +S>, or C, or explicitly callable via +C) or through the new C<\F> sequence in double-quotish +strings. + +Full details are in L. + +=head2 C<_> in subroutine prototypes + +The C<_> character in subroutine prototypes is now allowed before C<@> or +C<%>. + +=head2 Supports (I) Unicode 6.1 + +Besides the addition of whole new scripts, and new characters in +existing scripts, this new version of Unicode, as always, makes some +changes to existing characters. One change that may trip up some +applications is that the General Category of two characters in the +Latin-1 range, PILCROW SIGN and SECTION SIGN, has been changed from +Other_Symbol to Other_Punctuation. The same change has been made for +a character in each of Tibetan, Ethiopic, and Aegean. +The code points U+3248..U+324F (CIRCLED NUMBER TEN ON BLACK SQUARE +through CIRCLED NUMBER EIGHTY ON BLACK SQUARE) have had their General +Category changed from Other_Symbol to Other_Numeric. The Line Break +property has changes for Hebrew and Japanese; and as a consequence of +other changes in 6.1, the Perl regular expression construct C<\X> now +works differently for some characters in Thai and Lao. + +New aliases (synonyms) have been defined for many property values; +these, along with the previously existing ones, are all cross indexed in +L. + +The return value of C is affected by other +changes: + + Code point Old Name New Name + U+000A LINE FEED (LF) LINE FEED + U+000C FORM FEED (FF) FORM FEED + U+000D CARRIAGE RETURN (CR) CARRIAGE RETURN + U+0085 NEXT LINE (NEL) NEXT LINE + U+008E SINGLE-SHIFT 2 SINGLE-SHIFT-2 + U+008F SINGLE-SHIFT 3 SINGLE-SHIFT-3 + U+0091 PRIVATE USE 1 PRIVATE USE-1 + U+0092 PRIVATE USE 2 PRIVATE USE-2 + U+2118 SCRIPT CAPITAL P WEIERSTRASS ELLIPTIC FUNCTION + +Perl will accept any of these names as input, but +C now returns the new name of each pair. The +change for U+2118 is considered by Unicode to be a correction, that is +the original name was a mistake (but again, it will remain forever valid +to use it to refer to U+2118). But most of these changes are the +fallout of the mistake Unicode 6.0 made in naming a character used in +Japanese cell phones to be "BELL", which conflicts with the long +standing industry use of (and Unicode's recommendation to use) that name +to mean the ASCII control character at U+0007. As a result, that name +has been deprecated in Perl since v5.14; and any use of it will raise a +warning message (unless turned off). The name "ALERT" is now the +preferred name for this code point, with "BEL" being an acceptable short +form. The name for the new cell phone character, at code point U+1F514, +remains undefined in this version of Perl (hence we don't quite +implement all of Unicode 6.1), but starting in v5.18, BELL will mean +this character, and not U+0007. -=over +Unicode has taken steps to make sure that this sort of mistake does not +happen again. The Standard now includes all the generally accepted +names and abbreviations for control characters, whereas previously it +didn't (though there were recommended names for most of them, which Perl +used). This means that most of those recommended names are now +officially in the Standard. Unicode did not recommend names for the +four code points listed above between U+008E and U+008F, and in +standardizing them Unicode subtly changed the names that Perl had +previously given them, by replacing the final blank in each name by a +hyphen. Unicode also officially accepts names that Perl had deprecated, +such as FILE SEPARATOR. Now the only deprecated name is BELL. +Finally, Perl now uses the new official names instead of the old +(now considered obsolete) names for the first four code points in the +list above (the ones which have the parentheses in them). -=item L +Now that the names have been placed in the Unicode standard, these kinds +of changes should not happen again, though corrections, such as to +U+2118, are still possible. + +Unicode also added some name abbreviations, which Perl now accepts: +SP for SPACE; +TAB for CHARACTER TABULATION; +NEW LINE, END OF LINE, NL, and EOL for LINE FEED; +LOCKING-SHIFT ONE for SHIFT OUT; +LOCKING-SHIFT ZERO for SHIFT IN; +and ZWNBSP for ZERO WIDTH NO-BREAK SPACE. + +More details on this version of Unicode are provided in +L. + +=head2 Added C + +This function is designed to replace the deprecated L +function. It includes an extra parameter to make sure it doesn't read +past the end of the input buffer. + +=head1 Security + +XXX Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +L section. + +[ List each security issue as a =head2 entry ] + +=head2 Use C and not C + +The latter function is now deprecated because its API is insufficient to +guarantee that it doesn't read (up to 12 bytes in the worst case) beyond +the end of its input string. See +L. + +=head1 Incompatible Changes + +XXX For a release on a stable branch, this section aspires to be: + + There are no changes intentionally incompatible with 5.XXX.XXX + If any exist, they are bugs, and we request that you submit a + report. See L below. + +[ List each incompatible change as a =head2 entry ] + +=head2 Special blocks called in void context -Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements, -which is a drop-in replacement. It will be deleted from perl.git blead -in v5.17.0. +Special blocks (C, C, C, C, C) are now +called in void context. This avoids wasteful copying of the result of the +last statement [perl #108794]. -=back +=head2 The C pragma and regexp objects -=head1 Performance Enhancements +With C, regular expression objects returned by C are +now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular +expression itself [perl #108780]. + +=head2 Two XS typemap Entries removed -=over 4 +Two presumably unused XS typemap entries have been removed from the +core typemap: T_DATAUNIT and T_CALLBACK. If you are, against all odds, +a user of these, please see the instructions on how to regain them +in L. -=item * +=head2 Unicode 6.1 has incompatibilities with Unicode 6.0 -Version declarations with the C keyword (e.g., C) are now -faster, as they enable features without loading F. +These are detailed in L above. -=item * +=head2 Changed returns for some properties in C -C is faster now, as it no longer iterates through magic that it -is not going to copy anyway. +The return values for C have been changed for some +properties to make the returned lists significantly smaller. This +allows those lists to be searched faster. -=back +This function was introduced earlier in the v5.15 series of releases, +and the API will not be considered stable until v5.16. -=head1 Modules and Pragmata +See L for details on the new interface. -=head2 Updated Modules and Pragmata +=head2 C<$$> and C no longer emulate POSIX semantics under LinuxThreads -=over 4 +The POSIX emulation of C<$$> and C under the obsolete +LinuxThreads implementation has been removed (the C<$$> emulation was +actually removed in v5.15.0). This only impacts users of Linux 2.4 and +users of Debian GNU/kFreeBSD up to and including 6.0, not the vast +majority of Linux installations that use NPTL threads. -=item * +This means that C like C<$$> is now always guaranteed to +return the OS's idea of the current state of the process, not perl's +cached version of it. -L has been upgraded from version 1.10 to version 1.11. +See the documentation for L<$$|perlvar/$$> for details. -It now deparses C correctly. It used to omit the -quotation marks, which did not work if the string were not a valid -identifier [perl #91416]. +=head2 C<< $< >>, C<< $> >>, C<$(> and C<$)> are no longer cached -A similar bug also affected hash and array elements such as -C<< 'random string'->[0] >>, which would deparse as C<$random string[0]>. -This has been fixed. +Similarly to the changes to C<$$> and C the internal +caching of C<< $< >>, C<< $> >>, C<$(> and C<$)> has been removed. -Those same syntaxes used to drop the package name from variables beginning -with a punctuation mark, as in C<< "foo::]"->{$key} >>. This, too, has -been fixed. +When we cached these values our idea of what they were would drift out +of sync with reality if someone (e.g. someone embedding perl) called +sete?[ug]id() without updating C. Having to deal with +this complexity wasn't worth it given how cheap the C +system call is. -B::Deparse no longer hangs when deparsing a program with stash -circularities, such as C [perl #91384]. +This change will break a handful of CPAN modules that use the XS-level +C, C, C or C variables. -C used to be deparsed as C<$s[1]> if @s were a lexical variable -[perl #81424]. Similarly, C would be deparsed as C<$#s> for both -lexical and package variables. These has been fixed. +The fix for those breakages is to use C to +retrieve them (e.g. C), and not to assign to +C if you change the UID/GID/EUID/EGID. There is no longer +any need to do so since perl will always retrieve the up-to-date +version of those values from the OS. -The C regular expression flags are no longer omitted. +=head2 Which Non-ASCII characters get quoted by C and C<\Q> has changed -Feature hints are now deparsed with C rather than C<%^H> -assignments. +This is unlikely to result in a real problem, as Perl does not attach +special meaning to any non-ASCII character, so it is currently +irrelevant which are quoted or not. This change fixes bug [perl #77654] and +bring Perl's behavior more into line with Unicode's recommendations. +See L. -A regression in 1.10 that caused C to disable strict mode -in obscure cases has been fixed. +=head1 Deprecations -Strict mode is now fully deparsed, including subs and vars [perl #24027]. +XXX Any deprecated features, syntax, modules etc. should be listed here. +In particular, deprecated modules should be listed here even if they are +listed as an updated module in the L section. -The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces -(i.e., C<${(}>) in regular expressions [perl #86060]. +[ List each deprecation as a =head2 entry ] -C blocks after C loops are now deparsed correctly, as they -were back in 0.67 (included with Perl 5.8.5) [perl #108224] +=head2 C -=item * +This function is deprecated because it could read beyond the end of the +input string. Use the new L +instead. -L has been upgraded from version 3.58 to version 3.59. +=head1 Performance Enhancements -We no longer read from STDIN when the Content-Length is not set, preventing -requests with no Content-Length from freezing in some cases. This is consistent -with the CGI RFC 3875, and is also consistent with CGI::Simple. However, the old -behavior may have been expected by some command-line uses of CGI.pm. +XXX Changes which enhance performance without changing behaviour go here. There +may well be none in a stable release. -=item * +[ List each enhancement as a =item entry ] -L has been upgraded from version 2.112621 to version 2.113640. - -Version::Requirements has now been merged as CPAN::Meta::Requirements. +=over 4 =item * -L has been upgraded from version 0.9113 to version 0.9116. +XXX -=item * - -L has been upgraded from version 2.135_01 to version -2.135_03. +=back -It can now dump vstrings [perl #101162]. +=head1 Modules and Pragmata -The nameless typeglob (C<*{""}>) is now dumped properly. +XXX All changes to installed files in F, F, F and F +go here. If Module::CoreList is updated, generate an initial draft of the +following sections using F, which prints stub +entries to STDOUT. Results can be pasted in place of the '=head2' entries +below. A paragraph summary for important changes should then be added by hand. +In an ideal world, dual-life modules would have a F file that could be +cribbed. -=item * +[ Within each section, list entries as a =item entry ] -L has been upgraded from version 1.26 to version 1.27. +=head2 New Modules and Pragmata -See the entry for splain in the L section, for the -changes. The diagnostics module and the splain utility are actually one -and the same. +=over 4 =item * -L has been upgraded from version 1.45 to version 1.46. +The C PerlIO layer is no longer implemented by perl itself, but has +been moved out into the new L module. -It no longer produces "used once" warnings when the C and C -methods are called while the main program is still compiling (e.g., from -within a BEGIN block) [perl #107410] [rt.cpan.org #50315]. +=back -=item * +=head2 Updated Modules and Pragmata -L has been upgraded from version 3.08 to version 3.12. +=over 4 =item * -L has been upgraded from version 1.21 to version 1.22. - -=item * +L has been upgraded from version 0.03 to version 0.04. -L has been upgraded from version 2.59 to version 2.60. +List slices no longer modify items on the stack belonging to outer lists +[perl #109570]. =item * -L has been upgraded from version 3.9 to version 4.0. +L has been upgraded from version 1.33 to version 1.34. -=item * +C now has a C method, corresponding to a new internal +field added in 5.15.4 [perl #108860]. -L has been upgraded from version 1.16 to version 1.17. +=item * -C no longer calls C on the class, but uses -another means to determine whether the object has overloading. It was -never correct for it to call C, as overloading does not respect -AUTOLOAD. So classes that autoload methods and implement C no longer -have to account for overloading [perl #40333]. +L has been upgraded from version 1.24 to version 1.25. -A warning is now produced for invalid arguments. See L. +It now puts a dot after the file and line number, just like errors from +C [perl #106538]. =item * -L has been upgraded from version 5.0150036 to version 5.0150038. +L has been upgraded from version 2.045 to version 2.049. =item * -L has been upgraded from version 0.12 to version 0.13. - -(This is the module that implements C<< open $fh, '>', \$scalar >>.) - -It no longer assumes during C that $scalar is a string internally. -If it didn't crash, it was close to doing so [perl #92706]. Also, the -internal print routine no longer assumes that the position set by C -is valid, but extends the string to that position, filling the intervening -bytes (between the old length and the seek position) with nulls -[perl #78980]. +L has been upgraded from version 2.045 to version 2.049. -Printing to an in-memory handle now works if the $scalar holds a reference, -stringifying the reference before modifying it. References used to be -treated as empty strings. - -Printing to an in-memory handle no longer crashes if the $scalar happens to -hold a number internally, but no string buffer. - -Printing to an in-memory handle no longer creates scalars that confuse the regular expression engine [perl #108398]. +Include zlib 1.2.6 source =item * -L has been upgraded from version 1.12 to 1.13 +L has been upgraded from version 2.046 to version 2.049. =item * -L has been upgraded from version 1.27 to version 1.29. +L has been upgraded from version 2.113640 to version 2.120351. -C and C now run signals handle before returning, as the -whole point of these two functions is to wait until a signal has -arrived, and then return I it has been triggered. Delayed, or -"safe", signals were preventing that from happening, possibly resulting in -race conditions [perl #107216]. -C is now a direct call into the underlying OS C -function, instead of being a Perl wrapper on C. C -now returns the correct value on Win32 (I the file descriptor). -C C and C and C now -dispatch safe signals immediately before returning to their caller. +Work around a memory leak bug involving version objects in boolean context. =item * -L has been upgraded from version 3.15_01 to version 3.15_15. +L has been upgraded from version 0.005 to version 0.007. =item * -L has been upgraded from version 0.26 to version 0.30. +L has been upgraded from version 0.9116 to version 0.9118. =item * -L has been upgraded from version 0.96 to version 0.98. +L has been upgraded from version 0.60 to version 0.62. =item * -L has been upgraded from version 0.37 to version 0.38. -This changes the output of C for the Name_Alias property -to reflect the changes that are planned for Unicode 6.1, so that there -won't be a format change when upgrading to 6.1. Briefly, a second -component of each alias is added that gives the type of alias it is. -Examples are at L. +L has been upgraded from version 1.824 to version 1.826. =item * -L has been upgraded from version 0.101020 to version 0.101021. - -Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements, -which is a drop-in replacement. - -=back +L has been upgraded from version 1.27 to version 1.28. -=head1 Documentation +When searching for F, it no longer uses paths that were only +relevant on Perl 5.004 and earlier. -=head2 Changes to Existing Documentation +=item * -=head3 L +L has been upgraded from version 3.12 to version 3.15. -=over 4 +The new version comes with important tools for sharing typemaps between +different CPAN distributions. =item * -C treats a 0 mode as a special case, that prevents a nonexistent -file from being created. This has been the case since Perl 5.000, but was -never documented anywhere. Now the perlfunc entry mentions it -[perl #90064]. +L has been upgraded from version 2.21 to version 2.23. + +It no longer emits warnings when copying files with newlines in their names +[perl #109104]. =item * -The entry for C has been rewritten. It is now far clearer than -before. +L has been upgraded from version 0.72 to version 0.76. -=back +=item * -=head3 L and L +L has been upgraded from version 1.58 to version 1.59. -=over 4 +This avoids a new core warning. =item * -Documentation of the smartmatch operator has been reworked and moved from -perlsyn to perlop where it belongs. +L has been upgraded from version 1.000007 to version 1.000009. + +Adds C method to generate a CPAN META provides data structure +correctly; use of C is discouraged. =item * -Documentation of the ellipsis statement (C<...>) has been reworked and -moved from perlop to perlsyn. +L has been upgraded from version 1.4401 to version 1.4402. -=back +=item * -=head1 Diagnostics +L has been upgraded from version 5.0150038 to version 5.0150039. -The following additions or changes have been made to diagnostic output, -including warnings and fatal error messages. For the complete list of -diagnostic messages, see L. +=item * -=head2 New Diagnostics +L has been upgraded from version 1.04 to version 1.05. -=head3 New Errors - -=over 4 +F is now generated at perl build time from annotations in +F. This will ensure that L and L +remain in synchronisation. =item * -L - -This error occurs when C tries to set C<@DB::args> but finds it -tied. Before this error was added, it used to crash instead. +L has been upgraded from version 1.37 to version 1.51. =item * -L +L has been upgraded from version 1.07 to version 1.08. -This error is part of a safety check that the C operator does before -tying a special array like C<@_>. You should never see this message. - -=back +Its C method now supports L event loops, and not just +L. A more general mechanism has been proposed, so this may be reverted +before Perl 5.16 [perl #108470]. -=head3 New Warnings +=item * -=over 4 +L has been upgraded from version 1.97 to version 1.98. =item * -L +L has been upgraded from version 1.9724 to version 1.9725. -The long-deprecated C now also warns for package variables. -Previously it only issued a warning for lexical variables. +C no longer corrupts the Perl stack. =item * -L +L has been upgraded from version 0.39 to 0.40. -C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>. +The only change is to fix a formatting error in the Pod. =item * -L - -This warning, in the "overload" category, is produced when the overload -pragma is given an argument it doesn't recognize, presumably a mistyped -operator. +L has been upgraded from version 0.101021 to version 0.101022. =back -=head2 Removals +=head2 Removed Modules and Pragmata =over 4 =item * -"sort is now a reserved word" - -This error used to occur when C was called without arguments, followed by C<;> or C<)>. (E.g., C would die, but C<{sort}> was -OK.) This error message was added in Perl 3 to catch code like -C which would no longer work. More than two decades later, -this message is no longer appropriate. Now C without arguments is -always allowed, and returns an empty list, as it did in those cases where -it was already allowed [perl #90030]. +XXX =back -=head1 Utility Changes +=head1 Documentation -=head3 L +XXX Changes to files in F go here. Consider grouping entries by +file and be sure to link to the appropriate page, e.g. L. -=over 4 +=head2 New Documentation -=item * +XXX Changes which create B files in F go here. -splain no longer emits backtraces with the first line number repeated. -This: +=head3 L - Uncaught exception from user code: - Cannot fwiddle the fwuddle at -e line 1. - at -e line 1 - main::baz() called at -e line 1 - main::bar() called at -e line 1 - main::foo() called at -e line 1 +The new manual describes the XS typemapping mechanism in unprecedented +detail and combines new documentation with information extracted from +L and the previously unofficial list of all core typemaps. -has become this: +=head3 L - Uncaught exception from user code: - Cannot fwiddle the fwuddle at -e line 1. - main::baz() called at -e line 1 - main::bar() called at -e line 1 - main::foo() called at -e line 1 +XXX Description of the purpose of the new file here -=item * +=head2 Changes to Existing Documentation -Some error messages consist of multiple lines that are listed as separate -entries in L. splain has been taught to find the separate -entries in these cases, instead of simply failing to find the message. +XXX Changes which significantly change existing files in F go here. +However, any changes to F should go in the L +section. -=back - -=head1 Configuration and Compilation +=head3 L =over 4 =item * -The Pod files for the perl FAQ, L, L and L -are once again correctly installed in the same directory as the other core -Pods. - -=for 5.16.0 This isn't a regression from 5.14.x, so don't mention this. +XXX Description of the change here =back -=head1 Testing - -=over 4 - -=item * +=head1 Diagnostics -F now tests that various utility scripts compile cleanly. -During development, this avoids the embarrassment of inadvertently pushing a -commit which breaks code which isn't otherwise tested by the regression test -suite. For example, F and F, needed by -C, are tested here. +The following additions or changes have been made to diagnostic output, +including warnings and fatal error messages. For the complete list of +diagnostic messages, see L. -=back +XXX New or changed warnings emitted by the core's C code go here. Also +include any changes in L that reconcile it to the C code. -=head1 Internal Changes +[ Within each section, list entries as a =item entry that links to perldiag, + e.g. -=over 4 + =item * -=item * + L +] -There are now feature bundle hints in C (C<$^H>) that version -declarations use, to avoid having to load F. One setting of -the hint bits indicates a "custom" feature bundle, which means that the -entries in C<%^H> still apply. F uses that. +=head2 New Diagnostics -The C macro is defined in F along with other -hints. Other macros for setting and testing features and bundles are in -the new F. C (which has moved to -F) is no longer used throughout the codebase, but more specific -macros, e.g., C, that are defined in F. +XXX Newly added diagnostic messages go here -=item * +=head3 New Errors -F is now a generated file, created by the new -F script, which also generates F. +=over 4 =item * -Tied arrays are now always C. If C<@_> or C is tied, it -is reified first, to make sure this is always the case. +XXX L =back -=head1 Selected Bug Fixes +=head3 New Warnings =over 4 -=item * "b . COND" in the debugger has been fixed +=item * -Breaking on the current line with C was broken by previous work and -has now been fixed. +XXX L -=item * Tying C<%^H> +=back -Tying C<%^H> no longer causes perl to crash or ignore -the contents of C<%^H> when entering a compilation -scope [perl #106282]. +=head2 Changes to Existing Diagnostics -=item * C<~> on vstrings +XXX Changes (i.e. rewording) of diagnostic messages go here -The bitwise complement operator (and possibly other operators, too) when -passed a vstring would leave vstring magic attached to the return value, -even though the string had changed. This meant that -C<< version->new(~v1.2.3) >> would create a version looking like "v1.2.3" -even though the string passed to C<< version->new >> was actually -"\376\375\374". This also caused L to deparse C<~v1.2.3> -incorrectly, without the C<~> [perl #29070]. +=over 4 -=item * Vstrings blowing away magic +=item * -Assigning a vstring to a magic (e.g., tied, C<$!>) variable and then -assigning something else used to blow away all the magic. This meant that -tied variables would come undone, C<$!> would stop getting updated on -failed system calls, C<$|> would stop setting autoflush, and other -mischief would take place. This has been fixed. +XXX Describe change here -=item * C and tied hashes +=back -The C XS function now works on tied hashes, instead of crashing or -returning an empty hash. +=head1 Utility Changes -=item * Hashes will null elements +XXX Changes to installed programs such as F and F go +here. Most of these are built within the directories F and F. -It is possible from XS code to create hashes with elements that have no -values. Perl itself sometimes creates such hashes, but they are rarely -visible to Perl code. The hash element and slice operators used to crash -when handling these in lvalue context. These have been fixed. They now -produce a "Modification of non-creatable hash value attempted" error -message. +[ List utility changes as a =head3 entry for each utility and =item +entries for each change +Use L with program names to get proper documentation linking. ] -=item * No warning for C +=head3 L -When one writes C, which used to work in Perl 4, a -"Precedence problem" warning is produced. This warning used erroneously to -apply to fully-qualified bareword handle names not followed by C<||>. This -has been corrected. +=over 4 -=item * C with 0 or 1 argument -would sometimes return a name that could not be used to refer to the -filehandle, or sometimes it would return C even when a filehandle -was selected. Now it returns a typeglob reference in such cases. +XXX -=item * C and tied variables +=back -C no longer ignores FETCH on tied variables as it used -to most of the time [perl #97956]. +=head1 Configuration and Compilation -=item * C and numbers +XXX Changes to F, F, F, and analogous tools +go here. Any other changes to the Perl build process should be listed here. +However, any platform-specific changes should be listed in the +L section, instead. -C no longer ignores some arguments that it thinks are -numeric, while treating others as filehandle names. It is now consistent -for flat scalars (i.e., not references). +[ List changes as a =item entry ]. -=item * Lvalue subs and strict mode +=over 4 -Lvalue sub calls that are not determined to be such at compile time -(C<&$name> or &{"name"}) are no longer exempt from strict refs if they -occur in the last statement of an lvalue subroutine [perl #102486]. +=item * -=item * Non-lvalue sub calls in potentially lvalue context +XXX -Sub calls whose subs are not visible at compile time, if -they occurred in the last statement of an lvalue subroutine, -would reject non-lvalue subroutines and die with "Can't modify non-lvalue -subroutine call" [perl #102486]. +=back -Non-lvalue sub calls whose subs I visible at compile time exhibited -the opposite bug. If the call occurred in the last statement of an lvalue -subroutine, there would be no error when the lvalue sub was called in -lvalue context. Perl would blindly assign to the temporary value returned -by the non-lvalue subroutine. +=head1 Testing -=item * AUTOLOADing lvalue subs +XXX Any significant changes to the testing of a freshly built perl should be +listed here. Changes which create B files in F go here as do any +large changes to the testing harness (e.g. when parallel testing was added). +Changes to existing files in F aren't worth summarising, although the bugs +that they represent may be covered elsewhere. -C routines used to take precedence over the actual sub being -called (i.e., when autoloading wasn't needed), for sub calls in lvalue or -potential lvalue context, if the subroutine was not visible at compile -time. +[ List each test improvement as a =item entry ] -=item * C and tied C<@DB::args> +=over 4 -C sets C<@DB::args> to the subroutine arguments when called from -the DB package. It used to crash when doing so if C<@DB::args> happened to -be tied. Now it croaks instead. +=item * -=item * Tying C<@_> +F has been added, to avoid the problem of +C passing 100%, but the subsequent git commit causing +F to fail, because it uses a "new" e-mail address. -Under debugging builds, this code: +This test is only run if one is building inside a git checkout, B one +has made local changes. Otherwise it's skipped. - sub TIEARRAY{bless[]} - sub { - tie @_, ""; - \@_; - }->(1); +=item * -use to produce an "av_reify called on tied array" warning. It doesn't any -more. +F has been added, to test that changes to +F do not inadvertently break the build of L. -=item * Unrecognised switches on C<#!> line +=item * -If a switch, such as B<-x>, that cannot occur on the C<#!> line is used -there, perl dies with "Can't emulate...". +The test suite for typemaps has been extended to cover a larger fraction of +the core typemaps. -It used to produce the same message for switches that perl did not -recognise at all, whether on the command line or the C<#!> line. +=back -Now it produces the "Unrecognized switch" error message [perl #104288]. +=head1 Platform Support -=item * C and SIGCHLD +XXX Any changes to platform support should be listed in the sections below. -C now temporarily blocks the SIGCHLD signal handler, to prevent the -signal handler from stealing the exit status [perl #105700]. +[ Within the sections, list each platform as a =item entry with specific +changes as paragraphs below it. ] -=item * Deleting methods via C +=head2 New Platforms -Deletion of methods via C syntax used to update -method caches if called in void context, but not scalar or list context. -Now it always updates those caches. +XXX List any platforms that this version of perl compiles on, that previous +versions did not. These will either be enabled by new files in the F +directories, or new subdirectories and F files at the top level of the +source tree. -=item * Hash element deletion and destructors +=over 4 -When hash elements are deleted in void context, the internal hash entry is -now freed before the value is freed, to prevent destructors called by that -latter freeing from seeing the hash in an inconsistent state. It was -possible to cause double-frees if the destructor freed the hash itself -[perl #100340]. +=item XXX-some-platform -=item * C<(s)printf>'s %n formatting code +XXX -The %n formatting code, which causes the number of characters to be -assigned to the next argument to C or C now actually -assigns the number of characters, instead of the number of bytes. +=back -It also works now with special lvalue functions like C and with -nonexistent hash and array elements [perl #3471, #103492]. +=head2 Discontinued Platforms -=item * Typeglobs and threads +XXX List any platforms that this version of perl no longer compiles on. -Typeglobs returned from threads are no longer cloned if the parent thread -already has a glob with the same name. This means that returned -subroutines will now assign to the right package variables [perl #107366]. +=over 4 -=item * C +=item XXX-some-platform -In Perl 5.14, C was changed to create a new variable not tied to -anything, even if $_ was tied before that. But, due to an oversight, it -would still call FETCH once on a tied $_ before replacing it with the new -variable. This has been fixed [perl #105912]. +XXX -=item * Returning tied variables +=back -When returning a value from a non-lvalue subroutine, Perl copies the value. -Sometimes it cheats for the sake of speed, and does not copy the value if -it makes no observable difference. This optimisation was erroneously -allowing the copy to be skipped on tied variables, causing a difference in -behaviour depending on the tied variable's reference count. This has been -fixed [perl #95548]. +=head2 Platform-Specific Notes -=item * C<{@a = sort}> no longer crashes +XXX List any changes for specific platforms. This could include configuration +and compilation changes or changes in portability/compatibility. However, +changes within modules for platforms should generally be listed in the +L section. -This particular piece of code (C with no arguments assigned to an -array, inside a block with no C<;>) started crashing in an earlier 5.15.x -release. It has been fixed. +=over 4 -=item * C and read-only scalars +=item XXX-some-platform -C now refuses to modify read-only scalars [perl #91850]. +XXX -=item * C with undefined mode +=back -C now only warns once, rather than three times, if the mode -argument is C [perl #90064]. +=head1 Internal Changes -=item * Freeing an aggregate during list assignment +XXX Changes which affect the interface available to C code go here. +Other significant internal changes for future core maintainers should +be noted as well. -If list assignment to a hash or array triggered destructors that freed the -hash or array itself, a crash would ensue. This is no longer the case -[perl #107440]. +[ List each change as a =item entry ] -=item * Confused internal bookkeeping with @ISA arrays +=over 4 -Creating a weak reference to an @ISA array or accessing the array index -(C<$#ISA>) could result in confused internal bookkeeping for elements -subsequently added to the @ISA array. For instance, creating a weak -reference to the element itself could push that weak reference on to @ISA; -and elements added after use of C<$#ISA> would be ignored by method lookup -[perl #85670]. +=item * -=item * DELETE on scalar ties +XXX -Tying an element of %ENV or C<%^H> and then deleting that element would -result in a call to the tie object's DELETE method, even though tying the -element itself is supposed to be equivalent to tying a scalar (the element -is, of course, a scalar) [perl #67490]. +=back -=item * Freeing $_ inside C or C +=head1 Selected Bug Fixes -Freeing $_ inside a C or C block or a code block embedded in a -regular expression used to result in double frees [perl #92254, #92256]. +XXX Important bug fixes in the core language are summarised here. +Bug fixes in files in F and F are best summarised in +L. -=item * Warnings with C<+=> +[ List each fix as a =item entry ] -The C<+=> operator does not usually warn when the left-hand side is -C, but it was doing so for tied variables. This has been fixed -[perl #44895]. +=over 4 -=item * Tying and autovivification +=item * -When Perl autovivifies an element of a tied array or hash (which entails -calling STORE with a new reference), it now calls FETCH immediately after -the STORE, instead of assuming that FETCH would have returned the same -reference. This can make it easier to implement tied objects [perl #35865, #43011]. +C<~~> now correctly handles the precedence of Any~~Object, and is not tricked +by an overloaded object on the left-hand side. -=item * C<@&> and C<$&> +=item * -Mentioning a variable named "&" other than C<$&> (i.e., C<@&> or C<%&>) no -longer stops C<$&> from working. The same applies to variables named "'" -and "`" [perl #24237]. +C no longer warns about unopened filehandles [perl #71002]. -=item * Stacked filetests +=item * -C<-T> and C<-B> now work when stacked up with other filetest operators -[perl #77388]. +C on an unopened filehandle now warns consistently, instead of +skipping the warning at times. -=item * Filetests and stat buffers +=item * -Perl keeps several internal variables to keep track of the last stat -buffer, from which file(handle) it originated, what type it was, and -whether the last stat succeeded. +A change in an earlier 5.15 release caused warning hints to propagate into +C. This has been fixed [rt.cpan.org #72767]. -There were various cases where these could get out of synch, resulting in -inconsistent or erratic behaviour in edge cases (every mention of C<-T> -applies to C<-B> as well): +=item * -=over +Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up +after assigning C<${ qr// }> to a hash element and locking it with +L. This could result in double frees, crashes or erratic +behaviour. =item * -C<-T I>, even though it does a C, was not resetting the last -stat type, so an C following it would merrily return the wrong -results. Also, it was not setting the success status. +In 5.15.7, some typeglobs in the CORE namespace were made read-only by +mistake. This has been fixed [rt.cpan.org #74289]. =item * -Freeing the handle last used by C or a filetest could result in -S> using an unrelated handle. +C<-t> now works when stacked with other filetest operators [perl #77388]. =item * -C with an IO reference (as returned by C<*STDIO{IO}>, for instance) -would not reset the stat type. +Stacked filetest operators now only call FETCH once on a tied argument. =item * -C with an IO reference was not recording the filehandle for -S> to use. +C would sometimes refuse to match at the end of a string that ends +with "\n". This has been fixed [perl #109206]. =item * -The presence of fatal warnings could cause the stat buffer not to be reset -for a filetest operator on an unopened filehandle or C<-l> on any handle. +C and C now match identically (when not +under a differing locale). This fixes a regression introduced in 5.14 +in which the first expression could match characters outside of ASCII, +such as the KELVIN SIGN. =item * -Fatal warnings would stop C<-T> from setting C<$!>. +Method calls whose arguments were all surrounded with C or C +(as in C<<$object->method(my($a,$b)) >>) used to force lvalue context on +the subroutine. This would prevent lvalue methods from returning certain +values. Due to lvalue fixes earlier in the 5.15.x series, it would also +prevent non-lvalue methods from being called [perl #109264]. + +=for comment +This bug I affect earlier stable releases. It is just the last +sentence that does not apply to 5.14. =item * -When the last stat was on an unreadable file, C<-T _> is supposed to -return C, leaving the last stat buffer unchanged. But it was -setting the stat type, causing C to stop working. +The C C function no longer tries to modify its argument, +resulting in errors [perl #108994]. =item * -C<-T I> was not resetting the internal stat buffers for -unreadable files. +C now works properly with magical variables. -=back +=item * -These have all been fixed. +C now works properly non-PVs. -=item * C +=item * -An earlier 5.15.x release caused this construct to stop the C<%!> hash -from working. Likewise C and C caused -C<%+> and C<%->, respectively, to stop working. This has been fixed. +C and C now use locale rules under +C when the platform supports that. Previously, they used +the platform's native character set. -=item * C<-T _> with no preceding C +=item * -This used to produce a confusing "uninitialized" warning, even though there -is no visible uninitialized value to speak of. +A regression introduced in 5.13.6 was fixed. This involved an inverted +bracketed character class in a regular expression that consisted solely +of a Unicode property, that property wasn't getting inverted outside the +Latin1 range. -=item * C> and fstat failures +=item * -If the operating system's C function failed, C would warn -about an unopened handle, even though that was not the case. This has been -fixed. +C now quotes consistently the same non-ASCII characters under +C, regardless of whether the string is +encoded in UTF-8 or not, hence fixing the last vestiges (we hope) of the +infamous L. [perl #77654]. -=item * C> +Which of these code points is quoted has changed, based on Unicode's +recommendations. See L for details. -C is documented to fall back to C (with a warning) when given -a filehandle. When passed an IO reference, it was actually doing the -equivalent of S> and ignoring the handle. +=back -=item * Crashes with warnings +=head1 Known Problems -Two warning messages that mention variable names started crashing in -5.15.5, but have been fixed [perl #106726, #107656]. +XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any +tests that had to be Ced for the release would be noted here, unless +they were specific to a particular platform (see below). -=item * Bitwise assignment operators and copy-on-write +This is a list of some significant unfixed bugs, which are regressions +from either 5.XXX.XXX or 5.XXX.XXX. -In 5.14.0, the bitwise assignment operators C<|=>, C<^=> and C<&=> started -leaving the left-hand side undefined if it happened to be a copy-on-write -string. This has been fixed [perl #108480]. +[ List each fix as a =item entry ] -=item * Three problematic Unicode characters now work better in regex pattern matching under C +=over 4 -In the past, three Unicode characters: -LATIN SMALL LETTER SHARP S, -GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS, -and -GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS, -along with the sequences that they fold to -(including "ss" in the case of LATIN SMALL LETTER SHARP S), -did not properly match under C. 5.14.0 fixed some of these cases, -but introduced others, including a panic when one of the characters or -sequences was used in the C<(?(DEFINE)> regular expression predicate. -The known bugs that were introduced in 5.14 have now been fixed; as well -as some other edge cases that have never worked until now. All these -involve using the characters and sequences outside bracketed character -classes under C. This closes [perl #98546]. +=item * -There remain known problems when using certain characters with -multi-character folds inside bracketed character classes, including such -constructs as C. These -remaining bugs are addressed in [perl #89774]. +XXX =back +=head1 Obituary + +XXX If any significant core contributor has died, we've added a short obituary +here. + =head1 Acknowledgements -Perl 5.15.7 represents approximately 4 weeks of development since Perl 5.15.6 -and contains approximately 51,000 lines of changes across 480 files from 30 -authors. - -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.15.7: - -Alberto Simões, Bo Lindbergh, Brian Fraser, Chris 'BinGOs' Williams, Craig A. -Berry, Dave Rolsky, David Mitchell, Eric Brine, Father Chrysostomos, Florian -Ragwitz, H.Merijn Brand, Hojung Youn, James E Keenan, Joel Berger, Joshua ben -Jore, Karl Williamson, Leon Timmermans, Matthew Horsfall, Michael Witten, -Nicholas Clark, Reini Urban, Ricardo Signes, Shlomi Fish, Steffen Müller, -Steffen Schwigon, Todd Rinaldo, Tom Christiansen, Tom Hukins, Tony Cook, Ævar -Arnfjörð Bjarmason. - -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. - -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. - -For a more complete list of all of Perl's historical contributors, please see -the F file in the Perl source distribution. +XXX Generate this with: + + perl Porting/acknowledgements.pl v5.15.7..HEAD =head1 Reporting Bugs