X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/329d453aed974070d8cc031fdb6e31b1c1ae29ae..1722e378f962c2c0bd9735fe63e69fa95671f5e2:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index d34f8e4..07a684a 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,23 +1,25 @@ =encoding utf8 =for comment -This has been completed up to 1a50d74bac4, except for: -8629c11317 smueller Escape double-quotes in generated #line directives -8dc67a69b shlomif perl -d: display lines inside subroutines. -3dfd1b5cd2 leont Export PerlIOBase_open +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 Notice @@ -25,31 +27,114 @@ XXX Any important notices here =head1 Core Enhancements -=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 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. +One of these is that the preferred name (which is what C +returns) for the character at U+2118 has been changed from SCRIPT CAPITAL P +to WEIERSTRASS ELLIPTIC FUNCTION. 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. + +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. This means that all the names that Perl had previously +deprecated (except BELL) are no longer deprecated, such as FILE +SEPARATOR. Also, the names for four rarely used characters are subtly +different (a hyphen instead of a space) than before: + + Code point Old Name New Name + 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 + +Perl will accept either name as input, but C now +returns the new name. + +Additional name abbreviations are accepted: +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 @@ -59,6 +144,13 @@ 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: @@ -69,33 +161,66 @@ XXX For a release on a stable branch, this section aspires to be: [ List each incompatible change as a =head2 entry ] -=head1 Deprecations +=head2 Special blocks called in void context -=head2 Deprecated Modules +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]. -=over +=head2 The C pragma and regexp objects -=item L +With C, regular expression objects returned by C are +now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular +expression itself [perl #108780]. -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. +=head2 Two XS typemap Entries removed -=back +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. + +=head2 Unicode 6.1 has incompatibilities with Unicode 6.0 + +These are detailed in L above. + +=head2 Changed returns for some properties in C + +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. + +This function was introduced earlier in the v5.15 series of releases, +and the API will not be considered stable until v5.16. + +See L for details on the new interface. + +=head1 Deprecations + +XXX Any deprecated features, syntax, modules etc. should be listed here. +In particular, deprecated modules should be listed here even if they are +listed as an updated module in the L section. + +[ List each deprecation as a =head2 entry ] + +=head2 C + +This function is deprecated because it could read beyond the end of the +input string. Use the new L +instead. =head1 Performance Enhancements -=over 4 +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 ] -Version declarations with the C keyword (e.g., C) are now -faster, as they enable features without loading F. +=over 4 =item * -C is faster now, as it no longer iterates through magic that it -is not going to copy anyway. +XXX =back @@ -111,768 +236,493 @@ cribbed. [ Within each section, list entries as a =item entry ] -=head2 Updated Modules and Pragmata +=head2 New Modules and Pragmata =over 4 =item * -L has been upgraded from version 1.10 to version 1.11. +The C PerlIO layer is no longer implemented by perl itself, but has +been moved out into the new L module. -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]. - -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. - -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. - -B::Deparse no longer hangs when deparsing a program with stash -circularities, such as C [perl #91384]. - -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 C regular expression flags are no longer omitted. +=back -Feature hints are now deparsed with C rather than C<%^H> -assignments. +=head2 Updated Modules and Pragmata -A regression in 1.10 that caused C to disable strict mode -in obscure cases has been fixed. +=over 4 -Strict mode is now fully deparsed, including subs and vars [perl #24027]. +=item * -The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces -(i.e., C<${(}>) in regular expressions [perl #86060]. +L has been upgraded from version 0.03 to version 0.04. -C blocks after C loops are now deparsed correctly, as they -were back in 0.67 (included with Perl 5.8.5) [perl #108224] +List slices no longer modify items on the stack belonging to outer lists +[perl #109570]. =item * -L has been upgraded from version 3.58 to version 3.59. +L has been upgraded from version 1.33 to version 1.34. -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. +C now has a C method, corresponding to a new internal +field added in 5.15.4 [perl #108860]. =item * -L has been upgraded from version 2.112621 to version 2.113640. +L has been upgraded from version 1.24 to version 1.25. -Version::Requirements has now been merged as CPAN::Meta::Requirements. +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 0.9113 to version 0.9116. +L has been upgraded from version 2.045 to version 2.048. =item * -L has been upgraded from version 2.135_01 to version -2.135_03. - -It can now dump vstrings [perl #101162]. - -The nameless typeglob (C<*{""}>) is now dumped properly. +L has been upgraded from version 2.045 to version 2.048. =item * -L has been upgraded from version 1.26 to version 1.27. - -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. +L has been upgraded from version 2.046 to version 2.048. =item * -L has been upgraded from version 1.45 to version 1.46. +L has been upgraded from version 2.113640 to version 2.120351. -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]. +Work around a memory leak bug involving version objects in boolean context. =item * -L has been upgraded from version 1.21 to version 1.22. +L has been upgraded from version 0.005 to version 0.007. =item * -L has been upgraded from version 3.9 to version 4.0. +L has been upgraded from version 1.824 to version 1.826. =item * -L has been upgraded from version 1.16 to version 1.17. - -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]. - -A warning is now produced for invalid arguments. See L. - -=item * +L has been upgraded from version 1.27 to version 1.28. -L has been upgraded from version 5.0150036 to version 5.0150038. +When searching for F, it no longer uses paths that were only +relevant on Perl 5.004 and earlier. =item * -L has been upgraded from version 0.12 to version 0.13. +L has been upgraded from version 3.12 to version 3.15. -(This is the module that implements C<< open $fh, '>', \$scalar >>.) +The new version comes with important tools for sharing typemaps between +different CPAN distributions. -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]. +=item * -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. +L has been upgraded from version 2.21 to version 2.23. -Printing to an in-memory handle no longer crashes if the $scalar happens to -hold a number internally, but no string buffer. +It no longer emits warnings when copying files with newlines in their names +[perl #109104]. =item * -L has been upgraded from version 1.12 to 1.13 +L has been upgraded from version 0.72 to version 0.76. =item * -L has been upgraded from version 1.27 to version 1.29. +L has been upgraded from version 1.58 to version 1.59. -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. +This avoids a new core warning. =item * -L has been upgraded from version 3.15_01 to version 3.15_15. - -=item * +L has been upgraded from version 1.000007 to version 1.000009. -L has been upgraded from version 0.26 to version 0.30. +Adds C method to generate a CPAN META provides data structure +correctly; use of C is discouraged. =item * -L has been upgraded from version 0.96 to version 0.98. +L has been upgraded from version 1.4401 to version 1.4402. =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.37 to version 1.51. =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 - -=head1 Documentation +L has been upgraded from version 1.07 to version 1.08. -=head2 Changes to Existing Documentation - -=head3 L - -=over 4 +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]. =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 1.9724 to version 1.9725. + +C no longer corrupts the Perl stack. =item * -The entry for C has been rewritten. It is now far clearer than -before. +L has been upgraded from version 0.39 to 0.40. -=back - -=head3 L and L - -=over 4 +The only change is to fix a formatting error in the Pod. =item * -Documentation of the smartmatch operator has been reworked and moved from -perlsyn to perlop where it belongs. +L has been upgraded from version 0.101021 to version 0.101022. =item * -Documentation of the ellipsis statement (C<...>) has been reworked and -moved from perlop to perlsyn. - -=back - -=head1 Diagnostics +L has been upgraded from version 1.28 to version 1.29.. -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. +It now has a wrapper for the C function, it's not +exported on C due to backwards compatibility concerns, it +has to be explicitly requested with C. -=head2 New Diagnostics +=back -=head3 New Errors +=head2 Removed Modules and Pragmata =over 4 =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. - -=item * - -L - -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. +XXX =back -=head3 New Warnings - -=over 4 - -=item * +=head1 Documentation -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. -The long-deprecated C now also warns for package variables. -Previously it only issued a warning for lexical variables. +=head2 New Documentation -=item * +XXX Changes which create B files in F go here. -L +=head3 L -C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>. +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. -=item * +=head3 L -L +XXX Description of the purpose of the new file here -This warning, in the "overload" category, is produced when the overload -pragma is given an argument it doesn't recognize, presumably a mistyped -operator. +=head2 Changes to Existing Documentation -=back +XXX Changes which significantly change existing files in F go here. +However, any changes to F should go in the L +section. -=head2 Removals +=head3 L =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 Description of the change here =back -=head1 Utility Changes - -=head3 L - -=over 4 +=head1 Diagnostics -=item * +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. -splain no longer emits backtraces with the first line number repeated. -This: +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. - 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 +[ Within each section, list entries as a =item entry that links to perldiag, + e.g. -has become this: + =item * - 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 + L +] -=item * - -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. +=head2 New Diagnostics -=back +XXX Newly added diagnostic messages go here -=head1 Configuration and Compilation +=head3 New Errors =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 L =back -=head1 Testing +=head3 New Warnings =over 4 =item * -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. +XXX L =back -=head1 Internal Changes - -=over 4 - -=item * - -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. - -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. +=head2 Changes to Existing Diagnostics -=item * +XXX Changes (i.e. rewording) of diagnostic messages go here -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 Describe change here =back -=head1 Selected Bug Fixes - -=over 4 - -=item * "b . COND" in the debugger has been fixed - -Breaking on the current line with C was broken by previous work and -has now been fixed. - -=item * Tying C<%^H> - -Tying C<%^H> no longer causes perl to crash or ignore -the contents of C<%^H> when entering a compilation -scope [perl #106282]. - -=item * C<~> on vstrings - -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]. - -=item * Vstrings blowing away magic - -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. - -=item * C and tied hashes +=head1 Utility Changes -The C XS function now works on tied hashes, instead of crashing or -returning an empty hash. +XXX Changes to installed programs such as F and F go +here. Most of these are built within the directories F and F. -=item * Hashes will null elements +[ 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. ] -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. +=head3 L -=item * No warning for C +=over 4 -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. +=item * -=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. +=back -=item * C and tied variables +=head1 Configuration and Compilation -C no longer ignores FETCH on tied variables as it used -to most of the time [perl #97956]. +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. -=item * C and numbers +[ List changes as a =item entry ]. -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). +=over 4 -=item * Lvalue subs and strict mode +=item * -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]. +XXX -=item * Non-lvalue sub calls in potentially lvalue context +=back -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]. +=head1 Testing -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. +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. -=item * AUTOLOADing lvalue subs +[ List each test improvement as a =item entry ] -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. +=over 4 -=item * C and tied C<@DB::args> +=item * -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. +XXX -=item * Tying C<@_> +=item * -Under debugging builds, this code: +The test suite for typemaps has been extended to cover a larger fraction of +the core typemaps. - sub TIEARRAY{bless[]} - sub { - tie @_, ""; - \@_; - }->(1); +=back -use to produce an "av_reify called on tied array" warning. It doesn't any -more. +=head1 Platform Support -=item * Unrecognised switches on C<#!> line +XXX Any changes to platform support should be listed in the sections below. -If a switch, such as B<-x>, that cannot occur on the C<#!> line is used -there, perl dies with "Can't emulate...". +[ Within the sections, list each platform as a =item entry with specific +changes as paragraphs below it. ] -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. +=head2 New Platforms -Now it produces the "Unrecognized switch" error message [perl #104288]. +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 * C and SIGCHLD +=over 4 -C now temporarily blocks the SIGCHLD signal handler, to prevent the -signal handler from stealing the exit status [perl #105700]. +=item XXX-some-platform -=item * Deleting methods via C +XXX -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. +=back -=item * Hash element deletion and destructors +=head2 Discontinued Platforms -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]. +XXX List any platforms that this version of perl no longer compiles on. -=item * C<(s)printf>'s %n formatting code +=over 4 -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. +=item XXX-some-platform -It also works now with special lvalue functions like C and with -nonexistent hash and array elements [perl #103492]. +XXX -=item * Typeglobs and threads +=back -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]. +=head2 Platform-Specific Notes -=item * C +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. -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]. +=over 4 -=item * Returning tied variables +=item XXX-some-platform -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]. +XXX -=item * C<{@a = sort}> no longer crashes +=back -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. +=head1 Internal Changes -=item * C and read-only scalars +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. -C now refuses to modify read-only scalars [perl #91850]. +[ List each change as a =item entry ] -=item * C with undefined mode +=over 4 -C now only warns once, rather than three times, if the mode -argument is C [perl #90064]. +=item * -=item * Freeing an aggregate during list assignment +XXX -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]. +=back -=item * Confused internal bookkeeping with @ISA arrays +=head1 Selected Bug Fixes -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]. +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 * DELETE on scalar ties +[ List each fix as a =item entry ] -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]. +=over 4 -=item * Freeing $_ inside C or C +=item * -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]. +C<~~> now correctly handles the precedence of Any~~Object, and is not tricked +by an overloaded object on the left-hand side. -=item * Warnings with C<+=> +=item * -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]. +C no longer warns about unopened filehandles [perl #71002]. -=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 on an unopened filehandle now warns consistently, instead of +skipping the warning at times. -=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]. +A change in an earlier 5.15 release caused warning hints to propagate into +C. This has been fixed [rt.cpan.org #72767]. -=item * Stacked filetests +=item * -C<-T> and C<-B> now work when stacked up with other filetest operators -[perl #77388]. +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 * 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. +In 5.15.7, some typeglobs in the CORE namespace were made read-only by +mistake. This has been fixed [rt.cpan.org #74289]. -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 +C<-t> now works when stacked with other filetest operators [perl #77388]. =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. +Stacked filetest operators now only call FETCH once on a tied argument. =item * -Freeing the handle last used by C or a filetest could result in -S> using an unrelated handle. +C would sometimes refuse to match at the end of a string that ends +with "\n". This has been fixed [perl #109206]. =item * -C with an IO reference (as returned by C<*STDIO{IO}>, for instance) -would not reset the stat type. +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 * -C with an IO reference was not recording the filehandle for -S> to use. +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 * -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. +The C C function no longer tries to modify its argument, +resulting in errors [perl #108994]. =item * -Fatal warnings would stop C<-T> from setting C<$!>. +C now works properly with magical variables. =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. +C now works properly non-PVs. =item * -C<-T I> was not resetting the internal stat buffers for -unreadable files. +C and C now use locale rules under +C when the platform supports that. Previously, they used +the platform's native character set. =back -These have all been fixed. - -=item * C - -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. - -=item * C<-T _> with no preceding C - -This used to produce a confusing "uninitialized" warning, even though there -is no visible uninitialized value to speak of. +=head1 Known Problems -=item * C> and fstat failures +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). -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. +This is a list of some significant unfixed bugs, which are regressions +from either 5.XXX.XXX or 5.XXX.XXX. -=item * C> +[ List each fix as a =item entry ] -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. - -=item * Crashes with warnings - -Two warning messages that mention variable names started crashing in -5.15.5, but have been fixed [perl #106726, #107656]. - -=item * Bitwise assignment operators and copy-on-write - -In 5.14.0, the bitwise assignment operators C<|=>, C<^=> and C<&=> starting -leaving the left-hand side undefined if it happened to be a copy-on-write -string. This has been fixed [perl #108480]. +=over 4 -=item * Three problematic Unicode characters now work better in regex pattern matching under C +=item * -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. 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 Acknowledgements - -Perl 5.15.7 represents approximately 4 weeks of development since Perl 5.15.6 -and contains approximately 50,000 lines of changes across 470 files from 28 -authors. +=head1 Obituary -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: +XXX If any significant core contributor has died, we've added a short obituary +here. -Alberto Simões, 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, -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. +=head1 Acknowledgements -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. +XXX Generate this with: -For a more complete list of all of Perl's historical contributors, please see -the F file in the Perl source distribution. + perl Porting/acknowledgements.pl v5.15.7..HEAD =head1 Reporting Bugs