[ this is a template for a new perldelta file. Any text flagged as
XXX needs to be processed before release. ]
-perldelta - what is new for perl v5.17.0
+perldelta - what is new for perl v5.17.1
=head1 DESCRIPTION
-This document describes differences between the 5.16.0 release and
-the 5.17.0 release.
+This document describes differences between the 5.17.0 release and
+the 5.17.1 release.
If you are upgrading from an earlier release such as 5.16.0, first read
-L<perl5160delta>, which describes differences between 5.15.0 and
-5.16.0.
+L<perl5170delta>, which describes differences between 5.16.0 and
+5.17.0.
=head1 Notice
[ 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
If any exist, they are bugs, and we request that you submit a
report. See L</Reporting Bugs> below.
-[ List each incompatible change as a =head2 entry ]
+=head2 C<\N{BELL}> now refers to U+1F514 instead of U+0007
+
+Unicode 6.0 reused the name "BELL" for a different code point than it
+traditionally had meant. Since Perl v5.14, use of this name still
+referred to U+0007, but would raise a deprecated warning. Now, "BELL"
+refers to U+1F514, and the name for U+0007 is "ALERT". All the
+functions in L<charnames> have been correspondingly updated.
=head1 Deprecations
=item *
-L<XXX> has been upgraded from version 0.69 to version 0.70.
+L<ExtUtils::CBuilder> has been upgraded from version 0.280206 to 0.280208.
+
+Manifest files are now correctly embedded for those versions of VC++ which
+make use of them.
+
+=item *
+
+L<B> has been upgraded from version 1.35 to 1.36.
+
+C<B::COP::stashlen> has been replaced with C<B::COP::stashoff>.
+
+C<B::COP::stashpv> now supports UTF8 package names and embedded nulls.
+
+=item *
+
+L<ExtUtils::CBuilder> has been upgraded from version 0.280206 to 0.280208.
+
+It no longer fails when trying to embed manifests on Windows
+[perl #111782, #111798].
+
+=item *
+
+L<File::DosGlob> has been upgraded from version 1.07 to 1.08.
+
+There are no visible changes, only minor internal refactorings.
+
+=item *
+
+L<File::Spec::Unix> has been upgraded from version 3.39_02 to 3.39_03.
+
+C<abs2rel> could produce incorrect results when given two relative paths or
+the root directory twice [perl #111510].
+
+=item *
+
+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].
+
+=item *
+
+L<Pod::Html> has been upgraded from version 1.15_02 to 1.16.
+
+The option C<--libpods> has been re-instated. It is deprecated, and its use
+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 0.44.
+
+This adds a function L<all_casefolds()|Unicode::UCD/all_casefolds()>
+that returns all the casefolds.
=back
=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.
+
+=item *
+
+The "Not a format reference" error has been removed, as the only case in
+which it could be triggered was a bug.
+
+=back
+
=head1 Utility Changes
XXX Changes to installed programs such as F<perlbug> and F<xsubpp> go
=over 4
-=item XXX-some-platform
+=item Win32
-XXX
+C<link> on Win32 now attempts to set C<$!> to more appropriate values
+based on the Win32 API error code. [perl #112272]
=back
=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
=item *
-C<goto ''> now looks for an empty label, producing the "goto must have
-label" error message, instead of exiting the program [perl #111794].
+Perl now works as well as can be expected on all releases of Unicode so
+far. In v5.16, it worked on Unicodes 6.0 and 6.1, but there were
+various bugs for earlier releases; the older the release the more
+problems.
+
+=item *
+
+C<vec> no longer produces "uninitialized" warnings in lvalue context
+[perl #9423].
+
+=item *
+
+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 *
+
+C<prototype> now treats magical variables like C<$1> the same way as
+non-magical variables when checking for the CORE:: prefix, instead of
+treating them as subroutine names.
+
+=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].
+
+=item *
+
+C<UNIVERSAL::can> no longer treats its first argument differently
+depending on whether it is a string or number internally.
+
+=item *
+
+C<open> with "<&" for the mode checks to see whether the third argument is
+a number, in determining whether to treat it as a file descriptor or a
+handle name. Magical variables like C<$1> were always failing the numeric
+check and being treated as handle names.
=item *
-C<goto "\0"> now dies with "Can't find label" instead of "goto must have
-label".
+C<warn>'s handling of magical variables (C<$1>, ties) has undergone several
+fixes. FETCH is only called once now on a tied argument or a tied C<$@>
+[perl #97480]. Tied variables returning objects that stringify as "" are
+no longer ignored. A tied C<$@> that happened to return a reference the
+I<previous> time is was used is no longer ignored.
=back
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.16.0..HEAD
+ perl Porting/acknowledgements.pl v5.17.0..HEAD
=head1 Reporting Bugs