X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/ac8fb82cde5d19c3e2d783e97832e6d58855a23c..1722e378f962c2c0bd9735fe63e69fa95671f5e2:/pod/perldelta.pod?ds=sidebyside diff --git a/pod/perldelta.pod b/pod/perldelta.pod index daeafc8..07a684a 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -1,26 +1,25 @@ =encoding utf8 =for comment -This has been completed up to 9ac8a16, 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 [ 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.7 +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 @@ -34,11 +33,108 @@ here, but most should go in the L section. [ List each enhancement as a =head2 entry ] -=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 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 @@ -48,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: @@ -58,6 +161,40 @@ XXX For a release on a stable branch, this section aspires to be: [ List each incompatible change as a =head2 entry ] +=head2 Special blocks called in void context + +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]. + +=head2 The C pragma and regexp objects + +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 + +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. @@ -66,17 +203,11 @@ listed as an updated module in the L section. [ List each deprecation as a =head2 entry ] -=head2 Deprecated Modules - -=over +=head2 C -=item L - -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. - -=back +This function is deprecated because it could read beyond the end of the +input string. Use the new L +instead. =head1 Performance Enhancements @@ -89,8 +220,7 @@ may well be none in a stable release. =item * -Version declarations with the C keyword (e.g., C) are now -faster, as they enable features without loading F. +XXX =back @@ -112,7 +242,8 @@ cribbed. =item * -XXX +The C PerlIO layer is no longer implemented by perl itself, but has +been moved out into the new L module. =back @@ -122,118 +253,128 @@ XXX =item * -L has been upgraded from version 1.10 to version 1.11. +L has been upgraded from version 0.03 to version 0.04. -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]. +List slices no longer modify items on the stack belonging to outer lists +[perl #109570]. -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. +=item * -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. +L has been upgraded from version 1.33 to version 1.34. -B::Deparse no longer hangs when deparsing a program with stash -circularities, such as C [perl #91384]. +C now has a C method, corresponding to a new internal +field added in 5.15.4 [perl #108860]. -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. +=item * -The C regular expression flags are no longer omitted. +L has been upgraded from version 1.24 to version 1.25. -Feature hints are now deparsed with C rather than C<%^H> -assignments. +It now puts a dot after the file and line number, just like errors from +C [perl #106538]. -A regression in 1.10 that caused C to disabled strict mode -in obscure cases has been fixed. +=item * -Strict mode is now fully deparsed, including subs and vars [perl #24027]. +L has been upgraded from version 2.045 to version 2.048. -The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces -(i.e., C<${(}>) in regular expressions [perl #86060]. +=item * + +L has been upgraded from version 2.045 to version 2.048. =item * -L has been upgraded from version 3.58 to version 3.59. +L has been upgraded from version 2.046 to version 2.048. + +=item * -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. +L has been upgraded from version 2.113640 to version 2.120351. + +Work around a memory leak bug involving version objects in boolean context. =item * -L has been upgraded from version 2.112621 to version 2.113640. +L has been upgraded from version 0.005 to version 0.007. + +=item * -Version::Requirements has now been merged as CPAN::Meta::Requirements. +L has been upgraded from version 1.824 to version 1.826. =item * -L has been upgraded from version 0.9113 to version 0.9115. +L has been upgraded from version 1.27 to version 1.28. + +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 1.28 to version 1.29. -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. +L has been upgraded from version 3.12 to version 3.15. + +The new version comes with important tools for sharing typemaps between +different CPAN distributions. =item * -L has been upgraded from version 2.135_01 to version -2.135_03. +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]. -It can now dump vstrings [perl #101162]. +=item * -The nameless typeglob (C<*{""}>) is now dumped properly. +L has been upgraded from version 0.72 to version 0.76. =item * -L has been upgraded from version 1.26 to version 1.27. +L has been upgraded from version 1.58 to version 1.59. -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. +This avoids a new core warning. =item * -L has been upgraded from version 1.27 to version 1.28. +L has been upgraded from version 1.000007 to version 1.000009. -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]. +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.26 to version 0.30. +L has been upgraded from version 1.4401 to version 1.4402. =item * -L has been upgraded from version 0.96 to version 0.98. +L has been upgraded from version 1.37 to version 1.51. =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.07 to version 1.08. + +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 * -L has been upgraded from version 0.101020 to version 0.101021. +L has been upgraded from version 1.9724 to version 1.9725. + +C no longer corrupts the Perl stack. + +=item * -Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements, -which is a drop-in replacement. +L has been upgraded from version 0.39 to 0.40. + +The only change is to fix a formatting error in the Pod. + +=item * + +L has been upgraded from version 0.101021 to version 0.101022. + +=item * + +L has been upgraded from version 1.28 to version 1.29.. + +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. =back @@ -256,6 +397,12 @@ file and be sure to link to the appropriate page, e.g. L. XXX Changes which create B files in F go here. +=head3 L + +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. + =head3 L XXX Description of the purpose of the new file here @@ -303,17 +450,7 @@ XXX Newly added diagnostic messages go here =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 L =back @@ -348,35 +485,13 @@ here. Most of these are built within the directories F and F. entries for each change Use L with program names to get proper documentation linking. ] -=head3 L +=head3 L =over 4 =item * -splain no longer emits backtraces with the first line number repeated. -This: - - 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 - -has become this: - - 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 - -=item * - -Some error message 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 =back @@ -393,11 +508,7 @@ L section, instead. =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 =back @@ -415,11 +526,12 @@ that they represent may be covered elsewhere. =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 + +=item * + +The test suite for typemaps has been extended to cover a larger fraction of +the core typemaps. =back @@ -484,26 +596,7 @@ be noted as well. =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. - -=item * - -F is now a generated file, created by the new -F script, which also generates F. - -=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 =back @@ -517,162 +610,87 @@ L. =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 - -The C XS function now works on tied hashes, instead of crashing or -returning an empty hash. - -=item * Hashes will null elements - -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. - -=item * No warning for C - -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 as well. This has been -corrected. - -=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. - -=item * C and tied variables - -C no longer ignores FETCH on tied variables as it used -to most of the time [perl #97956]. +=item * -=item * C and numbers +C<~~> now correctly handles the precedence of Any~~Object, and is not tricked +by an overloaded object on the left-hand side. -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). +=item * -=item * Lvalue subs and strict mode +C no longer warns about unopened filehandles [perl #71002]. -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 +C on an unopened filehandle now warns consistently, instead of +skipping the warning at times. -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]. +=item * -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. +A change in an earlier 5.15 release caused warning hints to propagate into +C. This has been fixed [rt.cpan.org #72767]. -=item * AUTOLOADing lvalue subs +=item * -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. +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 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. +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 * Tying C<@_> +=item * -Under debugging builds, this code: +C<-t> now works when stacked with other filetest operators [perl #77388]. - sub TIEARRAY{bless[]} - sub { - tie @_, ""; - \@_; - }->(1); +=item * -use to produce an "av_reify called on tied array" warning. It doesn't any -more. +Stacked filetest operators now only call FETCH once on a tied argument. -=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...". +C would sometimes refuse to match at the end of a string that ends +with "\n". This has been fixed [perl #109206]. -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. +=item * -Now it produces the "Unrecognized switch" error message [perl #104288]. +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 and SIGCHLD +=item * -C now temporarily blocks the SIGCHLD signal handler, to prevent the -signal handler from stealing the exit status [perl #105700]. +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]. -=item * Deleting methods via C +=for comment +This bug I affect earlier stable releases. It is just the last +sentence that does not apply to 5.14. -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. +=item * -=item * Hash element deletion and destructors +The C C function no longer tries to modify its argument, +resulting in errors [perl #108994]. -When hash elements are deleted in void context, the internal hash entry is -now freed before the value is freed, to prevent destructors call 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 * -=item * C<(s)printf>'s %n formatting code +C now works properly with magical variables. -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 * -It also works now with special lvalue functions like C and with -nonexistent hash and array elements [perl #103492]. +C now works properly non-PVs. -=item * Typeglobs and threads +=item * -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]. +C and C now use locale rules under +C when the platform supports that. Previously, they used +the platform's native character set. =back @@ -704,7 +722,7 @@ here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.15.6..HEAD + perl Porting/acknowledgements.pl v5.15.7..HEAD =head1 Reporting Bugs