diff options
-rw-r--r-- | MANIFEST | 1 | ||||
-rwxr-xr-x | Makefile.SH | 6 | ||||
-rw-r--r-- | pod/.gitignore | 2 | ||||
-rw-r--r-- | pod/perl.pod | 1 | ||||
-rw-r--r-- | pod/perl5157delta.pod | 890 | ||||
-rw-r--r-- | pod/perldelta.pod | 840 | ||||
-rw-r--r-- | vms/descrip_mms.template | 2 | ||||
-rw-r--r-- | win32/Makefile | 4 | ||||
-rw-r--r-- | win32/makefile.mk | 4 | ||||
-rw-r--r-- | win32/pod.mak | 4 |
10 files changed, 1078 insertions, 676 deletions
@@ -4613,6 +4613,7 @@ pod/perl5153delta.pod Perl changes in version 5.15.3 pod/perl5154delta.pod Perl changes in version 5.15.4 pod/perl5155delta.pod Perl changes in version 5.15.5 pod/perl5156delta.pod Perl changes in version 5.15.6 +pod/perl5157delta.pod Perl changes in version 5.15.7 pod/perl561delta.pod Perl changes in version 5.6.1 pod/perl56delta.pod Perl changes in version 5.6 pod/perl581delta.pod Perl changes in version 5.8.1 diff --git a/Makefile.SH b/Makefile.SH index c8a233b63f..4de5de962d 100755 --- a/Makefile.SH +++ b/Makefile.SH @@ -479,7 +479,7 @@ mini_obj = $(minindt_obj) $(MINIDTRACE_O) ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS) obj = $(ndt_obj) $(DTRACE_O) -perltoc_pod_prereqs = extra.pods pod/perl5157delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod +perltoc_pod_prereqs = extra.pods pod/perl5158delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -1055,8 +1055,8 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) $(Icwd) pod/perlmodlib.PL -q -pod/perl5157delta.pod: pod/perldelta.pod - $(LNS) perldelta.pod pod/perl5157delta.pod +pod/perl5158delta.pod: pod/perldelta.pod + $(LNS) perldelta.pod pod/perl5158delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` diff --git a/pod/.gitignore b/pod/.gitignore index c4bebd1aa5..c65a86b703 100644 --- a/pod/.gitignore +++ b/pod/.gitignore @@ -59,7 +59,7 @@ /roffitall # generated -/perl5157delta.pod +/perl5158delta.pod /perlapi.pod /perlintern.pod *.html diff --git a/pod/perl.pod b/pod/perl.pod index d199d6ee5b..1ea83d8871 100644 --- a/pod/perl.pod +++ b/pod/perl.pod @@ -177,6 +177,7 @@ aux a2p c2ph h2ph h2xs perlbug pl2pm pod2html pod2man s2p splain xsubpp perlhist Perl history records perldelta Perl changes since previous version + perl5157delta Perl changes in version 5.15.7 perl5156delta Perl changes in version 5.15.6 perl5155delta Perl changes in version 5.15.5 perl5154delta Perl changes in version 5.15.4 diff --git a/pod/perl5157delta.pod b/pod/perl5157delta.pod new file mode 100644 index 0000000000..aa6f3e7cb6 --- /dev/null +++ b/pod/perl5157delta.pod @@ -0,0 +1,890 @@ +=encoding utf8 + +=head1 NAME + +perl5157delta - what is new for perl v5.15.7 + +=head1 DESCRIPTION + +This document describes differences between the 5.15.6 release and +the 5.15.7 release. + +If you are upgrading from an earlier release such as 5.15.5, first read +L<perl5156delta>, which describes differences between 5.15.5 and +5.15.6. + +=head1 Core Enhancements + +=head2 C<use charnames> no longer needed for C<\N{I<name>}> + +The C<charnames> module is now automatically loaded when needed as if +the C<:full> and C<:short> options had been specified. See +L<charnames>. + +=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<qr/\p{foo}abc\p{foo}/> +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. + +=head1 Deprecations + +=head2 Deprecated Modules + +=over + +=item L<Version::Requirements> + +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 + +=head1 Performance Enhancements + +=over 4 + +=item * + +Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now +faster, as they enable features without loading F<feature.pm>. + +=item * + +C<local $_> is faster now, as it no longer iterates through magic that it +is not going to copy anyway. + +=back + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L<B::Deparse> has been upgraded from version 1.10 to version 1.11. + +It now deparses C<open('random string')> 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<BEGIN { *Acme::Acme:: = *Acme:: }> [perl #91384]. + +C</$s[1]/> used to be deparsed as C<$s[1]> if @s were a lexical variable +[perl #81424]. Similarly, C</$#s/> would be deparsed as C<$#s> for both +lexical and package variables. These has been fixed. + +The C</applaud> regular expression flags are no longer omitted. + +Feature hints are now deparsed with C<use feature> rather than C<%^H> +assignments. + +A regression in 1.10 that caused C<ambient_pragmas> to disable 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<continue> blocks after C<for> loops are now deparsed correctly, as they +were back in 0.67 (included with Perl 5.8.5) [perl #108224] + +=item * + +L<CGI> 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. + +=item * + +L<CPAN::Meta> has been upgraded from version 2.112621 to version 2.113640. + +Version::Requirements has now been merged as CPAN::Meta::Requirements. + +=item * + +L<CPANPLUS> has been upgraded from version 0.9113 to version 0.9116. + +=item * + +L<Data::Dumper> 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. + +=item * + +L<diagnostics> has been upgraded from version 1.26 to version 1.27. + +See the entry for splain in the L</Utility Changes> section, for the +changes. The diagnostics module and the splain utility are actually one +and the same. + +=item * + +L<ExtUtils::Packlist> has been upgraded from version 1.45 to version 1.46. + +It no longer produces "used once" warnings when the C<read> and C<write> +methods are called while the main program is still compiling (e.g., from +within a BEGIN block) [perl #107410] [rt.cpan.org #50315]. + +=item * + +L<ExtUtils::ParseXS> has been upgraded from version 3.08 to version 3.12. + +=item * + +L<Locale::Maketext> has been upgraded from version 1.21 to version 1.22. + +=item * + +L<Module::CoreList> has been upgraded from version 2.59 to version 2.60. + +=item * + +L<Module::Pluggable> has been upgraded from version 3.9 to version 4.0. + +=item * + +L<overload> has been upgraded from version 1.16 to version 1.17. + +C<overload::Overloaded> no longer calls C<can> on the class, but uses +another means to determine whether the object has overloading. It was +never correct for it to call C<can>, as overloading does not respect +AUTOLOAD. So classes that autoload methods and implement C<can> no longer +have to account for overloading [perl #40333]. + +A warning is now produced for invalid arguments. See L</New Diagnostics>. + +=item * + +L<perlfaq> has been upgraded from version 5.0150036 to version 5.0150038. + +=item * + +L<PerlIO::scalar> 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<seek> 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<seek> +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]. + +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]. + +=item * + +L<Pod::Html> has been upgraded from version 1.12 to 1.13 + +=item * + +L<POSIX> has been upgraded from version 1.27 to version 1.29. + +C<sigsuspend> and C<pause> 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<after> it has been triggered. Delayed, or +"safe", signals were preventing that from happening, possibly resulting in +race conditions [perl #107216]. +C<POSIX::sleep> is now a direct call into the underlying OS C<sleep> +function, instead of being a Perl wrapper on C<CORE::sleep>. C<POSIX::dup2> +now returns the correct value on Win32 (I<i.e.> the file descriptor). +C<POSIX::SigSet> C<sigsuspend> and C<sigpending> and C<POSIX::pause> now +dispatch safe signals immediately before returning to their caller. + +=item * + +L<Pod::Perldoc> has been upgraded from version 3.15_01 to version 3.15_15. + +=item * + +L<Term::UI> has been upgraded from version 0.26 to version 0.30. + +=item * + +L<Tie::File> has been upgraded from version 0.96 to version 0.98. + +=item * + +L<Unicode::UCD> has been upgraded from version 0.37 to version 0.38. +This changes the output of C<prop_invmap()> 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<Unicode::UCD/prop_invmap()>. + +=item * + +L<Version::Requirements> 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 + +=head2 Changes to Existing Documentation + +=head3 L<perlfunc> + +=over 4 + +=item * + +C<dbmopen> 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]. + +=item * + +The entry for C<split> has been rewritten. It is now far clearer than +before. + +=back + +=head3 L<perlop> and L<perlsyn> + +=over 4 + +=item * + +Documentation of the smartmatch operator has been reworked and moved from +perlsyn to perlop where it belongs. + +=item * + +Documentation of the ellipsis statement (C<...>) has been reworked and +moved from perlop to perlsyn. + +=back + +=head1 Diagnostics + +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<perldiag>. + +=head2 New Diagnostics + +=head3 New Errors + +=over 4 + +=item * + +L<Cannot set tied @DB::args|perldiag/"Cannot set tied @DB::args"> + +This error occurs when C<caller> tries to set C<@DB::args> but finds it +tied. Before this error was added, it used to crash instead. + +=item * + +L<Cannot tie unreifiable array|perldiag/"Cannot tie unreifiable array"> + +This error is part of a safety check that the C<tie> operator does before +tying a special array like C<@_>. You should never see this message. + +=back + +=head3 New Warnings + +=over 4 + +=item * + +L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated"> + +The long-deprecated C<defined(@array)> now also warns for package variables. +Previously it only issued a warning for lexical variables. + +=item * + +L<Useless use of \E|perldiag/"Useless use of \E"> + +C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>. + +=item * + +L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid"> + +This warning, in the "overload" category, is produced when the overload +pragma is given an argument it doesn't recognize, presumably a mistyped +operator. + +=back + +=head2 Removals + +=over 4 + +=item * + +"sort is now a reserved word" + +This error used to occur when C<sort> was called without arguments, followed by C<;> or C<)>. (E.g., C<sort;> would die, but C<{sort}> was +OK.) This error message was added in Perl 3 to catch code like +C<close(sort)> which would no longer work. More than two decades later, +this message is no longer appropriate. Now C<sort> without arguments is +always allowed, and returns an empty list, as it did in those cases where +it was already allowed [perl #90030]. + +=back + +=head1 Utility Changes + +=head3 L<splain> + +=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 messages consist of multiple lines that are listed as separate +entries in L<perldiag>. splain has been taught to find the separate +entries in these cases, instead of simply failing to find the message. + +=back + +=head1 Configuration and Compilation + +=over 4 + +=item * + +The Pod files for the perl FAQ, L<perlxs>, L<perlxstut> and L<perldoc> +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. + +=back + +=head1 Testing + +=over 4 + +=item * + +F<t/porting/utils.t> 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<installperl> and F<installman>, needed by +C<make install>, are tested here. + +=back + +=head1 Internal Changes + +=over 4 + +=item * + +There are now feature bundle hints in C<PL_hints> (C<$^H>) that version +declarations use, to avoid having to load F<feature.pm>. One setting of +the hint bits indicates a "custom" feature bundle, which means that the +entries in C<%^H> still apply. F<feature.pm> uses that. + +The C<HINT_FEATURE_MASK> macro is defined in F<perl.h> along with other +hints. Other macros for setting and testing features and bundles are in +the new F<feature.h>. C<FEATURE_IS_ENABLED> (which has moved to +F<feature.h>) is no longer used throughout the codebase, but more specific +macros, e.g., C<FEATURE_SAY_IS_ENABLED>, that are defined in F<feature.h>. + +=item * + +F<lib/feature.pm> is now a generated file, created by the new +F<regen/feature.pl> script, which also generates F<feature.h>. + +=item * + +Tied arrays are now always C<AvREAL>. If C<@_> or C<DB::args> is tied, it +is reified first, to make sure this is always the case. + +=back + +=head1 Selected Bug Fixes + +=over 4 + +=item * "b . COND" in the debugger has been fixed + +Breaking on the current line with C<b . COND> 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<B::Deparse> 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<newHVhv> and tied hashes + +The C<newHVhv> 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<open(foo::bar)> + +When one writes C<open foo || die>, 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 * C<select> and package aliasing + +After package aliasing (C<*foo:: = *bar::>), C<select> 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<undef> even when a filehandle +was selected. Now it returns a typeglob reference in such cases. + +=item * C<PerlIO::get_layers> and tied variables + +C<PerlIO::get_layers> no longer ignores FETCH on tied variables as it used +to most of the time [perl #97956]. + +=item * C<PerlIO::get_layers> and numbers + +C<PerlIO::get_layers> 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<are> 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<AUTOLOAD> 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<caller> and tied C<@DB::args> + +C<caller> 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 * Tying C<@_> + +Under debugging builds, this code: + + sub TIEARRAY{bless[]} + sub { + tie @_, ""; + \@_; + }->(1); + +use to produce an "av_reify called on tied array" warning. It doesn't any +more. + +=item * Unrecognised switches on C<#!> line + +If a switch, such as B<-x>, that cannot occur on the C<#!> line is used +there, perl dies with "Can't emulate...". + +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. + +Now it produces the "Unrecognized switch" error message [perl #104288]. + +=item * C<system> and SIGCHLD + +C<system> now temporarily blocks the SIGCHLD signal handler, to prevent the +signal handler from stealing the exit status [perl #105700]. + +=item * Deleting methods via C<delete> + +Deletion of methods via C<delete $Class::{method}> syntax used to update +method caches if called in void context, but not scalar or list context. +Now it always updates those caches. + +=item * Hash element deletion and destructors + +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 * C<(s)printf>'s %n formatting code + +The %n formatting code, which causes the number of characters to be +assigned to the next argument to C<printf> or C<sprintf> now actually +assigns the number of characters, instead of the number of bytes. + +It also works now with special lvalue functions like C<substr> and with +nonexistent hash and array elements [perl #3471, #103492]. + +=item * Typeglobs and threads + +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]. + +=item * C<local $_> + +In Perl 5.14, C<local $_> 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]. + +=item * Returning tied variables + +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]. + +=item * C<{@a = sort}> no longer crashes + +This particular piece of code (C<sort> 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. + +=item * C<utf8::decode> and read-only scalars + +C<utf8::decode> now refuses to modify read-only scalars [perl #91850]. + +=item * C<dbmopen> with undefined mode + +C<dbmopen> now only warns once, rather than three times, if the mode +argument is C<undef> [perl #90064]. + +=item * Freeing an aggregate during list assignment + +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]. + +=item * Confused internal bookkeeping with @ISA arrays + +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 * DELETE on scalar ties + +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]. + +=item * Freeing $_ inside C<grep> or C<map> + +Freeing $_ inside a C<grep> or C<map> block or a code block embedded in a +regular expression used to result in double frees [perl #92254, #92256]. + +=item * Warnings with C<+=> + +The C<+=> operator does not usually warn when the left-hand side is +C<undef>, but it was doing so for tied variables. This has been fixed +[perl #44895]. + +=item * Tying and autovivification + +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]. + +=item * C<@&> and C<$&> + +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]. + +=item * Stacked filetests + +C<-T> and C<-B> now work when stacked up with other filetest operators +[perl #77388]. + +=item * Filetests and stat buffers + +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. + +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): + +=over + +=item * + +C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last +stat type, so an C<lstat _> following it would merrily return the wrong +results. Also, it was not setting the success status. + +=item * + +Freeing the handle last used by C<stat> or a filetest could result in +S<C<-T _>> using an unrelated handle. + +=item * + +C<stat> with an IO reference (as returned by C<*STDIO{IO}>, for instance) +would not reset the stat type. + +=item * + +C<stat> with an IO reference was not recording the filehandle for +S<C<-T _>> to use. + +=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. + +=item * + +Fatal warnings would stop C<-T> from setting C<$!>. + +=item * + +When the last stat was on an unreadable file, C<-T _> is supposed to +return C<undef>, leaving the last stat buffer unchanged. But it was +setting the stat type, causing C<lstat _> to stop working. + +=item * + +C<-T I<FILENAME>> was not resetting the internal stat buffers for +unreadable files. + +=back + +These have all been fixed. + +=item * C<defined *{"!"}> + +An earlier 5.15.x release caused this construct to stop the C<%!> hash +from working. Likewise C<defined *{"+"}> and C<defined *{"-"}> caused +C<%+> and C<%->, respectively, to stop working. This has been fixed. + +=item * C<-T _> with no preceding C<stat> + +This used to produce a confusing "uninitialized" warning, even though there +is no visible uninitialized value to speak of. + +=item * C<stat I<HANDLE>> and fstat failures + +If the operating system's C<fstat> function failed, C<stat> would warn +about an unopened handle, even though that was not the case. This has been +fixed. + +=item * C<lstat I<IOREF>> + +C<lstat> is documented to fall back to C<stat> (with a warning) when given +a filehandle. When passed an IO reference, it was actually doing the +equivalent of S<C<stat _>> 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<&=> started +leaving the left-hand side undefined if it happened to be a copy-on-write +string. This has been fixed [perl #108480]. + +=item * Three problematic Unicode characters now work better in regex pattern matching under C</i> + +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</i>. 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</i>. This closes [perl #98546]. + +There remain known problems when using certain characters with +multi-character folds inside bracketed character classes, including such +constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>. These +remaining bugs are addressed in [perl #89774]. + +=back + +=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<AUTHORS> file in the Perl source distribution. + +=head1 Reporting Bugs + +If you find what you think is a bug, you might check the articles +recently posted to the comp.lang.perl.misc newsgroup and the perl +bug database at http://rt.perl.org/perlbug/ . There may also be +information at http://www.perl.org/ , the Perl Home Page. + +If you believe you have an unreported bug, please run the L<perlbug> +program included with your release. Be sure to trim your bug down +to a tiny but sufficient test case. Your bug report, along with the +output of C<perl -V>, will be sent off to perlbug@perl.org to be +analysed by the Perl porting team. + +If the bug you are reporting has security implications, which make it +inappropriate to send to a publicly archived mailing list, then please send +it to perl5-security-report@perl.org. This points to a closed subscription +unarchived mailing list, which includes +all the core committers, who will be able +to help assess the impact of issues, figure out a resolution, and help +co-ordinate the release of patches to mitigate or fix the problem across all +platforms on which Perl is supported. Please only use this address for +security issues in the Perl core, not for modules independently +distributed on CPAN. + +=head1 SEE ALSO + +The F<Changes> file for an explanation of how to view exhaustive details +on what changed. + +The F<INSTALL> file for how to build Perl. + +The F<README> file for general stuff. + +The F<Artistic> and F<Copying> files for copyright information. + +=cut diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 13f2c1a32a..ada04beddf 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -2,302 +2,141 @@ =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. ] -=head1 DESCRIPTION - -This document describes differences between the 5.15.6 release and -the 5.15.7 release. - -If you are upgrading from an earlier release such as 5.15.5, first read -L<perl5156delta>, which describes differences between 5.15.5 and -5.15.6. - -=head1 Core Enhancements - -=head2 C<use charnames> no longer needed for C<\N{I<name>}> - -The C<charnames> module is now automatically loaded when needed as if -the C<:full> and C<:short> options had been specified. See -L<charnames>. - -=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<qr/\p{foo}abc\p{foo}/> -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. - -=head1 Deprecations - -=head2 Deprecated Modules - -=over - -=item L<Version::Requirements> - -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 - -=head1 Performance Enhancements - -=over 4 - -=item * - -Version declarations with the C<use> keyword (e.g., C<use 5.012>) are now -faster, as they enable features without loading F<feature.pm>. - -=item * - -C<local $_> is faster now, as it no longer iterates through magic that it -is not going to copy anyway. - -=back - -=head1 Modules and Pragmata - -=head2 Updated Modules and Pragmata - -=over 4 - -=item * - -L<B::Deparse> has been upgraded from version 1.10 to version 1.11. - -It now deparses C<open('random string')> 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<BEGIN { *Acme::Acme:: = *Acme:: }> [perl #91384]. - -C</$s[1]/> used to be deparsed as C<$s[1]> if @s were a lexical variable -[perl #81424]. Similarly, C</$#s/> would be deparsed as C<$#s> for both -lexical and package variables. These has been fixed. - -The C</applaud> regular expression flags are no longer omitted. - -Feature hints are now deparsed with C<use feature> rather than C<%^H> -assignments. - -A regression in 1.10 that caused C<ambient_pragmas> to disable 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<continue> blocks after C<for> loops are now deparsed correctly, as they -were back in 0.67 (included with Perl 5.8.5) [perl #108224] - -=item * - -L<CGI> 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. - -=item * - -L<CPAN::Meta> has been upgraded from version 2.112621 to version 2.113640. - -Version::Requirements has now been merged as CPAN::Meta::Requirements. - -=item * - -L<CPANPLUS> has been upgraded from version 0.9113 to version 0.9116. - -=item * +perldelta - what is new for perl v5.15.8 -L<Data::Dumper> has been upgraded from version 2.135_01 to version -2.135_03. +=head1 DESCRIPTION -It can now dump vstrings [perl #101162]. +This document describes differences between the 5.15.7 release and +the 5.15.8 release. -The nameless typeglob (C<*{""}>) is now dumped properly. +If you are upgrading from an earlier release such as 5.15.6, first read +L<perl5157delta>, which describes differences between 5.15.6 and +5.15.7. -=item * +=head1 Notice -L<diagnostics> has been upgraded from version 1.26 to version 1.27. +XXX Any important notices here -See the entry for splain in the L</Utility Changes> section, for the -changes. The diagnostics module and the splain utility are actually one -and the same. +=head1 Core Enhancements -=item * +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</Performance Enhancements> section. -L<ExtUtils::Packlist> has been upgraded from version 1.45 to version 1.46. +[ List each enhancement as a =head2 entry ] -It no longer produces "used once" warnings when the C<read> and C<write> -methods are called while the main program is still compiling (e.g., from -within a BEGIN block) [perl #107410] [rt.cpan.org #50315]. +=head1 Security -=item * +XXX Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +L</Selected Bug Fixes> section. -L<ExtUtils::ParseXS> has been upgraded from version 3.08 to version 3.12. +[ List each security issue as a =head2 entry ] -=item * +=head1 Incompatible Changes -L<Locale::Maketext> has been upgraded from version 1.21 to version 1.22. +XXX For a release on a stable branch, this section aspires to be: -=item * + 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</Reporting Bugs> below. -L<Module::CoreList> has been upgraded from version 2.59 to version 2.60. +[ List each incompatible change as a =head2 entry ] -=item * +=head1 Deprecations -L<Module::Pluggable> has been upgraded from version 3.9 to version 4.0. +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</Modules and Pragmata> section. -=item * +[ List each deprecation as a =head2 entry ] -L<overload> has been upgraded from version 1.16 to version 1.17. +=head1 Performance Enhancements -C<overload::Overloaded> no longer calls C<can> on the class, but uses -another means to determine whether the object has overloading. It was -never correct for it to call C<can>, as overloading does not respect -AUTOLOAD. So classes that autoload methods and implement C<can> no longer -have to account for overloading [perl #40333]. +XXX Changes which enhance performance without changing behaviour go here. There +may well be none in a stable release. -A warning is now produced for invalid arguments. See L</New Diagnostics>. +[ List each enhancement as a =item entry ] -=item * - -L<perlfaq> has been upgraded from version 5.0150036 to version 5.0150038. +=over 4 =item * -L<PerlIO::scalar> has been upgraded from version 0.12 to version 0.13. - -(This is the module that implements C<< open $fh, '>', \$scalar >>.) +XXX -It no longer assumes during C<seek> 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<seek> -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]. +=back -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. +=head1 Modules and Pragmata -Printing to an in-memory handle no longer crashes if the $scalar happens to -hold a number internally, but no string buffer. +XXX All changes to installed files in F<cpan/>, F<dist/>, F<ext/> and F<lib/> +go here. If Module::CoreList is updated, generate an initial draft of the +following sections using F<Porting/corelist-perldelta.pl>, 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<Changes> file that could be +cribbed. -Printing to an in-memory handle no longer creates scalars that confuse the regular expression engine [perl #108398]. +[ Within each section, list entries as a =item entry ] -=item * +=head2 New Modules and Pragmata -L<Pod::Html> has been upgraded from version 1.12 to 1.13 +=over 4 =item * -L<POSIX> has been upgraded from version 1.27 to version 1.29. +XXX -C<sigsuspend> and C<pause> 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<after> it has been triggered. Delayed, or -"safe", signals were preventing that from happening, possibly resulting in -race conditions [perl #107216]. -C<POSIX::sleep> is now a direct call into the underlying OS C<sleep> -function, instead of being a Perl wrapper on C<CORE::sleep>. C<POSIX::dup2> -now returns the correct value on Win32 (I<i.e.> the file descriptor). -C<POSIX::SigSet> C<sigsuspend> and C<sigpending> and C<POSIX::pause> now -dispatch safe signals immediately before returning to their caller. +=back -=item * +=head2 Updated Modules and Pragmata -L<Pod::Perldoc> has been upgraded from version 3.15_01 to version 3.15_15. +=over 4 =item * -L<Term::UI> has been upgraded from version 0.26 to version 0.30. +L<XXX> has been upgraded from version 0.69 to version 0.70. -=item * - -L<Tie::File> has been upgraded from version 0.96 to version 0.98. +=back -=item * +=head2 Removed Modules and Pragmata -L<Unicode::UCD> has been upgraded from version 0.37 to version 0.38. -This changes the output of C<prop_invmap()> 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<Unicode::UCD/prop_invmap()>. +=over 4 =item * -L<Version::Requirements> 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. +XXX =back =head1 Documentation -=head2 Changes to Existing Documentation +XXX Changes to files in F<pod/> go here. Consider grouping entries by +file and be sure to link to the appropriate page, e.g. L<perlfunc>. -=head3 L<perlfunc> +=head2 New Documentation -=over 4 - -=item * +XXX Changes which create B<new> files in F<pod/> go here. -C<dbmopen> 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]. +=head3 L<XXX> -=item * +XXX Description of the purpose of the new file here -The entry for C<split> has been rewritten. It is now far clearer than -before. +=head2 Changes to Existing Documentation -=back +XXX Changes which significantly change existing files in F<pod/> go here. +However, any changes to F<pod/perldiag.pod> should go in the L</Diagnostics> +section. -=head3 L<perlop> and L<perlsyn> +=head3 L<XXX> =over 4 =item * -Documentation of the smartmatch operator has been reworked and moved from -perlsyn to perlop where it belongs. - -=item * - -Documentation of the ellipsis statement (C<...>) has been reworked and -moved from perlop to perlsyn. +XXX Description of the change here =back @@ -307,550 +146,217 @@ 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<perldiag>. -=head2 New Diagnostics - -=head3 New Errors +XXX New or changed warnings emitted by the core's C<C> code go here. Also +include any changes in L<perldiag> that reconcile it to the C<C> code. -=over 4 - -=item * +[ Within each section, list entries as a =item entry that links to perldiag, + e.g. -L<Cannot set tied @DB::args|perldiag/"Cannot set tied @DB::args"> + =item * -This error occurs when C<caller> tries to set C<@DB::args> but finds it -tied. Before this error was added, it used to crash instead. + L<Invalid version object|perldiag/"Invalid version object"> +] -=item * - -L<Cannot tie unreifiable array|perldiag/"Cannot tie unreifiable array"> +=head2 New Diagnostics -This error is part of a safety check that the C<tie> operator does before -tying a special array like C<@_>. You should never see this message. +XXX Newly added diagnostic messages go here -=back - -=head3 New Warnings +=head3 New Errors =over 4 =item * -L<defined(@array) is deprecated|perldiag/"defined(@array) is deprecated"> +XXX L<message|perldiag/"message"> -The long-deprecated C<defined(@array)> now also warns for package variables. -Previously it only issued a warning for lexical variables. - -=item * +=back -L<Useless use of \E|perldiag/"Useless use of \E"> +=head3 New Warnings -C<\E> does nothing unless preceded by C<\Q>, C<\L> or C<\U>. +=over 4 =item * -L<overload arg '%s' is invalid|perldiag/"overload arg '%s' is invalid"> - -This warning, in the "overload" category, is produced when the overload -pragma is given an argument it doesn't recognize, presumably a mistyped -operator. +XXX L<message|perldiag/"message"> =back -=head2 Removals +=head2 Changes to Existing Diagnostics + +XXX Changes (i.e. rewording) of diagnostic messages go here =over 4 =item * -"sort is now a reserved word" - -This error used to occur when C<sort> was called without arguments, followed by C<;> or C<)>. (E.g., C<sort;> would die, but C<{sort}> was -OK.) This error message was added in Perl 3 to catch code like -C<close(sort)> which would no longer work. More than two decades later, -this message is no longer appropriate. Now C<sort> without arguments is -always allowed, and returns an empty list, as it did in those cases where -it was already allowed [perl #90030]. +XXX Describe change here =back =head1 Utility Changes -=head3 L<splain> - -=over 4 - -=item * - -splain no longer emits backtraces with the first line number repeated. -This: +XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go +here. Most of these are built within the directories F<utils> and F<x2p>. - 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 +[ List utility changes as a =head3 entry for each utility and =item +entries for each change +Use L<XXX> with program names to get proper documentation linking. ] -has become this: +=head3 L<XXX> - 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 +=over 4 =item * -Some error messages consist of multiple lines that are listed as separate -entries in L<perldiag>. splain has been taught to find the separate -entries in these cases, instead of simply failing to find the message. +XXX =back =head1 Configuration and Compilation -=over 4 +XXX Changes to F<Configure>, F<installperl>, F<installman>, 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</Platform Support> section, instead. -=item * - -The Pod files for the perl FAQ, L<perlxs>, L<perlxstut> and L<perldoc> -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. - -=back - -=head1 Testing +[ List changes as a =item entry ]. =over 4 =item * -F<t/porting/utils.t> 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<installperl> and F<installman>, needed by -C<make install>, are tested here. +XXX =back -=head1 Internal Changes - -=over 4 - -=item * - -There are now feature bundle hints in C<PL_hints> (C<$^H>) that version -declarations use, to avoid having to load F<feature.pm>. One setting of -the hint bits indicates a "custom" feature bundle, which means that the -entries in C<%^H> still apply. F<feature.pm> uses that. +=head1 Testing -The C<HINT_FEATURE_MASK> macro is defined in F<perl.h> along with other -hints. Other macros for setting and testing features and bundles are in -the new F<feature.h>. C<FEATURE_IS_ENABLED> (which has moved to -F<feature.h>) is no longer used throughout the codebase, but more specific -macros, e.g., C<FEATURE_SAY_IS_ENABLED>, that are defined in F<feature.h>. +XXX Any significant changes to the testing of a freshly built perl should be +listed here. Changes which create B<new> files in F<t/> go here as do any +large changes to the testing harness (e.g. when parallel testing was added). +Changes to existing files in F<t/> aren't worth summarising, although the bugs +that they represent may be covered elsewhere. -=item * +[ List each test improvement as a =item entry ] -F<lib/feature.pm> is now a generated file, created by the new -F<regen/feature.pl> script, which also generates F<feature.h>. +=over 4 =item * -Tied arrays are now always C<AvREAL>. If C<@_> or C<DB::args> is tied, it -is reified first, to make sure this is always the case. +XXX =back -=head1 Selected Bug Fixes - -=over 4 - -=item * "b . COND" in the debugger has been fixed - -Breaking on the current line with C<b . COND> 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<B::Deparse> 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<newHVhv> and tied hashes - -The C<newHVhv> 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<open(foo::bar)> - -When one writes C<open foo || die>, 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 * C<select> and package aliasing - -After package aliasing (C<*foo:: = *bar::>), C<select> 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<undef> even when a filehandle -was selected. Now it returns a typeglob reference in such cases. - -=item * C<PerlIO::get_layers> and tied variables - -C<PerlIO::get_layers> no longer ignores FETCH on tied variables as it used -to most of the time [perl #97956]. - -=item * C<PerlIO::get_layers> and numbers - -C<PerlIO::get_layers> 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<are> 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<AUTOLOAD> 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<caller> and tied C<@DB::args> - -C<caller> 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 * Tying C<@_> - -Under debugging builds, this code: - - sub TIEARRAY{bless[]} - sub { - tie @_, ""; - \@_; - }->(1); +=head1 Platform Support -use to produce an "av_reify called on tied array" warning. It doesn't any -more. +XXX Any changes to platform support should be listed in the sections below. -=item * Unrecognised switches on C<#!> line +[ Within the sections, list each platform as a =item entry with specific +changes as paragraphs below it. ] -If a switch, such as B<-x>, that cannot occur on the C<#!> line is used -there, perl dies with "Can't emulate...". +=head2 New Platforms -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. +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<hints/> +directories, or new subdirectories and F<README> files at the top level of the +source tree. -Now it produces the "Unrecognized switch" error message [perl #104288]. - -=item * C<system> and SIGCHLD - -C<system> now temporarily blocks the SIGCHLD signal handler, to prevent the -signal handler from stealing the exit status [perl #105700]. - -=item * Deleting methods via C<delete> - -Deletion of methods via C<delete $Class::{method}> syntax used to update -method caches if called in void context, but not scalar or list context. -Now it always updates those caches. - -=item * Hash element deletion and destructors - -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 * C<(s)printf>'s %n formatting code - -The %n formatting code, which causes the number of characters to be -assigned to the next argument to C<printf> or C<sprintf> now actually -assigns the number of characters, instead of the number of bytes. - -It also works now with special lvalue functions like C<substr> and with -nonexistent hash and array elements [perl #3471, #103492]. - -=item * Typeglobs and threads - -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]. - -=item * C<local $_> - -In Perl 5.14, C<local $_> 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]. - -=item * Returning tied variables - -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]. - -=item * C<{@a = sort}> no longer crashes - -This particular piece of code (C<sort> 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. - -=item * C<utf8::decode> and read-only scalars - -C<utf8::decode> now refuses to modify read-only scalars [perl #91850]. - -=item * C<dbmopen> with undefined mode - -C<dbmopen> now only warns once, rather than three times, if the mode -argument is C<undef> [perl #90064]. - -=item * Freeing an aggregate during list assignment - -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]. - -=item * Confused internal bookkeeping with @ISA arrays - -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 * DELETE on scalar ties - -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]. - -=item * Freeing $_ inside C<grep> or C<map> +=over 4 -Freeing $_ inside a C<grep> or C<map> block or a code block embedded in a -regular expression used to result in double frees [perl #92254, #92256]. +=item XXX-some-platform -=item * Warnings with C<+=> +XXX -The C<+=> operator does not usually warn when the left-hand side is -C<undef>, but it was doing so for tied variables. This has been fixed -[perl #44895]. +=back -=item * Tying and autovivification +=head2 Discontinued Platforms -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]. +XXX List any platforms that this version of perl no longer compiles on. -=item * C<@&> and C<$&> +=over 4 -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]. +=item XXX-some-platform -=item * Stacked filetests +XXX -C<-T> and C<-B> now work when stacked up with other filetest operators -[perl #77388]. +=back -=item * Filetests and stat buffers +=head2 Platform-Specific Notes -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. +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</Modules and Pragmata> section. -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): +=over 4 -=over +=item XXX-some-platform -=item * +XXX -C<-T I<HANDLE>>, even though it does a C<stat>, was not resetting the last -stat type, so an C<lstat _> following it would merrily return the wrong -results. Also, it was not setting the success status. +=back -=item * +=head1 Internal Changes -Freeing the handle last used by C<stat> or a filetest could result in -S<C<-T _>> using an unrelated handle. +XXX Changes which affect the interface available to C<XS> code go here. +Other significant internal changes for future core maintainers should +be noted as well. -=item * +[ List each change as a =item entry ] -C<stat> with an IO reference (as returned by C<*STDIO{IO}>, for instance) -would not reset the stat type. +=over 4 =item * -C<stat> with an IO reference was not recording the filehandle for -S<C<-T _>> to use. +XXX -=item * +=back -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. +=head1 Selected Bug Fixes -=item * +XXX Important bug fixes in the core language are summarised here. +Bug fixes in files in F<ext/> and F<lib/> are best summarised in +L</Modules and Pragmata>. -Fatal warnings would stop C<-T> from setting C<$!>. +[ List each fix as a =item entry ] -=item * - -When the last stat was on an unreadable file, C<-T _> is supposed to -return C<undef>, leaving the last stat buffer unchanged. But it was -setting the stat type, causing C<lstat _> to stop working. +=over 4 =item * -C<-T I<FILENAME>> was not resetting the internal stat buffers for -unreadable files. +XXX =back -These have all been fixed. - -=item * C<defined *{"!"}> - -An earlier 5.15.x release caused this construct to stop the C<%!> hash -from working. Likewise C<defined *{"+"}> and C<defined *{"-"}> caused -C<%+> and C<%->, respectively, to stop working. This has been fixed. - -=item * C<-T _> with no preceding C<stat> - -This used to produce a confusing "uninitialized" warning, even though there -is no visible uninitialized value to speak of. - -=item * C<stat I<HANDLE>> and fstat failures +=head1 Known Problems -If the operating system's C<fstat> function failed, C<stat> would warn -about an unopened handle, even though that was not the case. This has been -fixed. +XXX Descriptions of platform agnostic bugs we know we can't fix go here. Any +tests that had to be C<TODO>ed for the release would be noted here, unless +they were specific to a particular platform (see below). -=item * C<lstat I<IOREF>> +This is a list of some significant unfixed bugs, which are regressions +from either 5.XXX.XXX or 5.XXX.XXX. -C<lstat> is documented to fall back to C<stat> (with a warning) when given -a filehandle. When passed an IO reference, it was actually doing the -equivalent of S<C<stat _>> and ignoring the handle. +[ List each fix as a =item entry ] -=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 +=over 4 -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]. +=item * -=item * Three problematic Unicode characters now work better in regex pattern matching under C</i> +XXX -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</i>. 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</i>. This closes [perl #98546]. +=back -There remain known problems when using certain characters with -multi-character folds inside bracketed character classes, including such -constructs as C<qr/[\N{LATIN SMALL LETTER SHARP}a-z]/i>. These -remaining bugs are addressed in [perl #89774]. +=head1 Obituary -=back +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<AUTHORS> file in the Perl source distribution. +XXX Generate this with: + + perl Porting/acknowledgements.pl v5.15.7..HEAD =head1 Reporting Bugs diff --git a/vms/descrip_mms.template b/vms/descrip_mms.template index 8c118078f2..1e17a39aba 100644 --- a/vms/descrip_mms.template +++ b/vms/descrip_mms.template @@ -345,7 +345,7 @@ x2p : [.x2p]$(DBG)a2p$(E) [.x2p]s2p.com [.x2p]find2perl.com extra.pods : miniperl @ @extra_pods.com -PERLDELTA_CURRENT = [.pod]perl5157delta.pod +PERLDELTA_CURRENT = [.pod]perl5158delta.pod $(PERLDELTA_CURRENT) : [.pod]perldelta.pod Copy/NoConfirm/Log $(MMS$SOURCE) $(MMS$TARGET) diff --git a/win32/Makefile b/win32/Makefile index a7ac7b2bfe..e469396822 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1075,7 +1075,7 @@ utils: $(PERLEXE) $(X2P) copy ..\README.vmesa ..\pod\perlvmesa.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5157delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5158delta.pod cd ..\win32 $(PERLEXE) $(PL2BAT) $(UTILS) $(PERLEXE) $(ICWD) ..\autodoc.pl .. @@ -1168,7 +1168,7 @@ distclean: realclean -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5157delta.pod perlaix.pod perlamiga.pod perlapi.pod \ + perl5158delta.pod perlaix.pod perlamiga.pod perlapi.pod \ perlbeos.pod perlbs2000.pod perlce.pod perlcn.pod \ perlcygwin.pod perldgux.pod perldos.pod perlepoc.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ diff --git a/win32/makefile.mk b/win32/makefile.mk index 6918123325..95c42a69fe 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1261,7 +1261,7 @@ utils: $(PERLEXE) $(X2P) copy ..\README.vmesa ..\pod\perlvmesa.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5157delta.pod + copy ..\pod\perldelta.pod ..\pod\perl5158delta.pod $(PERLEXE) $(PL2BAT) $(UTILS) $(PERLEXE) $(ICWD) ..\autodoc.pl .. $(PERLEXE) $(ICWD) ..\pod\perlmodlib.pl -q @@ -1353,7 +1353,7 @@ distclean: realclean -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5157delta.pod perlaix.pod perlamiga.pod perlapi.pod \ + perl5158delta.pod perlaix.pod perlamiga.pod perlapi.pod \ perlbeos.pod perlbs2000.pod perlce.pod perlcn.pod \ perlcygwin.pod perldgux.pod perldos.pod perlepoc.pod \ perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ diff --git a/win32/pod.mak b/win32/pod.mak index 23a7d5effd..0ed28343ae 100644 --- a/win32/pod.mak +++ b/win32/pod.mak @@ -34,6 +34,7 @@ POD = perl.pod \ perl5155delta.pod \ perl5156delta.pod \ perl5157delta.pod \ + perl5158delta.pod \ perl561delta.pod \ perl56delta.pod \ perl581delta.pod \ @@ -159,6 +160,7 @@ MAN = perl.man \ perl5155delta.man \ perl5156delta.man \ perl5157delta.man \ + perl5158delta.man \ perl561delta.man \ perl56delta.man \ perl581delta.man \ @@ -284,6 +286,7 @@ HTML = perl.html \ perl5155delta.html \ perl5156delta.html \ perl5157delta.html \ + perl5158delta.html \ perl561delta.html \ perl56delta.html \ perl581delta.html \ @@ -409,6 +412,7 @@ TEX = perl.tex \ perl5155delta.tex \ perl5156delta.tex \ perl5157delta.tex \ + perl5158delta.tex \ perl561delta.tex \ perl56delta.tex \ perl581delta.tex \ |