X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/ce6b844f14369920da04406f5366b964688cbb16..ecd144ea20ec1f11b687fbb5cffab0332e8c56fc:/pod/perldelta.pod diff --git a/pod/perldelta.pod b/pod/perldelta.pod index f980613..9c224eb 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 eb96f3fadee, 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,38 @@ 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}> +=head2 Improved ability to mix locales and Unicode, including UTF-8 locales -The C module is now automatically loaded when needed as if -the C<:full> and C<:short> options had been specified. See -L. +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<%>. =head1 Security @@ -58,25 +84,32 @@ 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 -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. +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]. -[ List each deprecation as a =head2 entry ] +=head2 The C pragma and regexp objects -=head2 Deprecated Modules +With C, regular expression objects returned by C are +now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular +expression itself [perl #108780]. -=over +=head2 Two XS typemap Entries removed -=item L +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. -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. +=head1 Deprecations -=back +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 ] =head1 Performance Enhancements @@ -89,8 +122,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 @@ -122,122 +154,74 @@ XXX =item * -L has been upgraded from version 1.10 to version 1.11. - -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. +L has been upgraded from version 1.33 to version 1.34. -The C regular expression flags are no longer omitted. - -Feature hints are now deparsed with C rather than C<%^H> -assignments. - -A regression in 1.10 that caused C to disabled strict mode -in obscure cases has been fixed. - -Strict mode is now fully deparsed, including subs and vars [perl #24027]. - -The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces -(i.e., C<${(}>) in regular expressions [perl #86060]. +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 3.58 to version 3.59. - -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.045 to version 2.048. =item * -L has been upgraded from version 2.112621 to version 2.113640. - -Version::Requirements has now been merged as CPAN::Meta::Requirements. +L has been upgraded from version 2.045 to version 2.048. =item * -L has been upgraded from version 0.9113 to version 0.9116. +L has been upgraded from version 2.046 to version 2.048. =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 1.824 to version 1.826. =item * -L has been upgraded from version 2.135_01 to version -2.135_03. - -It can now dump vstrings [perl #101162]. +L has been upgraded from version 1.27 to version 1.28. -The nameless typeglob (C<*{""}>) is now dumped properly. +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.26 to version 1.27. +L has been upgraded from version 3.12 to version 3.15. -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. +The new version comes with important tools for sharing typemaps between +different CPAN distributions. =item * -L has been upgraded from version 3.9 to version 4.0. +L has been upgraded from version 0.72 to version 0.76. =item * -L has been upgraded from version 1.27 to version 1.28. +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]. +This avoids a new core warning. =item * -L has been upgraded from version 0.26 to version 0.30. +L has been upgraded from version 1.37 to version 1.51. =item * -L has been upgraded from version 0.96 to version 0.98. +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.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.9724 to version 1.9725. + +C no longer corrupts the Perl stack. =item * -L has been upgraded from version 0.101020 to version 0.101021. +L has been upgraded from version 0.39 to 0.40. -Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements, -which is a drop-in replacement. +The only change is to fix a formatting error in the Pod. =back @@ -260,6 +244,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 @@ -307,17 +297,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 @@ -352,35 +332,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 @@ -397,11 +355,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 @@ -419,11 +373,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 @@ -488,26 +443,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 @@ -521,162 +457,61 @@ 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 * C and numbers - -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 * Lvalue subs and strict mode - -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 * Non-lvalue sub calls in potentially lvalue context - -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]. - -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. - -=item * AUTOLOADing lvalue subs - -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. - -=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. +C<~~> now correctly handles the precedence of Any~~Object, and is not tricked +by an overloaded object on the left-hand side. -=item * Tying C<@_> +=item * -Under debugging builds, this code: +C no longer warns about unopened filehandles [perl #71002]. - sub TIEARRAY{bless[]} - sub { - tie @_, ""; - \@_; - }->(1); +=item * -use to produce an "av_reify called on tied array" warning. It doesn't any -more. +C on an unopened filehandle now warns consistently, instead of +skipping the warning at times. -=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...". +A change in an earlier 5.15 release caused warning hints to propagate into +C. This has been fixed [rt.cpan.org #72767]. -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]. +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 SIGCHLD +=item * -C now temporarily blocks the SIGCHLD signal handler, to prevent the -signal handler from stealing the exit status [perl #105700]. +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 * Deleting methods via C +=item * -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. +C<-t> now works when stacked with other filetest operators [perl #77388]. -=item * Hash element deletion and destructors +=item * -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]. +Stacked filetest operators now only call FETCH once on a tied argument. -=item * C<(s)printf>'s %n formatting code +=item * -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. +C would sometimes refuse to match at the end of a string that ends +with "\n". This has been fixed [perl #109206]. -It also works now with special lvalue functions like C and with -nonexistent hash and array elements [perl #103492]. +=item * -=item * Typeglobs and threads +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]. -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]. +=for comment +This bug I affect earlier stable releases. It is just the last +sentence that does not apply to 5.14. =back @@ -708,7 +543,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