[ 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<File::stat> has been upgraded from version 1.05 to 1.06.
+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<File::stat> ignores the L<filetest> pragma, and warns when used in
-combination therewith. But it was not warning for C<-r>. This has been
-fixed [perl #111640].
+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<Hash::Util> has been upgraded from version 0.11 to 0.12.
+L<File::DosGlob> has been upgraded from version 1.07 to 1.08.
+
+There are no visible changes, only minor internal refactorings.
-C<hash_unlocked> and C<hashref_unlocked> now returns true if the hash is
-unlocked, instead of always returning false [perl #112126].
+=item *
-C<hash_unlocked>, C<hashref_unlocked>, C<lock_hash_recurse> and
-C<unlock_hash_recurse> are now exportable [perl #112126].
+L<File::Spec::Unix> has been upgraded from version 3.39_02 to 3.39_03.
-Two new functions, C<hash_locked> and C<hashref_locked>, have been added.
-Oddly enough, these two functions were already exported, even though they
-did not exist [perl #112126].
+C<abs2rel> could produce incorrect results when given two relative paths or
+the root directory twice [perl #111510].
=item *
-L<Storable> has been upgraded from version 2.34 to 2.35.
+L<IO> has been upgraded from version 1.25_06 to 1.25_07.
-Modifying C<$_[0]> within C<STORABLE_freeze> no longer results in crashes
-[perl #112358].
+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 *
-C<goto "\0"> now dies with "Can't find label" instead of "goto must have
-label".
+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 *
-The C function C<hv_store> used to result in crashes when used on C<%^H>
-[perl #111000].
+C<UNIVERSAL::can> no longer treats its first argument differently
+depending on whether it is a string or number internally.
=item *
-A call checker attached to a closure prototype via C<cv_set_call_checker>
-is now copied to closures cloned from it. So C<cv_set_call_checker> now
-works inside an attribute handler for a closure.
+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 *
-Writing to C<$^N> used to have no effect. Now it croaks with "Modification
-of a read-only value" by default, but that can be overridden by a custom
-regular expression engine, as with C<$1> [perl #112184].
+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.
=item *
-C<undef> on a control character glob (C<undef *^H>) no longer emits an
-erroneous warning about ambiguity [perl #112456].
+Numeric operators on magical variables (e.g., S<C<$1 + 1>>) used to use
+floating point operations even where integer operations were more appropriate, resulting in loss of accuracy on 64-bit platforms
+[perl #109542].
=item *
-For efficiency's sake, many operators and built-in functions return the
-same scalar each time. Lvalue subroutines and subroutines in the CORE::
-namespace were allowing this implementation detail to leak through.
-C<print &CORE::uc("a"), &CORE::uc("b")> used to print "BB". The same thing
-would happen with an lvalue subroutine returning the return value of C<uc>.
-Now the value is copied in such cases.
+Unary negation no longer treats a string as a number if the string happened
+to be used as a number some time. So, if $x contains the string "dogs",
+C<-$x> returns "-dogs" even if C<$y=0+$x> has happened at some point.
=item *
-C<method {}> syntax with an empty block or a block returning an empty list
-used to crash or use some random value left on the stack as its invocant.
-Now it produces an error.
+In Perl 5.14, C<-'-10'> was fixed to return "10", not "+10". But magical
+variables (C<$1>, ties) were not fixed till now [perl #57706].
=item *
-C<vec> now works with extremely large offsets (>2 GB) [perl #111730].
+Unary negation now treats strings consistently, regardless of the internal
+UTF8 flag.
=back
XXX Generate this with:
- perl Porting/acknowledgements.pl v5.16.0..HEAD
+ perl Porting/acknowledgements.pl v5.17.0..HEAD
=head1 Reporting Bugs