This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perldelta for _@ and _% prototypes
[perl5.git] / pod / perldelta.pod
index be5ebf6..f3c1efb 100644 (file)
@@ -1,23 +1,24 @@
 =encoding utf8
 
 =for comment
-This has been completed up to 3825652.
+This has been completed up to a75c6ed6bbe, except for:
+803e389        rurban  CYG17 utf8 paths
 
 =head1 NAME
 
 [ 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.15.7
+perldelta - what is new for perl v5.15.8
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.15.6 release and
-the 5.15.7 release.
+This document describes differences between the 5.15.7 release and
+the 5.15.8 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.
+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.
 
 =head1 Notice
 
@@ -31,11 +32,38 @@ here, but most should go in the L</Performance Enhancements> section.
 
 [ List each enhancement as a =head2 entry ]
 
-=head2 C<use charnames> no longer needed for C<\N{I<name>}>
+=head2 Improved ability to mix locales and Unicode, including UTF-8 locales
 
-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>.
+An optional parameter has been added to C<use locale>
+
+ use locale ':not_characters';
+
+which tells Perl to use all but the C<LC_CTYPE> and C<LC_COLLATE>
+portions of the current locale.  Instead, the character set is assumed
+to be Unicode.  This allows locales and Unicode to be seamlessly mixed,
+including the increasingly frequent UTF-8 locales.  When using this
+hybrid form of locales, the C<:locale> layer to the L<open> pragma can
+be used to interface with the file system, and there are CPAN modules
+available for ARGV and environment variable conversions.
+
+Full details are in L<perllocale>.
+
+=head2 New function C<fc> and corresponding escape sequence C<\F> for Unicode foldcase
+
+Unicode foldcase is an extension to lowercase that gives better results
+when comparing two strings case-insensitively.  It has long been used
+internally in regular expression C</i> matching.  Now it is available
+explicitly through the new C<fc> function call (enabled by
+S<C<"use feature 'fc'">>, or C<use v5.16>, or explicitly callable via
+C<CORE::fc>) or through the new C<\F> sequence in double-quotish
+strings.
+
+Full details are in L<perlfunc/fc>.
+
+=head2 C<_> in subroutine prototypes
+
+The C<_> character in subroutine prototypes is now allowed before C<@> or
+C<%>.
 
 =head1 Security
 
@@ -55,6 +83,18 @@ XXX For a release on a stable branch, this section aspires to be:
 
 [ List each incompatible change as a =head2 entry ]
 
+=head2 Special blocks called in void context
+
+Special blocks (C<BEGIN>, C<CHECK>, C<INIT>, C<UNITCHECK>, C<END>) are now
+called in void context.  This avoids wasteful copying of the result of the
+last statement [perl #108794].
+
+=head2 The C<overloading> pragma and regexp objects
+
+With C<no overloading>, regular expression objects returned by C<qr//> are
+now stringified as "Regexp=REGEXP(0xbe600d)" instead of the regular
+expression itself [perl #108780].
+
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -63,18 +103,6 @@ listed as an updated module in the L</Modules and Pragmata> section.
 
 [ List each deprecation as a =head2 entry ]
 
-=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
 
 XXX Changes which enhance performance without changing behaviour go here. There
@@ -86,8 +114,7 @@ may well be none in a stable release.
 
 =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>.
+XXX
 
 =back
 
@@ -119,91 +146,59 @@ XXX
 
 =item *
 
-L<B::Deparse> has been upgraded from version 1.10 to version 1.11.
+L<B> has been upgraded from version 1.33 to version 1.34.
 
-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].
+C<B::COP> now has a C<stashflags> method, corresponding to a new internal
+field added in 5.15.4 [perl #108860].
 
-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.
+=item *
 
-The C</applaud> regular expression flags are no longer omitted.
+L<Compress::Raw::Bzip2> has been upgraded from version 2.045 to version 2.048.
 
-Feature hints are now deparsed with C<use feature> rather than C<%^H>
-assignments.
+=item *
 
-A regression in 1.10 that caused C<ambient_pragmas> to disabled strict mode
-in obscure cases has been fixed.
+L<Compress::Raw::Zlib> has been upgraded from version 2.045 to version 2.048.
 
-Strict mode is now fully deparsed, including subs and vars [perl #24027].
+=item *
 
-The global variables C<$(>, C<$|> and C<$)> are now deparsed with braces
-(i.e., C<${(}>) in regular expressions [perl #86060].
+L<Compress::Zlib> has been upgraded from version 2.046 to version 2.048.
 
 =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.
+L<DB_File> has been upgraded from version 1.824 to version 1.826.
 
 =item *
 
-L<CPAN::Meta> has been upgraded from version 2.112621 to version 2.113640.
+L<diagnostics> has been upgraded from version 1.27 to version 1.28.
 
-Version::Requirements has now been merged as CPAN::Meta::Requirements.
+When searching for F<perldiag.pod>, it no longer uses paths that were only
+relevant on Perl 5.004 and earlier.
 
 =item *
 
-L<CPANPLUS> has been upgraded from version 0.9113 to version 0.9115.
+L<IPC::Cmd> has been upgraded from version 0.72 to version 0.76.
 
 =item *
 
-L<POSIX> has been upgraded from version 1.28 to version 1.29.
-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<Math::Complex> has been upgraded from version 1.58 to version 1.59.
 
-L<Term::UI> has been upgraded from version 0.26 to version 0.30.
+This avoids a new core warning.
 
 =item *
 
-L<Tie::File> has been upgraded from version 0.96 to version 0.98.
+L<Pod::Parser> has been upgraded from version 1.37 to version 1.51.
 
 =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()>.
+L<Time::HiRes>  has been upgraded from version 1.9724 to version 1.9725.
+
+There is an important bugfix for C<Time::HiRes::stat()>.
 
 =item *
 
-L<Version::Requirements> has been upgraded from version 0.101020 to version 0.101021.
+L<Unicode::UCD> has been upgraded from version 0.39 to 0.40.
 
-Version::Requirements is now DEPRECATED, use CPAN::Meta::Requirements,
-which is a drop-in replacement.
+The only change is to fix a formatting error in the Pod.
 
 =back
 
@@ -331,11 +326,7 @@ 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.
+XXX
 
 =back
 
@@ -353,11 +344,7 @@ that they represent may be covered elsewhere.
 
 =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
 
@@ -422,21 +409,7 @@ be noted as well.
 
 =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>.
+XXX
 
 =back
 
@@ -450,73 +423,44 @@ L</Modules and Pragmata>.
 
 =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
+=item *
 
-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].
+C<~~> now correctly handles the precedence of Any~~Object, and is not tricked
+by an overloaded object on the left-hand side.
 
-=item * Vstrings blowing away magic
+=item *
 
-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.
+C<stat _> no longer warns about unopened filehandles [perl #71002].
 
-=item * C<newHVhv> and tied hashes
+=item *
 
-The C<newHVhv> XS function now works on tied hashes, instead of crashing or
-returning an empty hash.
+C<stat> on an unopened filehandle now warns consistently, instead of
+skipping the warning at times.
 
-=item * Hashes will null elements
+=item *
 
-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.
+A change in an earlier 5.15 release caused warning hints to propagate into
+C<do $file>.  This has been fixed [rt.cpan.org #72767].
 
-=item * No warning for C<open(foo::bar)>
+=item *
 
-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 as well.  This has been
-corrected.
+Starting with 5.12.0, Perl used to get its internal bookkeeping muddled up
+after assigning C<${ qr// }> to a hash element and locking it with
+L<Hash::Util>.  This could result in double frees, crashes or erratic
+behaviour.
 
-=item * C<select> and package aliasing
+=item *
 
-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.
+In 5.15.7, some typeglobs in the CORE namespace were made read-only by
+mistake.  This has been fixed [rt.cpan.org #74289].
 
-=item * C<PerlIO::get_layers> and tied variables
+=item *
 
-C<PerlIO::get_layers> no longer ignores FETCH on tied variables as it used
-to most of the time [perl #97956].
+C<-t> now works when stacked with other filetest operators [perl #77388].
 
-=item * C<PerlIO::get_layers> and numbers
+=item *
 
-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).
+Stacked filetest operators now only call FETCH once on a tied argument.
 
 =back
 
@@ -548,7 +492,7 @@ here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.15.6..HEAD
+  perl Porting/acknowledgements.pl v5.15.7..HEAD
 
 =head1 Reporting Bugs