This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for caller crashing on SvOOK str
[perl5.git] / pod / perldelta.pod
index b56e4bb..c7a0436 100644 (file)
@@ -28,6 +28,18 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
+=head2 More CORE:: subs
+
+Several more built-in functions have been added as subroutines to the
+CORE:: namespace, namely, those non-overridable keywords that can be
+implemented without custom parsers: C<defined>, C<delete>, C<exists>,
+C<glob>, C<pos>, C<protoytpe>, C<scalar>, C<split>, C<study>, C<undef>,
+
+As some of these have prototypes, C<prototype('CORE::...')> has been
+changed not to make a distinction between overridable and non-overridable
+keywords.  This is to make C<prototype('CORE::pos')> consistent with
+C<prototype(&CORE::pos)>.
+
 =head1 Security
 
 XXX Any security-related notices go here.  In particular, any security
@@ -130,9 +142,9 @@ the root directory twice [perl #111510].
 
 =item *
 
-L<IO> has been upgraded from version 1.25_06 to version 1.25_07.
+L<IO> has been upgraded from version 1.25_06 to 1.25_07.
 
-C<sync()> can now be called on read only file handles [perl #64772].
+C<sync()> can now be called on read-only file handles [perl #64772].
 
 =item *
 
@@ -143,7 +155,8 @@ does nothing other than issue a warning that it is no longer supported.
 
 =item *
 
-L<Unicode::UCD> has been upgraded from version 0.43 to version 0.44.
+L<Unicode::UCD> has been upgraded from version 0.43 to 0.44.
+
 This adds a function L<all_casefolds()|Unicode::UCD/all_casefolds()>
 that returns all the casefolds.
 
@@ -241,6 +254,17 @@ XXX Describe change here
 
 =back
 
+=head2 Removals of Diagnostics
+
+=over 4
+
+=item *
+
+The "Runaway prototype" warning that occurs in bizarre cases has been
+removed as being unhelpful and inconsistent.
+
+=back
+
 =head1 Utility Changes
 
 XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go
@@ -357,7 +381,16 @@ be noted as well.
 
 =item *
 
-XXX
+The C<study> function was made a no-op in 5.16.  It was simply disabled via
+a C<return> statement; the code was left in place.  Now the code supporting
+what C<study> used to do has been removed.
+
+=item *
+
+Under threaded perls, there is no longer a separate PV allocated for every
+COP to store its package name (C<< cop->stashpv >>).  Instead, there is an
+offset (C<< cop->stashoff >>) into the new C<PL_stashpad> array, which
+holds stash pointers.
 
 =back
 
@@ -385,10 +418,41 @@ C<vec> no longer produces "uninitialized" warnings in lvalue context
 
 =item *
 
-On optimisation involving fixed strings in regular expressions could cause
+An optimisation involving fixed strings in regular expressions could cause
 a severe performance penalty in edge cases.  This has been fixed
 [perl #76546].
 
+=item *
+
+The "Can't find an opnumber" message that C<prototype> produces when passed
+a string like "CORE::nonexistent_keyword" is now passes UTF8 and embedded
+nulls through unchanged [perl #97478].
+
+=item *
+
+Under threaded perls, a run-time code block in a regular expression could
+corrupt the package name stored in the op tree, resulting in bad reads
+in C<caller>, and possibly crashes [perl #113060].
+
+=item *
+
+Referencing a closure prototype (C<\&{$_[1]}> in an attribute handler for a
+closure) no longer results in a copy of the subroutine (or assertion
+failures on debugging builds).
+
+=item *
+
+C<eval '__PACKAGE__'> now returns the right answer on threaded builds if
+the current package has been assigned over (as in
+C<*ThisPackage:: = *ThatPackage::>) [perl #78742].
+
+=item *
+
+If a package is deleted by code that it calls, it is possible for C<caller>
+to see a stack frame belonging to that deleted package.  C<caller> could
+crash if the stash's memory address was reused for a scalar and a
+substitution was performed on the same scalar [perl #113486].
+
 =back
 
 =head1 Known Problems