=encoding utf8

=head1 NAME

perl5279delta - what is new for perl v5.27.9

=head1 DESCRIPTION

This document describes differences between the 5.27.8 release and the 5.27.9
release.

If you are upgrading from an earlier release such as 5.27.7, first read
L<perl5278delta>, which describes differences between 5.27.7 and 5.27.8.

=head1 Core Enhancements

=head2 New read-only predefined variable C<${^SAFE_LOCALES}>

This variable is 1 if the Perl interpreter is operating in an
environment where it is safe to use and change locales (see
L<perllocale>.)  This variable is true when the perl is
unthreaded, or compiled in a platform that supports thread-safe locale
operation (see next item).

=head2 Locales are now thread-safe on systems that support them

These systems include Windows starting with Visual Studio 2005, and in
POSIX 2008 systems.

The implication is that you are now free to use locales and changes them
in a threaded environment.  Your changes affect only your thread.
See L<perllocale/Multi-threaded operation>

=head2 Script runs now are specified with a different syntax

This isn't really an enhancement, but is being put in this category
because it changes an enhancement from 5.27.8, and there is a new
abbreviated form for it.  The syntax is now either of:

 (*script_run:...)
 (*sr:...)

Previously a C<"+"> was used instead of the C<"*">.

=head2 There is a new form for script runs which combines with
C<(?E<gt>...)> (or C<*atomic:...)>)

