Create a perldelta for 5.15.8
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Fri, 20 Jan 2012 21:26:09 +0000 (21:26 +0000)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Fri, 20 Jan 2012 21:26:46 +0000 (21:26 +0000)
MANIFEST
Makefile.SH
pod/.gitignore
pod/perl.pod
pod/perl5157delta.pod [new file with mode: 0644]
pod/perldelta.pod
vms/descrip_mms.template
win32/Makefile
win32/makefile.mk
win32/pod.mak

index 8948eb9..8c9651a 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -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
index c8a233b..4de5de9 100755 (executable)
@@ -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`
index c4bebd1..c65a86b 100644 (file)
@@ -59,7 +59,7 @@
 /roffitall
 
 # generated
-/perl5157delta.pod
+/perl5158delta.pod
 /perlapi.pod
 /perlintern.pod
 *.html
index d199d6e..1ea83d8 100644 (file)
@@ -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 (file)
index 0000000..aa6f3e7
--- /dev/null
@@ -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
index 13f2c1a..ada04be 100644 (file)
 
 =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
 
index 8c11807..1e17a39 100644 (file)
@@ -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)
index a7ac7b2..e469396 100644 (file)
@@ -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 \
index 6918123..95c42a6 100644 (file)
@@ -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 \
index 23a7d5e..0ed2834 100644 (file)
@@ -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        \