C<(*asr:...> is an easier way to write C<(*sr:(?E<gt>...))>,
which is expected to be a commonly used idiom.
C<(*atomic_script_run:...> is also available.  See
L<perlre/Script Runs>.

=head2 Experimentally, there are now alphabetic synonyms for some
regular expression assertions

If you find it difficult to remember how to write certain of the pattern
assertions, there are now alphabetic synonyms.

 CURRENT                NEW SYNONYMS
 ------                 ------------
 (?=...)        (*pla:...) or (*positive_lookahead:...)
 (?!...)        (*nla:...) or (*negative_lookahead:...)
 (?<=...)       (*plb:...) or (*positive_lookbehind:...)
 (?<!...)       (*nlb:...) or (*negative_lookbehind:...)
 (?>...)        (*atomic:...)

These are considered experimental, so using any of these will raise
(unless turned off) a warning in the C<experimental::alpha_assertions>
category.

=head1 Performance Enhancements

=over 4

=item *

Various optimizations have been applied to matching regular expression
patterns, so under the right circumstances, significant performance
gains may be noticed.  But in an application with many varied patterns,
little overall improvement likely will be seen.

=item *

Other optimizations have been applied to UTF-8 handling, but these are
not typically a major factor in most applications.

=back

=head1 Modules and Pragmata

=head2 Updated Modules and Pragmata

=over 4

=item *

L<bignum> has been upgraded from version 0.47 to 0.49.

=item *

L<Carp> has been upgraded from version 1.45 to 1.46.

=item *

L<Devel::PPPort> has been upgraded from version 3.38 to 3.39.

=item *

L<Encode> has been upgraded from version 2.94 to 2.96.

=item *

L<encoding> has been upgraded from version 2.21 to 2.22.

=item *

L<Errno> has been upgraded from version 1.28 to 1.29.

=item *

L<ExtUtils::MakeMaker> has been upgraded from version 7.30 to 7.32.

=item *

L<ExtUtils::ParseXS> has been upgraded from version 3.36 to 3.38.

=item *

L<ExtUtils::Typemaps> has been upgraded from version 3.37 to 3.38.

=item *

L<File::Spec> has been upgraded from version 3.72 to 3.74.

=item *

L<if> has been upgraded from version 0.0607 to 0.0608.

=item *

L<IPC::Cmd> has been upgraded from version 0.98 to 1.00.

=item *

L<Module::CoreList> has been upgraded from version 5.20180120 to 5.20180220.

=item *

L<mro> has been upgraded from version 1.21 to 1.22.

=item *

L<PerlIO::encoding> has been upgraded from version 0.25 to 0.26.

=item *

L<POSIX> has been upgraded from version 1.81 to 1.82.

=item *

L<Storable> has been upgraded from version 2.65 to 3.06.

=item *

L<Test::Simple> has been upgraded from version 1.302120 to 1.302122.

=item *

L<threads> has been upgraded from version 2.21 to 2.22.

=item *

L<Time::HiRes> has been upgraded from version 1.9752 to 1.9753.

=item *

L<warnings> has been upgraded from version 1.40 to 1.41.

=item *

L<XXX> has been upgraded from version A.xx to B.yy.

If there was something important to note about this change, include that here.

=back

=head1 Documentation


=head2 Changes to Existing Documentation

We have attempted to update the documentation to reflect the changes
listed in this document.  If you find any we have missed, send email
to L<perlbug@perl.org|mailto:perlbug@perl.org>.

=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 Warnings

=over 4

=item *

L<Locale '%s' contains (at least) the following characters which have
non-standard meanings: %s  The Perl program will use the standard
meanings|perldiag/"Locale '%s' contains (at least) the following
characters which have non-standard meanings: %s  The Perl program will
use the standard meanings">.

=back

=head1 Testing

Tests were added and changed to reflect the other additions and
changes in this release.  Furthermore, these significant changes were
made:

=over 4

=item *

F<harness> no longer waits for 30 seconds when running
F<t/io/openpid.t>.  [perl #121028][perl #132867]

=back

=head1 Platform Support

=head2 New Platforms

=over 4


=item VMS

CRTL features can now be set by embedders before invoking Perl by using the
C<decc$feature_set> and C<decc$feature_set_value> functions.  Previously any attempt
to set features after image initialization were ignored.

=back

=head1 Internal Changes

=over 4

=item *

A new compiler C<#define>, C<dTHX_DEBUGGING>. has been added.  This is
useful for XS or C code that only need the thread context because their
debugging statements that get compiled only under C<-DDEBUGGING> need
one.

=item *

A new API function L<perlapi/Perl_setlocale> has been added.

=item *

L<perlapi/sync_locale> has been revised to return a boolean as to
whether the system was using the global locale or not.

=item *

A new kind of magic scalar, called a "nonelem" scalar, has been introduced.
It is stored in an array to denote a nonexistent element, whenever such an
element is accessed in a potential lvalue context.  It replaces the
existing "defelem" (deferred element) magic wherever this is possible,
being significantly more efficient.  This means that
C<some_sub($sparse_array[$nonelem])> no longer has to create a new magic
defelem scalar each time, as long as the element is within the array.

It partially fixes the rare bug of deferred elements getting out of synch
with their arrays when the array is shifted or unshifted.  [perl #132729]

=back

=head1 Selected Bug Fixes

=over 4

=item *

Failures while compiling code within other constructs, such as with
string interpolation and the right part of C<s///e> now cause
compilation to abort earlier.

Previously compilation could continue in order to report other errors,
but the failed sub-parse could leave partly parsed constructs on the
parser shift-reduce stack, confusing the parser, leading to perl
crashes. [perl #125351]

=item *

On threaded perls where the decimal point (radix) character is not a
dot, it has been possible for a race to occur between threads when one
needs to use the real radix character.  This has now been fixed by use
of a mutex on systems without thread-safe locales, and the problem just
doesn't come up on those with thread-safe locales.

=back

=head1 Acknowledgements

Perl 5.27.9 represents approximately 5 weeks of development since Perl
5.27.8 and contains approximately 29,000 lines of changes across 360 files
from 26 authors.

Excluding auto-generated files, documentation and release tools, there were
approximately 13,000 lines of changes to 250 .pm, .t, .c and .h files.

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.27.9:

, Aaron Crane, Abigail, Chris 'BinGOs' Williams, Craig A. Berry, Dagfinn
Ilmari Mannsåker, David Mitchell, Father Chrysostomos, George Hartzell,
H.Merijn Brand, Hugo van der Sanden, James E Keenan, Jerry D. Hedden, Karl
Williamson, Matthew Horsfall, Pali, Reini Urban, Sawyer X, Slaven Rezic,
Steve Hay, Todd Rinaldo, Tomasz Konojacki, Tom Wyant, Tony Cook, Yves Orton,
Zefram.

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 perl bug database
at L<https://rt.perl.org/> .  There may also be information at
L<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 see
L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
for details of how to report the issue.

=head1 Give Thanks

If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
you can do so by running the C<perlthanks> program:

    perlthanks

This will send an email to the Perl 5 Porters list with your show of thanks.

=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
