mirror of
https://github.com/Perl/perl5.git
synced 2026-01-26 08:38:23 +00:00
Headings are not sentences and should not have a trailing full stop unless the last word is an abbreviation or as part of an ellipsis.
3335 lines
98 KiB
Plaintext
3335 lines
98 KiB
Plaintext
=encoding utf8
|
|
|
|
=head1 NAME
|
|
|
|
perl5260delta - what is new for perl v5.26.0
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This document describes the differences between the 5.24.0 release and the
|
|
5.26.0 release.
|
|
|
|
=head1 Notice
|
|
|
|
This release includes three updates with widespread effects:
|
|
|
|
=over 4
|
|
|
|
=item * C<"."> no longer in C<@INC>
|
|
|
|
For security reasons, the current directory (C<".">) is no longer included
|
|
by default at the end of the module search path (C<@INC>). This may have
|
|
widespread implications for the building, testing and installing of
|
|
modules, and for the execution of scripts. See the section
|
|
L<< Removal of the current directory (C<".">) from C<@INC> >>
|
|
for the full details.
|
|
|
|
=item * C<do> may now warn
|
|
|
|
C<do> now gives a deprecation warning when it fails to load a file which
|
|
it would have loaded had C<"."> been in C<@INC>.
|
|
|
|
=item * In regular expression patterns, a literal left brace C<"{">
|
|
should be escaped
|
|
|
|
See L</Unescaped literal C<"{"> characters in regular expression patterns are no longer permissible>.
|
|
|
|
=back
|
|
|
|
=head1 Core Enhancements
|
|
|
|
=head2 Lexical subroutines are no longer experimental
|
|
|
|
Using the C<lexical_subs> feature introduced in v5.18 no longer emits a warning. Existing
|
|
code that disables the C<experimental::lexical_subs> warning category
|
|
that the feature previously used will continue to work. The
|
|
C<lexical_subs> feature has no effect; all Perl code can use lexical
|
|
subroutines, regardless of what feature declarations are in scope.
|
|
|
|
=head2 Indented Here-documents
|
|
|
|
This adds a new modifier C<"~"> to here-docs that tells the parser
|
|
that it should look for C</^\s*$DELIM\n/> as the closing delimiter.
|
|
|
|
These syntaxes are all supported:
|
|
|
|
<<~EOF;
|
|
<<~\EOF;
|
|
<<~'EOF';
|
|
<<~"EOF";
|
|
<<~`EOF`;
|
|
<<~ 'EOF';
|
|
<<~ "EOF";
|
|
<<~ `EOF`;
|
|
|
|
The C<"~"> modifier will strip, from each line in the here-doc, the
|
|
same whitespace that appears before the delimiter.
|
|
|
|
Newlines will be copied as-is, and lines that don't include the
|
|
proper beginning whitespace will cause perl to croak.
|
|
|
|
For example:
|
|
|
|
if (1) {
|
|
print <<~EOF;
|
|
Hello there
|
|
EOF
|
|
}
|
|
|
|
prints "Hello there\n" with no leading whitespace.
|
|
|
|
=head2 New regular expression modifier C</xx>
|
|
|
|
Specifying two C<"x"> characters to modify a regular expression pattern
|
|
does everything that a single one does, but additionally TAB and SPACE
|
|
characters within a bracketed character class are generally ignored and
|
|
can be added to improve readability, like
|
|
S<C</[ ^ A-Z d-f p-x ]/xx>>. Details are at
|
|
L<perlre/E<sol>x and E<sol>xx>.
|
|
|
|
=head2 C<@{^CAPTURE}>, C<%{^CAPTURE}>, and C<%{^CAPTURE_ALL}>
|
|
|
|
C<@{^CAPTURE}> exposes the capture buffers of the last match as an
|
|
array. So C<$1> is C<${^CAPTURE}[0]>. This is a more efficient equivalent
|
|
to code like C<substr($matched_string,$-[0],$+[0]-$-[0])>, and you don't
|
|
have to keep track of the C<$matched_string> either. This variable has no
|
|
single character equivalent. Note that, like the other regex magic variables,
|
|
the contents of this variable is dynamic; if you wish to store it beyond
|
|
the lifetime of the match you must copy it to another array.
|
|
|
|
C<%{^CAPTURE}> is equivalent to C<%+> (I<i.e.>, named captures). Other than
|
|
being more self-documenting there is no difference between the two forms.
|
|
|
|
C<%{^CAPTURE_ALL}> is equivalent to C<%-> (I<i.e.>, all named captures).
|
|
Other than being more self-documenting there is no difference between the
|
|
two forms.
|
|
|
|
=head2 Declaring a reference to a variable
|
|
|
|
As an experimental feature, Perl now allows the referencing operator to come
|
|
after L<C<my()>|perlfunc/my>, L<C<state()>|perlfunc/state>,
|
|
L<C<our()>|perlfunc/our>, or L<C<local()>|perlfunc/local>. This syntax must
|
|
be enabled with C<use feature 'declared_refs'>. It is experimental, and will
|
|
warn by default unless C<no warnings 'experimental::refaliasing'> is in effect.
|
|
It is intended mainly for use in assignments to references. For example:
|
|
|
|
use experimental 'refaliasing', 'declared_refs';
|
|
my \$a = \$b;
|
|
|
|
See L<perlref/Assigning to References> for more details.
|
|
|
|
=head2 Unicode 9.0 is now supported
|
|
|
|
A list of changes is at L<http://www.unicode.org/versions/Unicode9.0.0/>.
|
|
Modules that are shipped with core Perl but not maintained by p5p do not
|
|
necessarily support Unicode 9.0. L<Unicode::Normalize> does work on 9.0.
|
|
|
|
=head2 Use of C<\p{I<script>}> uses the improved Script_Extensions property
|
|
|
|
Unicode 6.0 introduced an improved form of the Script (C<sc>) property, and
|
|
called it Script_Extensions (C<scx>). Perl now uses this improved
|
|
version when a property is specified as just C<\p{I<script>}>. This
|
|
should make programs more accurate when determining if a character is
|
|
used in a given script, but there is a slight chance of breakage for
|
|
programs that very specifically needed the old behavior. The meaning of
|
|
compound forms, like C<\p{sc=I<script>}> are unchanged. See
|
|
L<perlunicode/Scripts>.
|
|
|
|
=head2 Perl can now do default collation in UTF-8 locales on platforms
|
|
that support it
|
|
|
|
Some platforms natively do a reasonable job of collating and sorting in
|
|
UTF-8 locales. Perl now works with those. For portability and full
|
|
control, L<Unicode::Collate> is still recommended, but now you may
|
|
not need to do anything special to get good-enough results, depending on
|
|
your application. See
|
|
L<perllocale/Category C<LC_COLLATE>: Collation: Text Comparisons and Sorting>.
|
|
|
|
=head2 Better locale collation of strings containing embedded C<NUL>
|
|
characters
|
|
|
|
In locales that have multi-level character weights, C<NUL>s are now
|
|
ignored at the higher priority ones. There are still some gotchas in
|
|
some strings, though. See
|
|
L<perllocale/Collation of strings containing embedded C<NUL> characters>.
|
|
|
|
=head2 C<CORE> subroutines for hash and array functions callable via
|
|
reference
|
|
|
|
The hash and array functions in the C<CORE> namespace (C<keys>, C<each>,
|
|
C<values>, C<push>, C<pop>, C<shift>, C<unshift> and C<splice>) can now
|
|
be called with ampersand syntax (C<&CORE::keys(\%hash>) and via reference
|
|
(C<< my $k = \&CORE::keys; $k-E<gt>(\%hash) >>). Previously they could only be
|
|
used when inlined.
|
|
|
|
=head2 New Hash Function For 64-bit Builds
|
|
|
|
We have switched to a hybrid hash function to better balance
|
|
performance for short and long keys.
|
|
|
|
For short keys, 16 bytes and under, we use an optimised variant of
|
|
One At A Time Hard, and for longer keys we use Siphash 1-3. For very
|
|
long keys this is a big improvement in performance. For shorter keys
|
|
there is a modest improvement.
|
|
|
|
=head1 Security
|
|
|
|
=head2 Removal of the current directory (C<".">) from C<@INC>
|
|
|
|
The perl binary includes a default set of paths in C<@INC>. Historically
|
|
it has also included the current directory (C<".">) as the final entry,
|
|
unless run with taint mode enabled (C<perl -T>). While convenient, this has
|
|
security implications: for example, where a script attempts to load an
|
|
optional module when its current directory is untrusted (such as F</tmp>),
|
|
it could load and execute code from under that directory.
|
|
|
|
Starting with v5.26, C<"."> is always removed by default, not just under
|
|
tainting. This has major implications for installing modules and executing
|
|
scripts.
|
|
|
|
The following new features have been added to help ameliorate these
|
|
issues.
|
|
|
|
=over
|
|
|
|
=item * F<Configure -Udefault_inc_excludes_dot>
|
|
|
|
There is a new F<Configure> option, C<default_inc_excludes_dot> (enabled
|
|
by default) which builds a perl executable without C<".">; unsetting this
|
|
option using C<-U> reverts perl to the old behaviour. This may fix your
|
|
path issues but will reintroduce all the security concerns, so don't
|
|
build a perl executable like this unless you're I<really> confident that
|
|
such issues are not a concern in your environment.
|
|
|
|
=item * C<PERL_USE_UNSAFE_INC>
|
|
|
|
There is a new environment variable recognised by the perl interpreter.
|
|
If this variable has the value 1 when the perl interpreter starts up,
|
|
then C<"."> will be automatically appended to C<@INC> (except under tainting).
|
|
|
|
This allows you restore the old perl interpreter behaviour on a
|
|
case-by-case basis. But note that this is intended to be a temporary crutch,
|
|
and this feature will likely be removed in some future perl version.
|
|
It is currently set by the C<cpan> utility and C<Test::Harness> to
|
|
ease installation of CPAN modules which have not been updated to handle the
|
|
lack of dot. Once again, don't use this unless you are sure that this
|
|
will not reintroduce any security concerns.
|
|
|
|
=item * A new deprecation warning issued by C<do>.
|
|
|
|
While it is well-known that C<use> and C<require> use C<@INC> to search
|
|
for the file to load, many people don't realise that C<do "file"> also
|
|
searches C<@INC> if the file is a relative path. With the removal of C<".">,
|
|
a simple C<do "file.pl"> will fail to read in and execute C<file.pl> from
|
|
the current directory. Since this is commonly expected behaviour, a new
|
|
deprecation warning is now issued whenever C<do> fails to load a file which
|
|
it otherwise would have found if a dot had been in C<@INC>.
|
|
|
|
=back
|
|
|
|
Here are some things script and module authors may need to do to make
|
|
their software work in the new regime.
|
|
|
|
=over
|
|
|
|
=item * Script authors
|
|
|
|
If the issue is within your own code (rather than within included
|
|
modules), then you have two main options. Firstly, if you are confident
|
|
that your script will only be run within a trusted directory (under which
|
|
you expect to find trusted files and modules), then add C<"."> back into the
|
|
path; I<e.g.>:
|
|
|
|
BEGIN {
|
|
my $dir = "/some/trusted/directory";
|
|
chdir $dir or die "Can't chdir to $dir: $!\n";
|
|
# safe now
|
|
push @INC, '.';
|
|
}
|
|
|
|
use "Foo::Bar"; # may load /some/trusted/directory/Foo/Bar.pm
|
|
do "config.pl"; # may load /some/trusted/directory/config.pl
|
|
|
|
On the other hand, if your script is intended to be run from within
|
|
untrusted directories (such as F</tmp>), then your script suddenly failing
|
|
to load files may be indicative of a security issue. You most likely want
|
|
to replace any relative paths with full paths; for example,
|
|
|
|
do "foo_config.pl"
|
|
|
|
might become
|
|
|
|
do "$ENV{HOME}/foo_config.pl"
|
|
|
|
If you are absolutely certain that you want your script to load and
|
|
execute a file from the current directory, then use a C<./> prefix; for
|
|
example:
|
|
|
|
do "./foo_config.pl"
|
|
|
|
=item * Installing and using CPAN modules
|
|
|
|
If you install a CPAN module using an automatic tool like C<cpan>, then
|
|
this tool will itself set the C<PERL_USE_UNSAFE_INC> environment variable
|
|
while building and testing the module, which may be sufficient to install
|
|
a distribution which hasn't been updated to be dot-aware. If you want to
|
|
install such a module manually, then you'll need to replace the
|
|
traditional invocation:
|
|
|
|
perl Makefile.PL && make && make test && make install
|
|
|
|
with something like
|
|
|
|
(export PERL_USE_UNSAFE_INC=1; \
|
|
perl Makefile.PL && make && make test && make install)
|
|
|
|
Note that this only helps build and install an unfixed module. It's
|
|
possible for the tests to pass (since they were run under
|
|
C<PERL_USE_UNSAFE_INC=1>), but for the module itself to fail to perform
|
|
correctly in production. In this case, you may have to temporarily modify
|
|
your script until a fixed version of the module is released.
|
|
For example:
|
|
|
|
use Foo::Bar;
|
|
{
|
|
local @INC = (@INC, '.');
|
|
# assuming read_config() needs '.' in @INC
|
|
$config = Foo::Bar->read_config();
|
|
}
|
|
|
|
This is only rarely expected to be necessary. Again, if doing this,
|
|
assess the resultant risks first.
|
|
|
|
=item * Module Authors
|
|
|
|
If you maintain a CPAN distribution, it may need updating to run in
|
|
a dotless environment. Although C<cpan> and other such tools will
|
|
currently set the C<PERL_USE_UNSAFE_INC> during module build, this is a
|
|
temporary workaround for the set of modules which rely on C<"."> being in
|
|
C<@INC> for installation and testing, and this may mask deeper issues. It
|
|
could result in a module which passes tests and installs, but which
|
|
fails at run time.
|
|
|
|
During build, test, and install, it will normally be the case that any perl
|
|
processes will be executing directly within the root directory of the
|
|
untarred distribution, or a known subdirectory of that, such as F<t/>. It
|
|
may well be that F<Makefile.PL> or F<t/foo.t> will attempt to include
|
|
local modules and configuration files using their direct relative
|
|
filenames, which will now fail.
|
|
|
|
However, as described above, automatic tools like F<cpan> will (for now)
|
|
set the C<PERL_USE_UNSAFE_INC> environment variable, which introduces
|
|
dot during a build.
|
|
|
|
This makes it likely that your existing build and test code will work, but
|
|
this may mask issues with your code which only manifest when used after
|
|
install. It is prudent to try and run your build process with that
|
|
variable explicitly disabled:
|
|
|
|
(export PERL_USE_UNSAFE_INC=0; \
|
|
perl Makefile.PL && make && make test && make install)
|
|
|
|
This is more likely to show up any potential problems with your module's
|
|
build process, or even with the module itself. Fixing such issues will
|
|
ensure both that your module can again be installed manually, and that
|
|
it will still build once the C<PERL_USE_UNSAFE_INC> crutch goes away.
|
|
|
|
When fixing issues in tests due to the removal of dot from C<@INC>,
|
|
reinsertion of dot into C<@INC> should be performed with caution, for this
|
|
too may suppress real errors in your runtime code. You are encouraged
|
|
wherever possible to apply the aforementioned approaches with explicit
|
|
absolute/relative paths, or to relocate your needed files into a
|
|
subdirectory and insert that subdirectory into C<@INC> instead.
|
|
|
|
If your runtime code has problems under the dotless C<@INC>, then the comments
|
|
above on how to fix for script authors will mostly apply here too. Bear in
|
|
mind though that it is considered bad form for a module to globally add a dot to
|
|
C<@INC>, since it introduces both a security risk and hides issues of
|
|
accidentally requiring dot in C<@INC>, as explained above.
|
|
|
|
=back
|
|
|
|
=head2 Escaped colons and relative paths in PATH
|
|
|
|
On Unix systems, Perl treats any relative paths in the C<PATH> environment
|
|
variable as tainted when starting a new process. Previously, it was
|
|
allowing a backslash to escape a colon (unlike the OS), consequently
|
|
allowing relative paths to be considered safe if the PATH was set to
|
|
something like C</\:.>. The check has been fixed to treat C<"."> as tainted
|
|
in that example.
|
|
|
|
=head2 New C<-Di> switch is now required for PerlIO debugging output
|
|
|
|
This is used for debugging of code within PerlIO to avoid recursive
|
|
calls. Previously this output would be sent to the file specified
|
|
by the C<PERLIO_DEBUG> environment variable if perl wasn't running
|
|
setuid and the C<-T> or C<-t> switches hadn't been parsed yet.
|
|
|
|
If perl performed output at a point where it hadn't yet parsed its
|
|
switches this could result in perl creating or overwriting the file
|
|
named by C<PERLIO_DEBUG> even when the C<-T> switch had been supplied.
|
|
|
|
Perl now requires the C<-Di> switch to be present before it will produce
|
|
PerlIO debugging
|
|
output. By default this is written to C<stderr>, but can optionally
|
|
be redirected to a file by setting the C<PERLIO_DEBUG> environment
|
|
variable.
|
|
|
|
If perl is running setuid or the C<-T> switch was supplied,
|
|
C<PERLIO_DEBUG> is ignored and the debugging output is sent to
|
|
C<stderr> as for any other C<-D> switch.
|
|
|
|
=head1 Incompatible Changes
|
|
|
|
=head2 Unescaped literal C<"{"> characters in regular expression
|
|
patterns are no longer permissible
|
|
|
|
You have to now say something like C<"\{"> or C<"[{]"> to specify to
|
|
match a LEFT CURLY BRACKET; otherwise, it is a fatal pattern compilation
|
|
error. This change will allow future extensions to the language.
|
|
|
|
These have been deprecated since v5.16, with a deprecation message
|
|
raised for some uses starting in v5.22. Unfortunately, the code added
|
|
to raise the message was buggy and failed to warn in some cases where
|
|
it should have. Therefore, enforcement of this ban for these cases is
|
|
deferred until Perl 5.30, but the code has been fixed to raise a
|
|
default-on deprecation message for them in the meantime.
|
|
|
|
Some uses of literal C<"{"> occur in contexts where we do not foresee
|
|
the meaning ever being anything but the literal, such as the very first
|
|
character in the pattern, or after a C<"|"> meaning alternation. Thus
|
|
|
|
qr/{fee|{fie/
|
|
|
|
matches either of the strings C<{fee> or C<{fie>. To avoid forcing
|
|
unnecessary code changes, these uses do not need to be escaped, and no
|
|
warning is raised about them, and there are no current plans to change this.
|
|
|
|
But it is always correct to escape C<"{">, and the simple rule to
|
|
remember is to always do so.
|
|
|
|
See L<Unescaped left brace in regex is illegal here|perldiag/Unescaped left brace in regex is illegal here in regex; marked by S<E<lt>-- HERE> in mE<sol>%sE<sol>>.
|
|
|
|
=head2 C<scalar(%hash)> return signature changed
|
|
|
|
The value returned for C<scalar(%hash)> will no longer show information about
|
|
the buckets allocated in the hash. It will simply return the count of used
|
|
keys. It is thus equivalent to C<0+keys(%hash)>.
|
|
|
|
A form of backward compatibility is provided via
|
|
L<C<Hash::Util::bucket_ratio()>|Hash::Util/bucket_ratio> which provides
|
|
the same behavior as
|
|
C<scalar(%hash)> provided in Perl 5.24 and earlier.
|
|
|
|
=head2 C<keys> returned from an lvalue subroutine
|
|
|
|
C<keys> returned from an lvalue subroutine can no longer be assigned
|
|
to in list context.
|
|
|
|
sub foo : lvalue { keys(%INC) }
|
|
(foo) = 3; # death
|
|
sub bar : lvalue { keys(@_) }
|
|
(bar) = 3; # also an error
|
|
|
|
This makes the lvalue sub case consistent with C<(keys %hash) = ...> and
|
|
C<(keys @_) = ...>, which are also errors.
|
|
L<[GH #15339]|https://github.com/Perl/perl5/issues/15339>
|
|
|
|
=head2 The C<${^ENCODING}> facility has been removed
|
|
|
|
The special behaviour associated with assigning a value to this variable
|
|
has been removed. As a consequence, the L<encoding> pragma's default mode
|
|
is no longer supported. If
|
|
you still need to write your source code in encodings other than UTF-8, use a
|
|
source filter such as L<Filter::Encoding> on CPAN or L<encoding>'s C<Filter>
|
|
option.
|
|
|
|
=head2 C<POSIX::tmpnam()> has been removed
|
|
|
|
The fundamentally unsafe C<tmpnam()> interface was deprecated in
|
|
Perl 5.22 and has now been removed. In its place, you can use,
|
|
for example, the L<File::Temp> interfaces.
|
|
|
|
=head2 require ::Foo::Bar is now illegal
|
|
|
|
Formerly, C<require ::Foo::Bar> would try to read F</Foo/Bar.pm>. Now any
|
|
bareword require which starts with a double colon dies instead.
|
|
|
|
=head2 Literal control character variable names are no longer permissible
|
|
|
|
A variable name may no longer contain a literal control character under
|
|
any circumstances. These previously were allowed in single-character
|
|
names on ASCII platforms, but have been deprecated there since Perl
|
|
5.20. This affects things like C<$I<\cT>>, where I<\cT> is a literal
|
|
control (such as a C<NAK> or C<NEGATIVE ACKNOWLEDGE> character) in the
|
|
source code.
|
|
|
|
=head2 C<NBSP> is no longer permissible in C<\N{...}>
|
|
|
|
The name of a character may no longer contain non-breaking spaces. It
|
|
has been deprecated to do so since Perl 5.22.
|
|
|
|
=head1 Deprecations
|
|
|
|
=head2 String delimiters that aren't stand-alone graphemes are now deprecated
|
|
|
|
For Perl to eventually allow string delimiters to be Unicode
|
|
grapheme clusters (which look like a single character, but may be
|
|
a sequence of several ones), we have to stop allowing a single character
|
|
delimiter that isn't a grapheme by itself. These are unlikely to exist
|
|
in actual code, as they would typically display as attached to the
|
|
character in front of them.
|
|
|
|
=head2 C<\cI<X>> that maps to a printable is no longer deprecated
|
|
|
|
This means we have no plans to remove this feature. It still raises a
|
|
warning, but only if syntax warnings are enabled. The feature was
|
|
originally intended to be a way to express non-printable characters that
|
|
don't have a mnemonic (C<\t> and C<\n> are mnemonics for two
|
|
non-printable characters, but most non-printables don't have a
|
|
mnemonic.) But the feature can be used to specify a few printable
|
|
characters, though those are more clearly expressed as the printable
|
|
itself. See
|
|
L<http://www.nntp.perl.org/group/perl.perl5.porters/2017/02/msg242944.html>.
|
|
|
|
=head1 Performance Enhancements
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A hash in boolean context is now sometimes faster, I<e.g.>
|
|
|
|
if (!%h) { ... }
|
|
|
|
This was already special-cased, but some cases were missed (such as
|
|
C<grep %$_, @AoH>), and even the ones which weren't have been improved.
|
|
|
|
=item * New Faster Hash Function on 64 bit builds
|
|
|
|
We use a different hash function for short and long keys. This should
|
|
improve performance and security, especially for long keys.
|
|
|
|
=item * readline is faster
|
|
|
|
Reading from a file line-by-line with C<readline()> or C<< E<lt>E<gt> >> should
|
|
now typically be faster due to a better implementation of the code that
|
|
searches for the next newline character.
|
|
|
|
=item *
|
|
|
|
Assigning one reference to another, I<e.g.> C<$ref1 = $ref2> has been
|
|
optimized in some cases.
|
|
|
|
=item *
|
|
|
|
Remove some exceptions to creating Copy-on-Write strings. The string
|
|
buffer growth algorithm has been slightly altered so that you're less
|
|
likely to encounter a string which can't be COWed.
|
|
|
|
=item *
|
|
|
|
Better optimise array and hash assignment: where an array or hash appears
|
|
in the LHS of a list assignment, such as C<(..., @a) = (...);>, it's
|
|
likely to be considerably faster, especially if it involves emptying the
|
|
array/hash. For example, this code runs about a third faster compared to
|
|
Perl 5.24.0:
|
|
|
|
my @a;
|
|
for my $i (1..10_000_000) {
|
|
@a = (1,2,3);
|
|
@a = ();
|
|
}
|
|
|
|
=item *
|
|
|
|
Converting a single-digit string to a number is now substantially faster.
|
|
|
|
=item *
|
|
|
|
The C<split> builtin is now slightly faster in many cases: in particular
|
|
for the two specially-handled forms
|
|
|
|
my @a = split ...;
|
|
local @a = split ...;
|
|
|
|
=item *
|
|
|
|
The rather slow implementation for the experimental subroutine signatures
|
|
feature has been made much faster; it is now comparable in speed with the
|
|
traditional C<my ($a, $b, @c) = @_>.
|
|
|
|
=item *
|
|
|
|
Bareword constant strings are now permitted to take part in constant
|
|
folding. They were originally exempted from constant folding in August 1999,
|
|
during the development of Perl 5.6, to ensure that C<use strict "subs">
|
|
would still apply to bareword constants. That has now been accomplished a
|
|
different way, so barewords, like other constants, now gain the performance
|
|
benefits of constant folding.
|
|
|
|
This also means that void-context warnings on constant expressions of
|
|
barewords now report the folded constant operand, rather than the operation;
|
|
this matches the behaviour for non-bareword constants.
|
|
|
|
=back
|
|
|
|
=head1 Modules and Pragmata
|
|
|
|
=head2 Updated Modules and Pragmata
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
IO::Compress has been upgraded from version 2.069 to 2.074.
|
|
|
|
=item *
|
|
|
|
L<Archive::Tar> has been upgraded from version 2.04 to 2.24.
|
|
|
|
=item *
|
|
|
|
L<arybase> has been upgraded from version 0.11 to 0.12.
|
|
|
|
=item *
|
|
|
|
L<attributes> has been upgraded from version 0.27 to 0.29.
|
|
|
|
The deprecation message for the C<:unique> and C<:locked> attributes
|
|
now mention that they will disappear in Perl 5.28.
|
|
|
|
=item *
|
|
|
|
L<B> has been upgraded from version 1.62 to 1.68.
|
|
|
|
=item *
|
|
|
|
L<B::Concise> has been upgraded from version 0.996 to 0.999.
|
|
|
|
Its output is now more descriptive for C<op_private> flags.
|
|
|
|
=item *
|
|
|
|
L<B::Debug> has been upgraded from version 1.23 to 1.24.
|
|
|
|
=item *
|
|
|
|
L<B::Deparse> has been upgraded from version 1.37 to 1.40.
|
|
|
|
=item *
|
|
|
|
L<B::Xref> has been upgraded from version 1.05 to 1.06.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<base> has been upgraded from version 2.23 to 2.25.
|
|
|
|
=item *
|
|
|
|
L<bignum> has been upgraded from version 0.42 to 0.47.
|
|
|
|
=item *
|
|
|
|
L<Carp> has been upgraded from version 1.40 to 1.42.
|
|
|
|
=item *
|
|
|
|
L<charnames> has been upgraded from version 1.43 to 1.44.
|
|
|
|
=item *
|
|
|
|
L<Compress::Raw::Bzip2> has been upgraded from version 2.069 to 2.074.
|
|
|
|
=item *
|
|
|
|
L<Compress::Raw::Zlib> has been upgraded from version 2.069 to 2.074.
|
|
|
|
=item *
|
|
|
|
L<Config::Perl::V> has been upgraded from version 0.25 to 0.28.
|
|
|
|
=item *
|
|
|
|
L<CPAN> has been upgraded from version 2.11 to 2.18.
|
|
|
|
=item *
|
|
|
|
L<CPAN::Meta> has been upgraded from version 2.150005 to 2.150010.
|
|
|
|
=item *
|
|
|
|
L<Data::Dumper> has been upgraded from version 2.160 to 2.167.
|
|
|
|
The XS implementation now supports Deparse.
|
|
|
|
=item *
|
|
|
|
L<DB_File> has been upgraded from version 1.835 to 1.840.
|
|
|
|
=item *
|
|
|
|
L<Devel::Peek> has been upgraded from version 1.23 to 1.26.
|
|
|
|
=item *
|
|
|
|
L<Devel::PPPort> has been upgraded from version 3.32 to 3.35.
|
|
|
|
=item *
|
|
|
|
L<Devel::SelfStubber> has been upgraded from version 1.05 to 1.06.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<diagnostics> has been upgraded from version 1.34 to 1.36.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<Digest> has been upgraded from version 1.17 to 1.17_01.
|
|
|
|
=item *
|
|
|
|
L<Digest::MD5> has been upgraded from version 2.54 to 2.55.
|
|
|
|
=item *
|
|
|
|
L<Digest::SHA> has been upgraded from version 5.95 to 5.96.
|
|
|
|
=item *
|
|
|
|
L<DynaLoader> has been upgraded from version 1.38 to 1.42.
|
|
|
|
=item *
|
|
|
|
L<Encode> has been upgraded from version 2.80 to 2.88.
|
|
|
|
=item *
|
|
|
|
L<encoding> has been upgraded from version 2.17 to 2.19.
|
|
|
|
This module's default mode is no longer supported. It now
|
|
dies when imported, unless the C<Filter> option is being used.
|
|
|
|
=item *
|
|
|
|
L<encoding::warnings> has been upgraded from version 0.12 to 0.13.
|
|
|
|
This module is no longer supported. It emits a warning to
|
|
that effect and then does nothing.
|
|
|
|
=item *
|
|
|
|
L<Errno> has been upgraded from version 1.25 to 1.28.
|
|
|
|
It now documents that using C<%!> automatically loads Errno for you.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::Embed> has been upgraded from version 1.33 to 1.34.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::MakeMaker> has been upgraded from version 7.10_01 to 7.24.
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::Miniperl> has been upgraded from version 1.05 to 1.06.
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::ParseXS> has been upgraded from version 3.31 to 3.34.
|
|
|
|
=item *
|
|
|
|
L<ExtUtils::Typemaps> has been upgraded from version 3.31 to 3.34.
|
|
|
|
=item *
|
|
|
|
L<feature> has been upgraded from version 1.42 to 1.47.
|
|
|
|
=item *
|
|
|
|
L<File::Copy> has been upgraded from version 2.31 to 2.32.
|
|
|
|
=item *
|
|
|
|
L<File::Fetch> has been upgraded from version 0.48 to 0.52.
|
|
|
|
=item *
|
|
|
|
L<File::Glob> has been upgraded from version 1.26 to 1.28.
|
|
|
|
It now Issues a deprecation message for C<File::Glob::glob()>.
|
|
|
|
=item *
|
|
|
|
L<File::Spec> has been upgraded from version 3.63 to 3.67.
|
|
|
|
=item *
|
|
|
|
L<FileHandle> has been upgraded from version 2.02 to 2.03.
|
|
|
|
=item *
|
|
|
|
L<Filter::Simple> has been upgraded from version 0.92 to 0.93.
|
|
|
|
It no longer treats C<no MyFilter> immediately following C<use MyFilter> as
|
|
end-of-file.
|
|
L<[GH #11853]|https://github.com/Perl/perl5/issues/11853>
|
|
|
|
=item *
|
|
|
|
L<Getopt::Long> has been upgraded from version 2.48 to 2.49.
|
|
|
|
=item *
|
|
|
|
L<Getopt::Std> has been upgraded from version 1.11 to 1.12.
|
|
|
|
=item *
|
|
|
|
L<Hash::Util> has been upgraded from version 0.19 to 0.22.
|
|
|
|
=item *
|
|
|
|
L<HTTP::Tiny> has been upgraded from version 0.056 to 0.070.
|
|
|
|
Internal 599-series errors now include the redirect history.
|
|
|
|
=item *
|
|
|
|
L<I18N::LangTags> has been upgraded from version 0.40 to 0.42.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<IO> has been upgraded from version 1.36 to 1.38.
|
|
|
|
=item *
|
|
|
|
L<IO::Socket::IP> has been upgraded from version 0.37 to 0.38.
|
|
|
|
=item *
|
|
|
|
L<IPC::Cmd> has been upgraded from version 0.92 to 0.96.
|
|
|
|
=item *
|
|
|
|
L<IPC::SysV> has been upgraded from version 2.06_01 to 2.07.
|
|
|
|
=item *
|
|
|
|
L<JSON::PP> has been upgraded from version 2.27300 to 2.27400_02.
|
|
|
|
=item *
|
|
|
|
L<lib> has been upgraded from version 0.63 to 0.64.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<List::Util> has been upgraded from version 1.42_02 to 1.46_02.
|
|
|
|
=item *
|
|
|
|
L<Locale::Codes> has been upgraded from version 3.37 to 3.42.
|
|
|
|
=item *
|
|
|
|
L<Locale::Maketext> has been upgraded from version 1.26 to 1.28.
|
|
|
|
=item *
|
|
|
|
L<Locale::Maketext::Simple> has been upgraded from version 0.21 to 0.21_01.
|
|
|
|
=item *
|
|
|
|
L<Math::BigInt> has been upgraded from version 1.999715 to 1.999806.
|
|
|
|
=item *
|
|
|
|
L<Math::BigInt::FastCalc> has been upgraded from version 0.40 to 0.5005.
|
|
|
|
=item *
|
|
|
|
L<Math::BigRat> has been upgraded from version 0.260802 to 0.2611.
|
|
|
|
=item *
|
|
|
|
L<Math::Complex> has been upgraded from version 1.59 to 1.5901.
|
|
|
|
=item *
|
|
|
|
L<Memoize> has been upgraded from version 1.03 to 1.03_01.
|
|
|
|
=item *
|
|
|
|
L<Module::CoreList> has been upgraded from version 5.20170420 to 5.20170530.
|
|
|
|
=item *
|
|
|
|
L<Module::Load::Conditional> has been upgraded from version 0.64 to 0.68.
|
|
|
|
=item *
|
|
|
|
L<Module::Metadata> has been upgraded from version 1.000031 to 1.000033.
|
|
|
|
=item *
|
|
|
|
L<mro> has been upgraded from version 1.18 to 1.20.
|
|
|
|
=item *
|
|
|
|
L<Net::Ping> has been upgraded from version 2.43 to 2.55.
|
|
|
|
IPv6 addresses and C<AF_INET6> sockets are now supported, along with several
|
|
other enhancements.
|
|
|
|
=item *
|
|
|
|
L<NEXT> has been upgraded from version 0.65 to 0.67.
|
|
|
|
=item *
|
|
|
|
L<Opcode> has been upgraded from version 1.34 to 1.39.
|
|
|
|
=item *
|
|
|
|
L<open> has been upgraded from version 1.10 to 1.11.
|
|
|
|
=item *
|
|
|
|
L<OS2::Process> has been upgraded from version 1.11 to 1.12.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<overload> has been upgraded from version 1.26 to 1.28.
|
|
|
|
Its compilation speed has been improved slightly.
|
|
|
|
=item *
|
|
|
|
L<parent> has been upgraded from version 0.234 to 0.236.
|
|
|
|
=item *
|
|
|
|
L<perl5db.pl> has been upgraded from version 1.50 to 1.51.
|
|
|
|
It now ignores F</dev/tty> on non-Unix systems.
|
|
L<[GH #12244]|https://github.com/Perl/perl5/issues/12244>
|
|
|
|
=item *
|
|
|
|
L<Perl::OSType> has been upgraded from version 1.009 to 1.010.
|
|
|
|
=item *
|
|
|
|
L<perlfaq> has been upgraded from version 5.021010 to 5.021011.
|
|
|
|
=item *
|
|
|
|
L<PerlIO> has been upgraded from version 1.09 to 1.10.
|
|
|
|
=item *
|
|
|
|
L<PerlIO::encoding> has been upgraded from version 0.24 to 0.25.
|
|
|
|
=item *
|
|
|
|
L<PerlIO::scalar> has been upgraded from version 0.24 to 0.26.
|
|
|
|
=item *
|
|
|
|
L<Pod::Checker> has been upgraded from version 1.60 to 1.73.
|
|
|
|
=item *
|
|
|
|
L<Pod::Functions> has been upgraded from version 1.10 to 1.11.
|
|
|
|
=item *
|
|
|
|
L<Pod::Html> has been upgraded from version 1.22 to 1.2202.
|
|
|
|
=item *
|
|
|
|
L<Pod::Perldoc> has been upgraded from version 3.25_02 to 3.28.
|
|
|
|
=item *
|
|
|
|
L<Pod::Simple> has been upgraded from version 3.32 to 3.35.
|
|
|
|
=item *
|
|
|
|
L<Pod::Usage> has been upgraded from version 1.68 to 1.69.
|
|
|
|
=item *
|
|
|
|
L<POSIX> has been upgraded from version 1.65 to 1.76.
|
|
|
|
This remedies several defects in making its symbols exportable.
|
|
L<[GH #15260]|https://github.com/Perl/perl5/issues/15260>
|
|
|
|
The C<POSIX::tmpnam()> interface has been removed,
|
|
see L</"POSIX::tmpnam() has been removed">.
|
|
|
|
The following deprecated functions have been removed:
|
|
|
|
POSIX::isalnum
|
|
POSIX::isalpha
|
|
POSIX::iscntrl
|
|
POSIX::isdigit
|
|
POSIX::isgraph
|
|
POSIX::islower
|
|
POSIX::isprint
|
|
POSIX::ispunct
|
|
POSIX::isspace
|
|
POSIX::isupper
|
|
POSIX::isxdigit
|
|
POSIX::tolower
|
|
POSIX::toupper
|
|
|
|
Trying to import POSIX subs that have no real implementations
|
|
(like C<POSIX::atend()>) now fails at import time, instead of
|
|
waiting until runtime.
|
|
|
|
=item *
|
|
|
|
L<re> has been upgraded from version 0.32 to 0.34
|
|
|
|
This adds support for the new L<C<E<47>xx>|perlre/E<sol>x and E<sol>xx>
|
|
regular expression pattern modifier, and a change to the L<S<C<use re
|
|
'strict'>>|re/'strict' mode> experimental feature. When S<C<re
|
|
'strict'>> is enabled, a warning now will be generated for all
|
|
unescaped uses of the two characters C<"}"> and C<"]"> in regular
|
|
expression patterns (outside bracketed character classes) that are taken
|
|
literally. This brings them more in line with the C<")"> character which
|
|
is always a metacharacter unless escaped. Being a metacharacter only
|
|
sometimes, depending on an action at a distance, can lead to silently
|
|
having the pattern mean something quite different than was intended,
|
|
which the S<C<re 'strict'>> mode is intended to minimize.
|
|
|
|
=item *
|
|
|
|
L<Safe> has been upgraded from version 2.39 to 2.40.
|
|
|
|
=item *
|
|
|
|
L<Scalar::Util> has been upgraded from version 1.42_02 to 1.46_02.
|
|
|
|
=item *
|
|
|
|
L<Storable> has been upgraded from version 2.56 to 2.62.
|
|
|
|
Fixes
|
|
L<[GH #15714]|https://github.com/Perl/perl5/issues/15714>.
|
|
|
|
=item *
|
|
|
|
L<Symbol> has been upgraded from version 1.07 to 1.08.
|
|
|
|
=item *
|
|
|
|
L<Sys::Syslog> has been upgraded from version 0.33 to 0.35.
|
|
|
|
=item *
|
|
|
|
L<Term::ANSIColor> has been upgraded from version 4.04 to 4.06.
|
|
|
|
=item *
|
|
|
|
L<Term::ReadLine> has been upgraded from version 1.15 to 1.16.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<Test> has been upgraded from version 1.28 to 1.30.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<Test::Harness> has been upgraded from version 3.36 to 3.38.
|
|
|
|
=item *
|
|
|
|
L<Test::Simple> has been upgraded from version 1.001014 to 1.302073.
|
|
|
|
=item *
|
|
|
|
L<Thread::Queue> has been upgraded from version 3.09 to 3.12.
|
|
|
|
=item *
|
|
|
|
L<Thread::Semaphore> has been upgraded from 2.12 to 2.13.
|
|
|
|
Added the C<down_timed> method.
|
|
|
|
=item *
|
|
|
|
L<threads> has been upgraded from version 2.07 to 2.15.
|
|
|
|
=item *
|
|
|
|
L<threads::shared> has been upgraded from version 1.51 to 1.56.
|
|
|
|
=item *
|
|
|
|
L<Tie::Hash::NamedCapture> has been upgraded from version 0.09 to 0.10.
|
|
|
|
=item *
|
|
|
|
L<Time::HiRes> has been upgraded from version 1.9733 to 1.9741.
|
|
|
|
It now builds on systems with C++11 compilers (such as G++ 6 and Clang++
|
|
3.9).
|
|
|
|
Now uses C<clockid_t>.
|
|
|
|
=item *
|
|
|
|
L<Time::Local> has been upgraded from version 1.2300 to 1.25.
|
|
|
|
=item *
|
|
|
|
L<Unicode::Collate> has been upgraded from version 1.14 to 1.19.
|
|
|
|
=item *
|
|
|
|
L<Unicode::UCD> has been upgraded from version 0.64 to 0.68.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<version> has been upgraded from version 0.9916 to 0.9917.
|
|
|
|
=item *
|
|
|
|
L<VMS::DCLsym> has been upgraded from version 1.06 to 1.08.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=item *
|
|
|
|
L<warnings> has been upgraded from version 1.36 to 1.37.
|
|
|
|
=item *
|
|
|
|
L<XS::Typemap> has been upgraded from version 0.14 to 0.15.
|
|
|
|
=item *
|
|
|
|
L<XSLoader> has been upgraded from version 0.21 to 0.27.
|
|
|
|
Fixed a security hole in which binary files could be loaded from a path
|
|
outside of L<C<@INC>|perlvar/@INC>.
|
|
|
|
It now uses 3-arg C<open()> instead of 2-arg C<open()>.
|
|
L<[GH #15721]|https://github.com/Perl/perl5/issues/15721>
|
|
|
|
=back
|
|
|
|
=head1 Documentation
|
|
|
|
=head2 New Documentation
|
|
|
|
=head3 L<perldeprecation>
|
|
|
|
This file documents all upcoming deprecations, and some of the deprecations
|
|
which already have been removed. The purpose of this documentation is
|
|
two-fold: document what will disappear, and by which version, and serve
|
|
as a guide for people dealing with code which has features that no longer
|
|
work after an upgrade of their perl.
|
|
|
|
=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>.
|
|
|
|
Additionally, all references to Usenet have been removed, and the
|
|
following selected changes have been made:
|
|
|
|
=head3 L<perlfunc>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Removed obsolete text about L<C<defined()>|perlfunc/defined>
|
|
on aggregates that should have been deleted earlier, when the feature
|
|
was removed.
|
|
|
|
=item *
|
|
|
|
Corrected documentation of L<C<eval()>|perlfunc/eval>,
|
|
and L<C<evalbytes()>|perlfunc/evalbytes>.
|
|
|
|
=item *
|
|
|
|
Clarified documentation of L<C<seek()>|perlfunc/seek>,
|
|
L<C<tell()>|perlfunc/tell> and L<C<sysseek()>|perlfunc/sysseek>
|
|
emphasizing that positions are in bytes and not characters.
|
|
L<[GH #15438]|https://github.com/Perl/perl5/issues/15438>
|
|
|
|
=item *
|
|
|
|
Clarified documentation of L<C<sort()>|perlfunc/sort LIST> concerning
|
|
the variables C<$a> and C<$b>.
|
|
|
|
=item *
|
|
|
|
In L<C<split()>|perlfunc/split> noted that certain pattern modifiers are
|
|
legal, and added a caution about its use in Perls before v5.11.
|
|
|
|
=item *
|
|
|
|
Removed obsolete documentation of L<C<study()>|perlfunc/study>, noting
|
|
that it is now a no-op.
|
|
|
|
=item *
|
|
|
|
Noted that L<C<vec()>|perlfunc/vec> doesn't work well when the string
|
|
contains characters whose code points are above 255.
|
|
|
|
=back
|
|
|
|
=head3 L<perlguts>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Added advice on
|
|
L<formatted printing of operands of C<Size_t> and C<SSize_t>|perlguts/Formatted Printing of Size_t and SSize_t>
|
|
|
|
=back
|
|
|
|
=head3 L<perlhack>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Clarify what editor tab stop rules to use, and note that we are
|
|
migrating away from using tabs, replacing them with sequences of SPACE
|
|
characters.
|
|
|
|
=back
|
|
|
|
=head3 L<perlhacktips>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Give another reason to use C<cBOOL> to cast an expression to boolean.
|
|
|
|
=item *
|
|
|
|
Note that the macros C<TRUE> and C<FALSE> are available to express
|
|
boolean values.
|
|
|
|
=back
|
|
|
|
=head3 L<perlinterp>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
L<perlinterp> has been expanded to give a more detailed example of how to
|
|
hunt around in the parser for how a given operator is handled.
|
|
|
|
=back
|
|
|
|
=head3 L<perllocale>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Some locales aren't compatible with Perl. Note that these can cause
|
|
core dumps.
|
|
|
|
=back
|
|
|
|
=head3 L<perlmod>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Various clarifications have been added.
|
|
|
|
=back
|
|
|
|
=head3 L<perlmodlib>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Updated the site mirror list.
|
|
|
|
=back
|
|
|
|
=head3 L<perlobj>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Added a section on calling methods using their fully qualified names.
|
|
|
|
=item *
|
|
|
|
Do not discourage manual C<@ISA>.
|
|
|
|
=back
|
|
|
|
=head3 L<perlootut>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Mention C<Moo> more.
|
|
|
|
=back
|
|
|
|
=head3 L<perlop>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Note that white space must be used for quoting operators if the
|
|
delimiter is a word character (I<i.e.>, matches C<\w>).
|
|
|
|
=item *
|
|
|
|
Clarify that in regular expression patterns delimited by single quotes,
|
|
no variable interpolation is done.
|
|
|
|
=back
|
|
|
|
=head3 L<perlre>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The first part was extensively rewritten to incorporate various basic
|
|
points, that in earlier versions were mentioned in sort of an appendix
|
|
on Version 8 regular expressions.
|
|
|
|
=item *
|
|
|
|
Note that it is common to have the C</x> modifier and forget that this
|
|
means that C<"#"> has to be escaped.
|
|
|
|
=back
|
|
|
|
=head3 L<perlretut>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Add introductory material.
|
|
|
|
=item *
|
|
|
|
Note that a metacharacter occurring in a context where it can't mean
|
|
that, silently loses its meta-ness and matches literally.
|
|
L<C<use re 'strict'>|re/'strict' mode> can catch some of these.
|
|
|
|
=back
|
|
|
|
=head3 L<perlunicode>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Corrected the text about Unicode BYTE ORDER MARK handling.
|
|
|
|
=item *
|
|
|
|
Updated the text to correspond with changes in Unicode UTS#18, concerning
|
|
regular expressions, and Perl compatibility with what it says.
|
|
|
|
=back
|
|
|
|
=head3 L<perlvar>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Document C<@ISA>. It was documented in other places, but not in L<perlvar>.
|
|
|
|
=back
|
|
|
|
=head1 Diagnostics
|
|
|
|
=head2 New Diagnostics
|
|
|
|
=head3 New Errors
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
L<A signature parameter must start with C<'$'>, C<'@'> or C<'%'>
|
|
|perldiag/A signature parameter must start with C<'$'>, C<'@'> or C<'%'>>
|
|
|
|
=item *
|
|
|
|
L<Bareword in require contains "%s"|perldiag/"Bareword in require contains "%s"">
|
|
|
|
=item *
|
|
|
|
L<Bareword in require maps to empty filename|perldiag/"Bareword in require maps to empty filename">
|
|
|
|
=item *
|
|
|
|
L<Bareword in require maps to disallowed filename "%s"|perldiag/"Bareword in require maps to disallowed filename "%s"">
|
|
|
|
=item *
|
|
|
|
L<Bareword in require must not start with a double-colon: "%s"|perldiag/"Bareword in require must not start with a double-colon: "%s"">
|
|
|
|
=item *
|
|
|
|
L<%s: command not found|perldiag/"%s: command not found">
|
|
|
|
(A) You've accidentally run your script through B<bash> or another shell
|
|
instead of Perl. Check the C<#!> line, or manually feed your script into
|
|
Perl yourself. The C<#!> line at the top of your file could look like:
|
|
|
|
#!/usr/bin/perl
|
|
|
|
=item *
|
|
|
|
L<%s: command not found: %s|perldiag/"%s: command not found: %s">
|
|
|
|
(A) You've accidentally run your script through B<zsh> or another shell
|
|
instead of Perl. Check the C<#!> line, or manually feed your script into
|
|
Perl yourself. The C<#!> line at the top of your file could look like:
|
|
|
|
#!/usr/bin/perl
|
|
|
|
=item *
|
|
|
|
L<The experimental declared_refs feature is not enabled|perldiag/"The experimental declared_refs feature is not enabled">
|
|
|
|
(F) To declare references to variables, as in C<my \%x>, you must first enable
|
|
the feature:
|
|
|
|
no warnings "experimental::declared_refs";
|
|
use feature "declared_refs";
|
|
|
|
See L</Declaring a reference to a variable>.
|
|
|
|
=item *
|
|
|
|
L<Illegal character following sigil in a subroutine signature
|
|
|perldiag/Illegal character following sigil in a subroutine signature>
|
|
|
|
=item *
|
|
|
|
L<Indentation on line %d of here-doc doesn't match delimiter
|
|
|perldiag/Indentation on line %d of here-doc doesn't match delimiter>
|
|
|
|
=item *
|
|
|
|
L<Infinite recursion via empty pattern|perldiag/"Infinite recursion via empty pattern">.
|
|
|
|
Using the empty pattern (which re-executes the last successfully-matched
|
|
pattern) inside a code block in another regex, as in C</(?{ s!!new! })/>, has
|
|
always previously yielded a segfault. It now produces this error.
|
|
|
|
=item *
|
|
|
|
L<Malformed UTF-8 string in "%s"
|
|
|perldiag/Malformed UTF-8 string in "%s">
|
|
|
|
=item *
|
|
|
|
L<Multiple slurpy parameters not allowed
|
|
|perldiag/Multiple slurpy parameters not allowed>
|
|
|
|
=item *
|
|
|
|
L<C<'#'> not allowed immediately following a sigil in a subroutine signature
|
|
|perldiag/C<'#'> not allowed immediately following a sigil in a subroutine signature>
|
|
|
|
=item *
|
|
|
|
L<panic: unknown OA_*: %x
|
|
|perldiag/panic: unknown OA_*: %x>
|
|
|
|
=item *
|
|
|
|
L<Unescaped left brace in regex is illegal here|perldiag/Unescaped left brace in regex is illegal here in regex; marked by S<E<lt>-- HERE> in mE<sol>%sE<sol>>
|
|
|
|
Unescaped left braces are now illegal in some contexts in regular expression
|
|
patterns. In other contexts, they are still just deprecated; they will
|
|
be illegal in Perl 5.30.
|
|
|
|
=item *
|
|
|
|
L<Version control conflict marker|perldiag/"Version control conflict marker">
|
|
|
|
(F) The parser found a line starting with C<E<lt>E<lt>E<lt>E<lt>E<lt>E<lt>E<lt>>,
|
|
C<E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>E<gt>>, or C<=======>. These may be left by a
|
|
version control system to mark conflicts after a failed merge operation.
|
|
|
|
=back
|
|
|
|
=head3 New Warnings
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
L<Can't determine class of operator %s, assuming C<BASEOP>
|
|
|perldiag/Can't determine class of operator %s, assuming C<BASEOP>>
|
|
|
|
=item *
|
|
|
|
L<Declaring references is experimental|perldiag/"Declaring references is experimental">
|
|
|
|
(S experimental::declared_refs) This warning is emitted if you use a reference
|
|
constructor on the right-hand side of C<my()>, C<state()>, C<our()>, or
|
|
C<local()>. Simply suppress the warning if you want to use the feature, but
|
|
know that in doing so you are taking the risk of using an experimental feature
|
|
which may change or be removed in a future Perl version:
|
|
|
|
no warnings "experimental::declared_refs";
|
|
use feature "declared_refs";
|
|
$fooref = my \$foo;
|
|
|
|
See L</Declaring a reference to a variable>.
|
|
|
|
=item *
|
|
|
|
L<do "%s" failed, '.' is no longer in @INC|perldiag/do "%s" failed, '.' is no longer in @INC; did you mean do ".E<sol>%s"?>
|
|
|
|
Since C<"."> is now removed from C<@INC> by default, C<do> will now trigger a warning recommending to fix the C<do> statement.
|
|
|
|
=item *
|
|
|
|
L<C<File::Glob::glob()> will disappear in perl 5.30. Use C<File::Glob::bsd_glob()> instead.
|
|
|perldiag/C<File::Glob::glob()> will disappear in perl 5.30. Use C<File::Glob::bsd_glob()> instead.>
|
|
|
|
=item *
|
|
|
|
L<Unescaped literal '%c' in regex; marked by E<lt>-- HERE in mE<sol>%sE<sol>
|
|
|perldiag/Unescaped literal '%c' in regex; marked by <-- HERE in mE<sol>%sE<sol>>
|
|
|
|
=item *
|
|
|
|
L<Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30|perldiag/"Use of unassigned code point or non-standalone grapheme for a delimiter will be a fatal error starting in Perl 5.30">
|
|
|
|
See L</Deprecations>
|
|
|
|
=back
|
|
|
|
=head2 Changes to Existing Diagnostics
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
When a C<require> fails, we now do not provide C<@INC> when the C<require>
|
|
is for a file instead of a module.
|
|
|
|
=item *
|
|
|
|
When C<@INC> is not scanned for a C<require> call, we no longer display
|
|
C<@INC> to avoid confusion.
|
|
|
|
=item *
|
|
|
|
L<Attribute "locked" is deprecated, and will disappear in Perl 5.28
|
|
|perldiag/Attribute "locked" is deprecated, and will disappear in Perl 5.28>
|
|
|
|
This existing warning has had the I<and will disappear> text added in this
|
|
release.
|
|
|
|
=item *
|
|
|
|
L<Attribute "unique" is deprecated, and will disappear in Perl 5.28
|
|
|perldiag/Attribute "unique" is deprecated, and will disappear in Perl 5.28>
|
|
|
|
This existing warning has had the I<and will disappear> text added in this
|
|
release.
|
|
|
|
=item *
|
|
|
|
Calling POSIX::%s() is deprecated
|
|
|
|
This warning has been removed, as the deprecated functions have been
|
|
removed from POSIX.
|
|
|
|
=item *
|
|
|
|
L<Constants from lexical variables potentially modified elsewhere are deprecated. This will not be allowed in Perl 5.32
|
|
|perldiag/Constants from lexical variables potentially modified elsewhere are deprecated. This will not be allowed in Perl 5.32>
|
|
|
|
This existing warning has had the I<this will not be allowed> text added
|
|
in this release.
|
|
|
|
=item *
|
|
|
|
L<Deprecated use of C<my()> in false conditional. This will be a fatal error in Perl 5.30
|
|
|perldiag/Deprecated use of C<my()> in false conditional. This will be a fatal error in Perl 5.30>
|
|
|
|
This existing warning has had the I<this will be a fatal error> text added
|
|
in this release.
|
|
|
|
=item *
|
|
|
|
L<C<dump()> better written as C<CORE::dump()>. C<dump()> will no longer be available in Perl 5.30
|
|
|perldiag/C<dump()> better written as C<CORE::dump()>. C<dump()> will no longer be available in Perl 5.30>
|
|
|
|
This existing warning has had the I<no longer be available> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<Experimental %s on scalar is now forbidden
|
|
|perldiag/Experimental %s on scalar is now forbidden>
|
|
|
|
This message is now followed by more helpful text.
|
|
L<[GH #15291]|https://github.com/Perl/perl5/issues/15291>
|
|
|
|
=item *
|
|
|
|
Experimental "%s" subs not enabled
|
|
|
|
This warning was been removed, as lexical subs are no longer experimental.
|
|
|
|
=item *
|
|
|
|
Having more than one /%c regexp modifier is deprecated
|
|
|
|
This deprecation warning has been removed, since C</xx> now has a new
|
|
meaning.
|
|
|
|
=item *
|
|
|
|
L<%s() is deprecated on C<:utf8> handles. This will be a fatal error in Perl 5.30
|
|
|perldiag/%s() is deprecated on C<:utf8> handles. This will be a fatal error in Perl 5.30>.
|
|
|
|
where "%s" is one of C<sysread>, C<recv>, C<syswrite>, or C<send>.
|
|
|
|
This existing warning has had the I<this will be a fatal error> text added
|
|
in this release.
|
|
|
|
This warning is now enabled by default, as all C<deprecated> category
|
|
warnings should be.
|
|
|
|
=item *
|
|
|
|
L<C<$*> is no longer supported. Its use will be fatal in Perl 5.30
|
|
|perldiag/C<$*> is no longer supported. Its use will be fatal in Perl 5.30>
|
|
|
|
This existing warning has had the I<its use will be fatal> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<C<$#> is no longer supported. Its use will be fatal in Perl 5.30
|
|
|perldiag/C<$#> is no longer supported. Its use will be fatal in Perl 5.30>
|
|
|
|
This existing warning has had the I<its use will be fatal> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<Malformed UTF-8 character%s
|
|
|perldiag/Malformed UTF-8 character%s>
|
|
|
|
Details as to the exact problem have been added at the end of this
|
|
message
|
|
|
|
=item *
|
|
|
|
L<Missing or undefined argument to %s
|
|
|perldiag/Missing or undefined argument to %s>
|
|
|
|
This warning used to warn about C<require>, even if it was actually C<do>
|
|
which being executed. It now gets the operation name right.
|
|
|
|
=item *
|
|
|
|
NO-BREAK SPACE in a charnames alias definition is deprecated
|
|
|
|
This warning has been removed as the behavior is now an error.
|
|
|
|
=item *
|
|
|
|
L<Odd nameE<sol>value argument for subroutine '%s'
|
|
|perldiag/"Odd nameE<sol>value argument for subroutine '%s'">
|
|
|
|
This warning now includes the name of the offending subroutine.
|
|
|
|
=item *
|
|
|
|
L<Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28
|
|
|perldiag/Opening dirhandle %s also as a file. This will be a fatal error in Perl 5.28>
|
|
|
|
This existing warning has had the I<this will be a fatal error> text added
|
|
in this release.
|
|
|
|
=item *
|
|
|
|
L<Opening filehandle %s also as a directory. This will be a fatal error in Perl 5.28
|
|
|perldiag/Opening filehandle %s also as a directory. This will be a fatal error in Perl 5.28>
|
|
|
|
This existing warning has had the I<this will be a fatal error> text added
|
|
in this release.
|
|
|
|
=item *
|
|
|
|
panic: ck_split, type=%u
|
|
|
|
panic: pp_split, pm=%p, s=%p
|
|
|
|
These panic errors have been removed.
|
|
|
|
=item *
|
|
|
|
Passing malformed UTF-8 to "%s" is deprecated
|
|
|
|
This warning has been changed to the fatal
|
|
L<Malformed UTF-8 string in "%s"
|
|
|perldiag/Malformed UTF-8 string in "%s">
|
|
|
|
=item *
|
|
|
|
L<Setting C<< $E<sol> >> to a reference to %s as a form of slurp is deprecated, treating as undef. This will be fatal in Perl 5.28
|
|
|perldiag/Setting C<< $E<sol> >> to a reference to %s as a form of slurp is deprecated, treating as undef. This will be fatal in Perl 5.28>
|
|
|
|
This existing warning has had the I<this will be fatal> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<C<${^ENCODING}> is no longer supported. Its use will be fatal in Perl 5.28|perldiag/"${^ENCODING} is no longer supported. Its use will be fatal in Perl 5.28">
|
|
|
|
This warning used to be: "Setting C<${^ENCODING}> is deprecated".
|
|
|
|
The special action of the variable C<${^ENCODING}> was formerly used to
|
|
implement the C<encoding> pragma. As of Perl 5.26, rather than being
|
|
deprecated, assigning to this variable now has no effect except to issue
|
|
the warning.
|
|
|
|
=item *
|
|
|
|
L<Too few arguments for subroutine '%s'
|
|
|perldiag/Too few arguments for subroutine '%s'>
|
|
|
|
This warning now includes the name of the offending subroutine.
|
|
|
|
=item *
|
|
|
|
L<Too many arguments for subroutine '%s'
|
|
|perldiag/Too many arguments for subroutine '%s'>
|
|
|
|
This warning now includes the name of the offending subroutine.
|
|
|
|
=item *
|
|
|
|
L<Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in mE<sol>%sE<sol>
|
|
|perldiag/Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by S<< E<lt>-- HERE >> in mE<sol>%sE<sol>>
|
|
|
|
This existing warning has had the I<here (and will be fatal...)> text
|
|
added in this release.
|
|
|
|
=item *
|
|
|
|
L<Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28
|
|
|perldiag/Unknown charname '' is deprecated. Its use will be fatal in Perl 5.28>
|
|
|
|
This existing warning has had the I<its use will be fatal> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28
|
|
|perldiag/Use of bare E<lt>E<lt> to mean E<lt>E<lt>"" is deprecated. Its use will be fatal in Perl 5.28>
|
|
|
|
This existing warning has had the I<its use will be fatal> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28
|
|
|perldiag/Use of code point 0x%s is deprecated; the permissible max is 0x%s. This will be fatal in Perl 5.28>
|
|
|
|
This existing warning has had the I<this will be fatal> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<Use of comma-less variable list is deprecated. Its use will be fatal in Perl 5.28
|
|
|perldiag/Use of comma-less variable list is deprecated. Its use will be fatal in Perl 5.28>
|
|
|
|
This existing warning has had the I<its use will be fatal> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<Use of inherited C<AUTOLOAD> for non-method %s() is deprecated. This will be fatal in Perl 5.28
|
|
|perldiag/Use of inherited C<AUTOLOAD> for non-method %s() is deprecated. This will be fatal in Perl 5.28>
|
|
|
|
This existing warning has had the I<this will be fatal> text added in
|
|
this release.
|
|
|
|
=item *
|
|
|
|
L<Use of strings with code points over 0xFF as arguments to %s operator is deprecated. This will be a fatal error in Perl 5.28
|
|
|perldiag/Use of strings with code points over 0xFF as arguments to %s operator is deprecated. This will be a fatal error in Perl 5.28>
|
|
|
|
This existing warning has had the I<this will be a fatal error> text added in
|
|
this release.
|
|
|
|
=back
|
|
|
|
=head1 Utility Changes
|
|
|
|
=head2 F<c2ph> and F<pstruct>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
These old utilities have long since superceded by L<h2xs>, and are
|
|
now gone from the distribution.
|
|
|
|
=back
|
|
|
|
=head2 F<Porting/pod_lib.pl>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Removed spurious executable bit.
|
|
|
|
=item *
|
|
|
|
Account for the possibility of DOS file endings.
|
|
|
|
=back
|
|
|
|
=head2 F<Porting/sync-with-cpan>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Many improvements.
|
|
|
|
=back
|
|
|
|
=head2 F<perf/benchmarks>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Tidy file, rename some symbols.
|
|
|
|
=back
|
|
|
|
=head2 F<Porting/checkAUTHORS.pl>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Replace obscure character range with C<\w>.
|
|
|
|
=back
|
|
|
|
=head2 F<t/porting/regen.t>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Try to be more helpful when tests fail.
|
|
|
|
=back
|
|
|
|
=head2 F<utils/h2xs.PL>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Avoid infinite loop for enums.
|
|
|
|
=back
|
|
|
|
=head2 L<perlbug>
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Long lines in the message body are now wrapped at 900 characters, to stay
|
|
well within the 1000-character limit imposed by SMTP mail transfer agents.
|
|
This is particularly likely to be important for the list of arguments to
|
|
F<Configure>, which can readily exceed the limit if, for example, it names
|
|
several non-default installation paths. This change also adds the first unit
|
|
tests for perlbug.
|
|
L<[perl #128020]|https://rt.perl.org/Public/Bug/Display.html?id=128020>
|
|
|
|
=back
|
|
|
|
=head1 Configuration and Compilation
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
C<-Ddefault_inc_excludes_dot> has added, and enabled by default.
|
|
|
|
=item *
|
|
|
|
The C<dtrace> build process has further changes
|
|
L<[GH #15718]|https://github.com/Perl/perl5/issues/15718>:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
If the C<-xnolibs> is available, use that so a F<dtrace> perl can be
|
|
built within a FreeBSD jail.
|
|
|
|
=item *
|
|
|
|
On systems that build a F<dtrace> object file (FreeBSD, Solaris, and
|
|
SystemTap's dtrace emulation), copy the input objects to a separate
|
|
directory and process them there, and use those objects in the link,
|
|
since C<dtrace -G> also modifies these objects.
|
|
|
|
=item *
|
|
|
|
Add F<libelf> to the build on FreeBSD 10.x, since F<dtrace> adds
|
|
references to F<libelf> symbols.
|
|
|
|
=item *
|
|
|
|
Generate a dummy F<dtrace_main.o> if C<dtrace -G> fails to build it. A
|
|
default build on Solaris generates probes from the unused inline
|
|
functions, while they don't on FreeBSD, which causes C<dtrace -G> to
|
|
fail.
|
|
|
|
=back
|
|
|
|
=item *
|
|
|
|
You can now disable perl's use of the C<PERL_HASH_SEED> and
|
|
C<PERL_PERTURB_KEYS> environment variables by configuring perl with
|
|
C<-Accflags=NO_PERL_HASH_ENV>.
|
|
|
|
=item *
|
|
|
|
You can now disable perl's use of the C<PERL_HASH_SEED_DEBUG> environment
|
|
variable by configuring perl with
|
|
C<-Accflags=-DNO_PERL_HASH_SEED_DEBUG>.
|
|
|
|
=item *
|
|
|
|
F<Configure> now zeroes out the alignment bytes when calculating the bytes
|
|
for 80-bit C<NaN> and C<Inf> to make builds more reproducible.
|
|
L<[GH #15725]|https://github.com/Perl/perl5/issues/15725>
|
|
|
|
=item *
|
|
|
|
Since v5.18, for testing purposes we have included support for
|
|
building perl with a variety of non-standard, and non-recommended
|
|
hash functions. Since we do not recommend the use of these functions,
|
|
we have removed them and their corresponding build options. Specifically
|
|
this includes the following build options:
|
|
|
|
PERL_HASH_FUNC_SDBM
|
|
PERL_HASH_FUNC_DJB2
|
|
PERL_HASH_FUNC_SUPERFAST
|
|
PERL_HASH_FUNC_MURMUR3
|
|
PERL_HASH_FUNC_ONE_AT_A_TIME
|
|
PERL_HASH_FUNC_ONE_AT_A_TIME_OLD
|
|
PERL_HASH_FUNC_MURMUR_HASH_64A
|
|
PERL_HASH_FUNC_MURMUR_HASH_64B
|
|
|
|
=item *
|
|
|
|
Remove "Warning: perl appears in your path"
|
|
|
|
This install warning is more or less obsolete, since most platforms already
|
|
B<will> have a F</usr/bin/perl> or similar provided by the OS.
|
|
|
|
=item *
|
|
|
|
Reduce verbosity of C<make install.man>
|
|
|
|
Previously, two progress messages were emitted for each manpage: one by
|
|
installman itself, and one by the function in F<install_lib.pl> that it calls to
|
|
actually install the file. Disabling the second of those in each case saves
|
|
over 750 lines of unhelpful output.
|
|
|
|
=item *
|
|
|
|
Cleanup for C<clang -Weverything> support.
|
|
L<[GH #15683]|https://github.com/Perl/perl5/issues/15683>
|
|
|
|
=item *
|
|
|
|
F<Configure>: signbit scan was assuming too much, stop assuming negative 0.
|
|
|
|
=item *
|
|
|
|
Various compiler warnings have been silenced.
|
|
|
|
=item *
|
|
|
|
Several smaller changes have been made to remove impediments to compiling
|
|
under C++11.
|
|
|
|
=item *
|
|
|
|
Builds using C<USE_PAD_RESET> now work again; this configuration had
|
|
bit-rotted.
|
|
|
|
=item *
|
|
|
|
A probe for C<gai_strerror> was added to F<Configure> that checks if
|
|
the C<gai_strerror()> routine is available and can be used to
|
|
translate error codes returned by C<getaddrinfo()> into human
|
|
readable strings.
|
|
|
|
=item *
|
|
|
|
F<Configure> now aborts if both C<-Duselongdouble> and C<-Dusequadmath> are
|
|
requested.
|
|
L<[GH #14944]|https://github.com/Perl/perl5/issues/14944>
|
|
|
|
=item *
|
|
|
|
Fixed a bug in which F<Configure> could append C<-quadmath> to the
|
|
archname even if it was already present.
|
|
L<[GH #15423]|https://github.com/Perl/perl5/issues/15423>
|
|
|
|
=item *
|
|
|
|
Clang builds with C<-DPERL_GLOBAL_STRUCT> or
|
|
C<-DPERL_GLOBAL_STRUCT_PRIVATE> have
|
|
been fixed (by disabling Thread Safety Analysis for these configurations).
|
|
|
|
=item *
|
|
|
|
F<make_ext.pl> no longer updates a module's F<pm_to_blib> file when no
|
|
files require updates. This could cause dependencies, F<perlmain.c>
|
|
in particular, to be rebuilt unnecessarily.
|
|
L<[GH #15060]|https://github.com/Perl/perl5/issues/15060>
|
|
|
|
=item *
|
|
|
|
The output of C<perl -V> has been reformatted so that each configuration
|
|
and compile-time option is now listed one per line, to improve
|
|
readability.
|
|
|
|
=item *
|
|
|
|
F<Configure> now builds C<miniperl> and C<generate_uudmap> if you
|
|
invoke it with C<-Dusecrosscompiler> but not C<-Dtargethost=somehost>.
|
|
This means you can supply your target platform C<config.sh>, generate
|
|
the headers and proceed to build your cross-target perl.
|
|
L<[GH #15126]|https://github.com/Perl/perl5/issues/15126>
|
|
|
|
=item *
|
|
|
|
Perl built with C<-Accflags=-DPERL_TRACE_OPS> now only dumps the operator
|
|
counts when the environment variable C<PERL_TRACE_OPS> is set to a
|
|
non-zero integer. This allows C<make test> to pass on such a build.
|
|
|
|
=item *
|
|
|
|
When building with GCC 6 and link-time optimization (the C<-flto> option to
|
|
C<gcc>), F<Configure> was treating all probed symbols as present on the
|
|
system, regardless of whether they actually exist. This has been fixed.
|
|
L<[GH #15322]|https://github.com/Perl/perl5/issues/15322>
|
|
|
|
=item *
|
|
|
|
The F<t/test.pl> library is used for internal testing of Perl itself, and
|
|
also copied by several CPAN modules. Some of those modules must work on
|
|
older versions of Perl, so F<t/test.pl> must in turn avoid newer Perl
|
|
features. Compatibility with Perl 5.8 was inadvertently removed some time
|
|
ago; it has now been restored.
|
|
L<[GH #15302]|https://github.com/Perl/perl5/issues/15302>
|
|
|
|
=item *
|
|
|
|
The build process no longer emits an extra blank line before building each
|
|
"simple" extension (those with only F<*.pm> and F<*.pod> files).
|
|
|
|
=back
|
|
|
|
=head1 Testing
|
|
|
|
Tests were added and changed to reflect the other additions and changes
|
|
in this release. Furthermore, these substantive changes were made:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A new test script, F<comp/parser_run.t>, has been added that is like
|
|
F<comp/parser.t> but with F<test.pl> included so that C<runperl()> and the
|
|
like are available for use.
|
|
|
|
=item *
|
|
|
|
Tests for locales were erroneously using locales incompatible with Perl.
|
|
|
|
=item *
|
|
|
|
Some parts of the test suite that try to exhaustively test edge cases in the
|
|
regex implementation have been restricted to running for a maximum of five
|
|
minutes. On slow systems they could otherwise take several hours, without
|
|
significantly improving our understanding of the correctness of the code
|
|
under test.
|
|
|
|
=item *
|
|
|
|
A new internal facility allows analysing the time taken by the individual
|
|
tests in Perl's own test suite; see F<Porting/harness-timer-report.pl>.
|
|
|
|
=item *
|
|
|
|
F<t/re/regexp_nonull.t> has been added to test that the regular expression
|
|
engine can handle scalars that do not have a null byte just past the end of
|
|
the string.
|
|
|
|
=item *
|
|
|
|
A new test script, F<t/op/decl-refs.t>, has been added to test the new feature
|
|
L</Declaring a reference to a variable>.
|
|
|
|
=item *
|
|
|
|
A new test script, F<t/re/keep_tabs.t> has been added to contain tests
|
|
where C<\t> characters should not be expanded into spaces.
|
|
|
|
=item *
|
|
|
|
A new test script, F<t/re/anyof.t>, has been added to test that the ANYOF nodes
|
|
generated by bracketed character classes are as expected.
|
|
|
|
=item *
|
|
|
|
There is now more extensive testing of the Unicode-related API macros
|
|
and functions.
|
|
|
|
=item *
|
|
|
|
Several of the longer running API test files have been split into
|
|
multiple test files so that they can be run in parallel.
|
|
|
|
=item *
|
|
|
|
F<t/harness> now tries really hard not to run tests which are located
|
|
outside of the Perl source tree.
|
|
L<[GH #14578]|https://github.com/Perl/perl5/issues/14578>
|
|
|
|
=item *
|
|
|
|
Prevent debugger tests (F<lib/perl5db.t>) from failing due to the contents
|
|
of C<$ENV{PERLDB_OPTS}>.
|
|
L<[GH #15782]|https://github.com/Perl/perl5/issues/15782>
|
|
|
|
=back
|
|
|
|
=head1 Platform Support
|
|
|
|
=head2 New Platforms
|
|
|
|
=over 4
|
|
|
|
=item NetBSD/VAX
|
|
|
|
Perl now compiles under NetBSD on VAX machines. However, it's not
|
|
possible for that platform to implement floating-point infinities and
|
|
NaNs compatible with most modern systems, which implement the IEEE-754
|
|
floating point standard. The hexadecimal floating point (C<0x...p[+-]n>
|
|
literals, C<printf %a>) is not implemented, either.
|
|
The C<make test> passes 98% of tests.
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Test fixes and minor updates.
|
|
|
|
=item *
|
|
|
|
Account for lack of C<inf>, C<nan>, and C<-0.0> support.
|
|
|
|
=back
|
|
|
|
=back
|
|
|
|
=head2 Platform-Specific Notes
|
|
|
|
=over 4
|
|
|
|
=item Darwin
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Don't treat C<-Dprefix=/usr> as special: instead require an extra option
|
|
C<-Ddarwin_distribution> to produce the same results.
|
|
|
|
=item *
|
|
|
|
OS X El Capitan doesn't implement the C<clock_gettime()> or
|
|
C<clock_getres()> APIs; emulate them as necessary.
|
|
|
|
=item *
|
|
|
|
Deprecated C<syscall(2)> on macOS 10.12.
|
|
|
|
=back
|
|
|
|
=item EBCDIC
|
|
|
|
Several tests have been updated to work (or be skipped) on EBCDIC platforms.
|
|
|
|
=item HP-UX
|
|
|
|
The L<Net::Ping> UDP test is now skipped on HP-UX.
|
|
|
|
=item Hurd
|
|
|
|
The hints for Hurd have been improved, enabling malloc wrap and reporting the
|
|
GNU libc used (previously it was an empty string when reported).
|
|
|
|
=item VAX
|
|
|
|
VAX floating point formats are now supported on NetBSD.
|
|
|
|
=item VMS
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The path separator for the C<PERL5LIB> and C<PERLLIB> environment entries is
|
|
now a colon (C<":">) when running under a Unix shell. There is no change when
|
|
running under DCL (it's still C<"|">).
|
|
|
|
=item *
|
|
|
|
F<configure.com> now recognizes the VSI-branded C compiler and no longer
|
|
recognizes the "DEC"-branded C compiler (as there hasn't been such a thing for
|
|
15 or more years).
|
|
|
|
=back
|
|
|
|
=item Windows
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Support for compiling perl on Windows using Microsoft Visual Studio 2015
|
|
(containing Visual C++ 14.0) has been added.
|
|
|
|
This version of VC++ includes a completely rewritten C run-time library, some
|
|
of the changes in which mean that work done to resolve a socket
|
|
C<close()> bug in
|
|
perl #120091 and perl #118059 is not workable in its current state with this
|
|
version of VC++. Therefore, we have effectively reverted that bug fix for
|
|
VS2015 onwards on the basis that being able to build with VS2015 onwards is
|
|
more important than keeping the bug fix. We may revisit this in the future to
|
|
attempt to fix the bug again in a way that is compatible with VS2015.
|
|
|
|
These changes do not affect compilation with GCC or with Visual Studio versions
|
|
up to and including VS2013, I<i.e.>, the bug fix is retained (unchanged) for those
|
|
compilers.
|
|
|
|
Note that you may experience compatibility problems if you mix a perl built
|
|
with GCC or VS E<lt>= VS2013 with XS modules built with VS2015, or if you mix a
|
|
perl built with VS2015 with XS modules built with GCC or VS E<lt>= VS2013.
|
|
Some incompatibility may arise because of the bug fix that has been reverted
|
|
for VS2015 builds of perl, but there may well be incompatibility anyway because
|
|
of the rewritten CRT in VS2015 (I<e.g.>, see discussion at
|
|
L<http://stackoverflow.com/questions/30412951>).
|
|
|
|
=item *
|
|
|
|
It now automatically detects GCC versus Visual C and sets the VC version
|
|
number on Win32.
|
|
|
|
=back
|
|
|
|
=item Linux
|
|
|
|
Drop support for Linux F<a.out> executable format. Linux has used ELF for
|
|
over twenty years.
|
|
|
|
=item OpenBSD 6
|
|
|
|
OpenBSD 6 still does not support returning C<pid>, C<gid>, or C<uid> with
|
|
C<SA_SIGINFO>. Make sure to account for it.
|
|
|
|
=item FreeBSD
|
|
|
|
F<t/uni/overload.t>: Skip hanging test on FreeBSD.
|
|
|
|
=item DragonFly BSD
|
|
|
|
DragonFly BSD now has support for C<setproctitle()>.
|
|
L<[GH #15703]|https://github.com/Perl/perl5/issues/15703>.
|
|
|
|
=back
|
|
|
|
=head1 Internal Changes
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A new API function L<C<sv_setpv_bufsize()>|perlapi/sv_setpv_bufsize>
|
|
allows simultaneously setting the
|
|
length and the allocated size of the buffer in an C<SV>, growing the
|
|
buffer if necessary.
|
|
|
|
=item *
|
|
|
|
A new API macro L<C<SvPVCLEAR()>|perlapi/SvPVCLEAR> sets its C<SV>
|
|
argument to an empty string,
|
|
like Perl-space C<$x = ''>, but with several optimisations.
|
|
|
|
=item *
|
|
|
|
Several new macros and functions for dealing with Unicode and
|
|
UTF-8-encoded strings have been added to the API, as well as some
|
|
changes in the
|
|
functionality of existing functions (see L<perlapi/Unicode Support> for
|
|
more details):
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
New versions of the API macros like C<isALPHA_utf8> and C<toLOWER_utf8>
|
|
have been added, each with the suffix C<_safe>, like
|
|
L<C<isSPACE_utf8_safe>|perlapi/isSPACE>. These take an extra
|
|
parameter, giving an upper
|
|
limit of how far into the string it is safe to read. Using the old
|
|
versions could cause attempts to read beyond the end of the input buffer
|
|
if the UTF-8 is not well-formed, and their use now raises a deprecation
|
|
warning. Details are at L<perlapi/Character classification>.
|
|
|
|
=item *
|
|
|
|
Macros like L<C<isALPHA_utf8>|perlapi/isALPHA> and
|
|
L<C<toLOWER_utf8>|perlapi/toLOWER_utf8> now die if they detect
|
|
that their input UTF-8 is malformed. A deprecation warning had been
|
|
issued since Perl 5.18.
|
|
|
|
=item *
|
|
|
|
Several new macros for analysing the validity of utf8 sequences. These
|
|
are:
|
|
|
|
L<C<UTF8_GOT_ABOVE_31_BIT>|perlapi/UTF8_GOT_ABOVE_31_BIT>
|
|
L<C<UTF8_GOT_CONTINUATION>|perlapi/UTF8_GOT_CONTINUATION>
|
|
L<C<UTF8_GOT_EMPTY>|perlapi/UTF8_GOT_EMPTY>
|
|
L<C<UTF8_GOT_LONG>|perlapi/UTF8_GOT_LONG>
|
|
L<C<UTF8_GOT_NONCHAR>|perlapi/UTF8_GOT_NONCHAR>
|
|
L<C<UTF8_GOT_NON_CONTINUATION>|perlapi/UTF8_GOT_NON_CONTINUATION>
|
|
L<C<UTF8_GOT_OVERFLOW>|perlapi/UTF8_GOT_OVERFLOW>
|
|
L<C<UTF8_GOT_SHORT>|perlapi/UTF8_GOT_SHORT>
|
|
L<C<UTF8_GOT_SUPER>|perlapi/UTF8_GOT_SUPER>
|
|
L<C<UTF8_GOT_SURROGATE>|perlapi/UTF8_GOT_SURROGATE>
|
|
L<C<UTF8_IS_INVARIANT>|perlapi/UTF8_IS_INVARIANT>
|
|
L<C<UTF8_IS_NONCHAR>|perlapi/UTF8_IS_NONCHAR>
|
|
L<C<UTF8_IS_SUPER>|perlapi/UTF8_IS_SUPER>
|
|
L<C<UTF8_IS_SURROGATE>|perlapi/UTF8_IS_SURROGATE>
|
|
L<C<UVCHR_IS_INVARIANT>|perlapi/UVCHR_IS_INVARIANT>
|
|
L<C<isUTF8_CHAR_flags>|perlapi/isUTF8_CHAR_flags>
|
|
L<C<isSTRICT_UTF8_CHAR>|perlapi/isSTRICT_UTF8_CHAR>
|
|
L<C<isC9_STRICT_UTF8_CHAR>|perlapi/isC9_STRICT_UTF8_CHAR>
|
|
|
|
=item *
|
|
|
|
Functions that are all extensions of the C<is_utf8_string_I<*>()> functions,
|
|
that apply various restrictions to the UTF-8 recognized as valid:
|
|
|
|
L<C<is_strict_utf8_string>|perlapi/is_strict_utf8_string>,
|
|
L<C<is_strict_utf8_string_loc>|perlapi/is_strict_utf8_string_loc>,
|
|
L<C<is_strict_utf8_string_loclen>|perlapi/is_strict_utf8_string_loclen>,
|
|
|
|
L<C<is_c9strict_utf8_string>|perlapi/is_c9strict_utf8_string>,
|
|
L<C<is_c9strict_utf8_string_loc>|perlapi/is_c9strict_utf8_string_loc>,
|
|
L<C<is_c9strict_utf8_string_loclen>|perlapi/is_c9strict_utf8_string_loclen>,
|
|
|
|
L<C<is_utf8_string_flags>|perlapi/is_utf8_string_flags>,
|
|
L<C<is_utf8_string_loc_flags>|perlapi/is_utf8_string_loc_flags>,
|
|
L<C<is_utf8_string_loclen_flags>|perlapi/is_utf8_string_loclen_flags>,
|
|
|
|
L<C<is_utf8_fixed_width_buf_flags>|perlapi/is_utf8_fixed_width_buf_flags>,
|
|
L<C<is_utf8_fixed_width_buf_loc_flags>|perlapi/is_utf8_fixed_width_buf_loc_flags>,
|
|
L<C<is_utf8_fixed_width_buf_loclen_flags>|perlapi/is_utf8_fixed_width_buf_loclen_flags>.
|
|
|
|
L<C<is_utf8_invariant_string>|perlapi/is_utf8_invariant_string>.
|
|
L<C<is_utf8_valid_partial_char>|perlapi/is_utf8_valid_partial_char>.
|
|
L<C<is_utf8_valid_partial_char_flags>|perlapi/is_utf8_valid_partial_char_flags>.
|
|
|
|
=item *
|
|
|
|
The functions L<C<utf8n_to_uvchr>|perlapi/utf8n_to_uvchr> and its
|
|
derivatives have had several changes of behaviour.
|
|
|
|
Calling them, while passing a string length of 0 is now asserted against
|
|
in DEBUGGING builds, and otherwise, returns the Unicode REPLACEMENT
|
|
CHARACTER. If you have nothing to decode, you shouldn't call the decode
|
|
function.
|
|
|
|
They now return the Unicode REPLACEMENT CHARACTER if called with UTF-8
|
|
that has the overlong malformation and that malformation is allowed by
|
|
the input parameters. This malformation is where the UTF-8 looks valid
|
|
syntactically, but there is a shorter sequence that yields the same code
|
|
point. This has been forbidden since Unicode version 3.1.
|
|
|
|
They now accept an input
|
|
flag to allow the overflow malformation. This malformation is when the
|
|
UTF-8 may be syntactically valid, but the code point it represents is
|
|
not capable of being represented in the word length on the platform.
|
|
What "allowed" means, in this case, is that the function doesn't return an
|
|
error, and it advances the parse pointer to beyond the UTF-8 in
|
|
question, but it returns the Unicode REPLACEMENT CHARACTER as the value
|
|
of the code point (since the real value is not representable).
|
|
|
|
They no longer abandon searching for other malformations when the first
|
|
one is encountered. A call to one of these functions thus can generate
|
|
multiple diagnostics, instead of just one.
|
|
|
|
=item *
|
|
|
|
L<C<valid_utf8_to_uvchr()>|perlapi/valid_utf8_to_uvchr> has been added
|
|
to the API (although it was
|
|
present in core earlier). Like C<utf8_to_uvchr_buf()>, but assumes that
|
|
the next character is well-formed. Use with caution.
|
|
|
|
=item *
|
|
|
|
A new function, L<C<utf8n_to_uvchr_error>|perlapi/utf8n_to_uvchr_error>,
|
|
has been added for
|
|
use by modules that need to know the details of UTF-8 malformations
|
|
beyond pass/fail. Previously, the only ways to know why a sequence was
|
|
ill-formed was to capture and parse the generated diagnostics or to do
|
|
your own analysis.
|
|
|
|
=item *
|
|
|
|
There is now a safer version of utf8_hop(), called
|
|
L<C<utf8_hop_safe()>|perlapi/utf8_hop_safe>.
|
|
Unlike utf8_hop(), utf8_hop_safe() won't navigate before the beginning or
|
|
after the end of the supplied buffer.
|
|
|
|
=item *
|
|
|
|
Two new functions, L<C<utf8_hop_forward()>|perlapi/utf8_hop_forward> and
|
|
L<C<utf8_hop_back()>|perlapi/utf8_hop_back> are
|
|
similar to C<utf8_hop_safe()> but are for when you know which direction
|
|
you wish to travel.
|
|
|
|
=item *
|
|
|
|
Two new macros which return useful utf8 byte sequences:
|
|
|
|
L<C<BOM_UTF8>|perlapi/BOM_UTF8>
|
|
|
|
L<C<REPLACEMENT_CHARACTER_UTF8>|perlapi/REPLACEMENT_CHARACTER_UTF8>
|
|
|
|
=back
|
|
|
|
=item *
|
|
|
|
Perl is now built with the C<PERL_OP_PARENT> compiler define enabled by
|
|
default. To disable it, use the C<PERL_NO_OP_PARENT> compiler define.
|
|
This flag alters how the C<op_sibling> field is used in C<OP> structures,
|
|
and has been available optionally since perl 5.22.
|
|
|
|
See L<perl5220delta/"Internal Changes"> for more details of what this
|
|
build option does.
|
|
|
|
=item *
|
|
|
|
Three new ops, C<OP_ARGELEM>, C<OP_ARGDEFELEM>, and C<OP_ARGCHECK> have
|
|
been added. These are intended principally to implement the individual
|
|
elements of a subroutine signature, plus any overall checking required.
|
|
|
|
=item *
|
|
|
|
The C<OP_PUSHRE> op has been eliminated and the C<OP_SPLIT> op has been
|
|
changed from class C<LISTOP> to C<PMOP>.
|
|
|
|
Formerly the first child of a split would be a C<pushre>, which would have the
|
|
C<split>'s regex attached to it. Now the regex is attached directly to the
|
|
C<split> op, and the C<pushre> has been eliminated.
|
|
|
|
=item *
|
|
|
|
The L<C<op_class()>|perlapi/op_class> API function has been added. This
|
|
is like the existing
|
|
C<OP_CLASS()> macro, but can more accurately determine what struct an op
|
|
has been allocated as. For example C<OP_CLASS()> might return
|
|
C<OA_BASEOP_OR_UNOP> indicating that ops of this type are usually
|
|
allocated as an C<OP> or C<UNOP>; while C<op_class()> will return
|
|
C<OPclass_BASEOP> or C<OPclass_UNOP> as appropriate.
|
|
|
|
=item *
|
|
|
|
All parts of the internals now agree that the C<sassign> op is a C<BINOP>;
|
|
previously it was listed as a C<BASEOP> in F<regen/opcodes>, which meant
|
|
that several parts of the internals had to be special-cased to accommodate
|
|
it. This oddity's original motivation was to handle code like C<$x ||= 1>;
|
|
that is now handled in a simpler way.
|
|
|
|
=item *
|
|
|
|
The output format of the L<C<op_dump()>|perlapi/op_dump> function (as
|
|
used by C<perl -Dx>)
|
|
has changed: it now displays an "ASCII-art" tree structure, and shows more
|
|
low-level details about each op, such as its address and class.
|
|
|
|
=item *
|
|
|
|
The C<PADOFFSET> type has changed from being unsigned to signed, and
|
|
several pad-related variables such as C<PL_padix> have changed from being
|
|
of type C<I32> to type C<PADOFFSET>.
|
|
|
|
=item *
|
|
|
|
The C<DEBUGGING>-mode output for regex compilation and execution has been
|
|
enhanced.
|
|
|
|
=item *
|
|
|
|
Several obscure SV flags have been eliminated, sometimes along with the
|
|
macros which manipulate them: C<SVpbm_VALID>, C<SVpbm_TAIL>, C<SvTAIL_on>,
|
|
C<SvTAIL_off>, C<SVrepl_EVAL>, C<SvEVALED>.
|
|
|
|
=item *
|
|
|
|
An OP C<op_private> flag has been eliminated: C<OPpRUNTIME>. This used to
|
|
often get set on C<PMOP> ops, but had become meaningless over time.
|
|
|
|
=back
|
|
|
|
=head1 Selected Bug Fixes
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Perl no longer panics when switching into some locales on machines with
|
|
buggy C<strxfrm()> implementations in their F<libc>.
|
|
L<[GH #13768]|https://github.com/Perl/perl5/issues/13768>
|
|
|
|
=item *
|
|
|
|
C< $-{$name} > would leak an C<AV> on each access if the regular
|
|
expression had no named captures. The same applies to access to any
|
|
hash tied with L<Tie::Hash::NamedCapture> and C<< all =E<gt> 1 >>.
|
|
L<[GH #15882]|https://github.com/Perl/perl5/issues/15882>
|
|
|
|
=item *
|
|
|
|
Attempting to use the deprecated variable C<$#> as the object in an
|
|
indirect object method call could cause a heap use after free or
|
|
buffer overflow.
|
|
L<[GH #15599]|https://github.com/Perl/perl5/issues/15599>
|
|
|
|
=item *
|
|
|
|
When checking for an indirect object method call, in some rare cases
|
|
the parser could reallocate the line buffer but then continue to use
|
|
pointers to the old buffer.
|
|
L<[GH #15585]|https://github.com/Perl/perl5/issues/15585>
|
|
|
|
=item *
|
|
|
|
Supplying a glob as the format argument to
|
|
L<C<formline>|perlfunc/formline> would
|
|
cause an assertion failure.
|
|
L<[GH #15862]|https://github.com/Perl/perl5/issues/15862>
|
|
|
|
=item *
|
|
|
|
Code like C< $value1 =~ qr/.../ ~~ $value2 > would have the match
|
|
converted into a C<qr//> operator, leaving extra elements on the stack to
|
|
confuse any surrounding expression.
|
|
L<[GH #15859]|https://github.com/Perl/perl5/issues/15859>
|
|
|
|
=item *
|
|
|
|
Since v5.24 in some obscure cases, a regex which included code blocks
|
|
from multiple sources (I<e.g.>, via embedded via C<qr//> objects) could end up
|
|
with the wrong current pad and crash or give weird results.
|
|
L<[GH #15657]|https://github.com/Perl/perl5/issues/15657>
|
|
|
|
=item *
|
|
|
|
Occasionally C<local()>s in a code block within a patterns weren't being
|
|
undone when the pattern matching backtracked over the code block.
|
|
L<[GH #15056]|https://github.com/Perl/perl5/issues/15056>
|
|
|
|
=item *
|
|
|
|
Using C<substr()> to modify a magic variable could access freed memory
|
|
in some cases.
|
|
L<[GH #15871]|https://github.com/Perl/perl5/issues/15871>
|
|
|
|
=item *
|
|
|
|
Under C<use utf8>, the entire source code is now checked for being UTF-8
|
|
well formed, not just quoted strings as before.
|
|
L<[GH #14973]|https://github.com/Perl/perl5/issues/14973>.
|
|
|
|
=item *
|
|
|
|
The range operator C<".."> on strings now handles its arguments correctly when in
|
|
the scope of the L<< C<unicode_strings>|feature/"The 'unicode_strings' feature" >>
|
|
feature. The previous behaviour was sufficiently unexpected that we believe no
|
|
correct program could have made use of it.
|
|
|
|
=item *
|
|
|
|
The C<split> operator did not ensure enough space was allocated for
|
|
its return value in scalar context. It could then write a single
|
|
pointer immediately beyond the end of the memory block allocated for
|
|
the stack.
|
|
L<[GH #15749]|https://github.com/Perl/perl5/issues/15749>
|
|
|
|
=item *
|
|
|
|
Using a large code point with the C<"W"> pack template character with
|
|
the current output position aligned at just the right point could
|
|
cause a write of a single zero byte immediately beyond the end of an
|
|
allocated buffer.
|
|
L<[GH #15572]|https://github.com/Perl/perl5/issues/15572>
|
|
|
|
=item *
|
|
|
|
Supplying a format's picture argument as part of the format argument list
|
|
where the picture specifies modifying the argument could cause an
|
|
access to the new freed compiled format.
|
|
L<[GH #15566]|https://github.com/Perl/perl5/issues/15566>
|
|
|
|
=item *
|
|
|
|
The L<sort()|perlfunc/sort> operator's built-in numeric comparison
|
|
function didn't handle large integers that weren't exactly
|
|
representable by a double. This now uses the same code used to
|
|
implement the C<< E<lt>=E<gt> >> operator.
|
|
L<[GH #15768]|https://github.com/Perl/perl5/issues/15768>
|
|
|
|
=item *
|
|
|
|
Fix issues with C</(?{ ... E<lt>E<lt>EOF })/> that broke
|
|
L<Method::Signatures>.
|
|
L<[GH #15779]|https://github.com/Perl/perl5/issues/15779>
|
|
|
|
=item *
|
|
|
|
Fixed an assertion failure with C<chop> and C<chomp>, which
|
|
could be triggered by C<chop(@x =~ tr/1/1/)>.
|
|
L<[GH #15738]|https://github.com/Perl/perl5/issues/15738>.
|
|
|
|
=item *
|
|
|
|
Fixed a comment skipping error in patterns under C</x>; it could stop
|
|
skipping a byte early, which could be in the middle of a UTF-8
|
|
character.
|
|
L<[GH #15790]|https://github.com/Perl/perl5/issues/15790>.
|
|
|
|
=item *
|
|
|
|
F<perldb> now ignores F</dev/tty> on non-Unix systems.
|
|
L<[GH #12244]|https://github.com/Perl/perl5/issues/12244>;
|
|
|
|
=item *
|
|
|
|
Fix assertion failure for C<{}-E<gt>$x> when C<$x> isn't defined.
|
|
L<[GH #15791]|https://github.com/Perl/perl5/issues/15791>.
|
|
|
|
=item *
|
|
|
|
Fix an assertion error which could be triggered when a lookahead string
|
|
in patterns exceeded a minimum length.
|
|
L<[GH #15796]|https://github.com/Perl/perl5/issues/15796>.
|
|
|
|
=item *
|
|
|
|
Only warn once per literal number about a misplaced C<"_">.
|
|
L<[GH #9989]|https://github.com/Perl/perl5/issues/9989>.
|
|
|
|
=item *
|
|
|
|
The C<tr///> parse code could be looking at uninitialized data after a
|
|
perse error.
|
|
L<[GH #15624]|https://github.com/Perl/perl5/issues/15624>.
|
|
|
|
=item *
|
|
|
|
In a pattern match, a back-reference (C<\1>) to an unmatched capture could
|
|
read back beyond the start of the string being matched.
|
|
L<[GH #15634]|https://github.com/Perl/perl5/issues/15634>.
|
|
|
|
=item *
|
|
|
|
C<use re 'strict'> is supposed to warn if you use a range (such as
|
|
C</(?[ [ X-Y ] ])/>) whose start and end digit aren't from the same group
|
|
of 10. It didn't do that for five groups of mathematical digits starting
|
|
at C<U+1D7E>.
|
|
|
|
=item *
|
|
|
|
A sub containing a "forward" declaration with the same name (I<e.g.>,
|
|
C<sub c { sub c; }>) could sometimes crash or loop infinitely.
|
|
L<[GH #15557]|https://github.com/Perl/perl5/issues/15557>
|
|
|
|
=item *
|
|
|
|
A crash in executing a regex with a non-anchored UTF-8 substring against a
|
|
target string that also used UTF-8 has been fixed.
|
|
L<[GH #15628]|https://github.com/Perl/perl5/issues/15628>
|
|
|
|
=item *
|
|
|
|
Previously, a shebang line like C<#!perl -i u> could be erroneously
|
|
interpreted as requesting the C<-u> option. This has been fixed.
|
|
L<[GH #15623]|https://github.com/Perl/perl5/issues/15623>
|
|
|
|
=item *
|
|
|
|
The regex engine was previously producing incorrect results in some rare
|
|
situations when backtracking past an alternation that matches only one
|
|
thing; this
|
|
showed up as capture buffers (C<$1>, C<$2>, I<etc.>) erroneously containing data
|
|
from regex execution paths that weren't actually executed for the final
|
|
match.
|
|
L<[GH #15666]|https://github.com/Perl/perl5/issues/15666>
|
|
|
|
=item *
|
|
|
|
Certain regexes making use of the experimental C<regex_sets> feature could
|
|
trigger an assertion failure. This has been fixed.
|
|
L<[GH #15620]|https://github.com/Perl/perl5/issues/15620>
|
|
|
|
=item *
|
|
|
|
Invalid assignments to a reference constructor (I<e.g.>, C<\eval=time>) could
|
|
sometimes crash in addition to giving a syntax error.
|
|
L<[GH #14815]|https://github.com/Perl/perl5/issues/14815>
|
|
|
|
=item *
|
|
|
|
The parser could sometimes crash if a bareword came after C<evalbytes>.
|
|
L<[GH #15586]|https://github.com/Perl/perl5/issues/15586>
|
|
|
|
=item *
|
|
|
|
Autoloading via a method call would warn erroneously ("Use of inherited
|
|
AUTOLOAD for non-method") if there was a stub present in the package into
|
|
which the invocant had been blessed. The warning is no longer emitted in
|
|
such circumstances.
|
|
L<[GH #9094]|https://github.com/Perl/perl5/issues/9094>
|
|
|
|
=item *
|
|
|
|
The use of C<splice> on arrays with non-existent elements could cause other
|
|
operators to crash.
|
|
L<[GH #15577]|https://github.com/Perl/perl5/issues/15577>
|
|
|
|
=item *
|
|
|
|
A possible buffer overrun when a pattern contains a fixed utf8 substring.
|
|
L<[GH #15534]|https://github.com/Perl/perl5/issues/15534>
|
|
|
|
=item *
|
|
|
|
Fixed two possible use-after-free bugs in perl's lexer.
|
|
L<[GH #15549]|https://github.com/Perl/perl5/issues/15549>
|
|
|
|
=item *
|
|
|
|
Fixed a crash with C<s///l> where it thought it was dealing with UTF-8
|
|
when it wasn't.
|
|
L<[GH #15543]|https://github.com/Perl/perl5/issues/15543>
|
|
|
|
=item *
|
|
|
|
Fixed a place where the regex parser was not setting the syntax error
|
|
correctly on a syntactically incorrect pattern.
|
|
L<[GH #15565]|https://github.com/Perl/perl5/issues/15565>
|
|
|
|
=item *
|
|
|
|
The C<&.> operator (and the C<"&"> operator, when it treats its arguments as
|
|
strings) were failing to append a trailing null byte if at least one string
|
|
was marked as utf8 internally. Many code paths (system calls, regexp
|
|
compilation) still expect there to be a null byte in the string buffer
|
|
just past the end of the logical string. An assertion failure was the
|
|
result.
|
|
L<[GH #15606]|https://github.com/Perl/perl5/issues/15606>
|
|
|
|
=item *
|
|
|
|
Avoid a heap-after-use error in the parser when creating an error messge
|
|
for a syntactically invalid heredoc.
|
|
L<[GH #15527]|https://github.com/Perl/perl5/issues/15527>
|
|
|
|
=item *
|
|
|
|
Fix a segfault when run with C<-DC> options on DEBUGGING builds.
|
|
L<[GH #15563]|https://github.com/Perl/perl5/issues/15563>
|
|
|
|
=item *
|
|
|
|
Fixed the parser error handling in subroutine attributes for an
|
|
'C<:attr(foo>' that does not have an ending 'C<")">'.
|
|
|
|
=item *
|
|
|
|
Fix the perl lexer to correctly handle a backslash as the last char in
|
|
quoted-string context. This actually fixed two bugs,
|
|
L<[GH #15546]|https://github.com/Perl/perl5/issues/15546> and
|
|
L<[GH #15582]|https://github.com/Perl/perl5/issues/15582>.
|
|
|
|
=item *
|
|
|
|
In the API function C<gv_fetchmethod_pvn_flags>, rework separator parsing
|
|
to prevent possible string overrun with an invalid C<len> argument.
|
|
L<[GH #15598]|https://github.com/Perl/perl5/issues/15598>
|
|
|
|
=item *
|
|
|
|
Problems with in-place array sorts: code like C<@a = sort { ... } @a>,
|
|
where the source and destination of the sort are the same plain array, are
|
|
optimised to do less copying around. Two side-effects of this optimisation
|
|
were that the contents of C<@a> as seen by sort routines were
|
|
partially sorted; and under some circumstances accessing C<@a> during the
|
|
sort could crash the interpreter. Both these issues have been fixed, and
|
|
Sort functions see the original value of C<@a>.
|
|
L<[GH #15387]|https://github.com/Perl/perl5/issues/15387>
|
|
|
|
=item *
|
|
|
|
Non-ASCII string delimiters are now reported correctly in error messages
|
|
for unterminated strings.
|
|
L<[GH #15469]|https://github.com/Perl/perl5/issues/15469>
|
|
|
|
=item *
|
|
|
|
C<pack("p", ...)> used to emit its warning ("Attempt to pack pointer to
|
|
temporary value") erroneously in some cases, but has been fixed.
|
|
|
|
=item *
|
|
|
|
C<@DB::args> is now exempt from "used once" warnings. The warnings only
|
|
occurred under B<-w>, because F<warnings.pm> itself uses C<@DB::args>
|
|
multiple times.
|
|
|
|
=item *
|
|
|
|
The use of built-in arrays or hash slices in a double-quoted string no
|
|
longer issues a warning ("Possible unintended interpolation...") if the
|
|
variable has not been mentioned before. This affected code like
|
|
C<qq|@DB::args|> and C<qq|@SIG{'CHLD', 'HUP'}|>. (The special variables
|
|
C<@-> and C<@+> were already exempt from the warning.)
|
|
|
|
=item *
|
|
|
|
C<gethostent> and similar functions now perform a null check internally, to
|
|
avoid crashing with the torsocks library. This was a regression from v5.22.
|
|
L<[GH #15478]|https://github.com/Perl/perl5/issues/15478>
|
|
|
|
=item *
|
|
|
|
C<defined *{'!'}>, C<defined *{'['}>, and C<defined *{'-'}> no longer leak
|
|
memory if the typeglob in question has never been accessed before.
|
|
|
|
=item *
|
|
|
|
Mentioning the same constant twice in a row (which is a syntax error) no
|
|
longer fails an assertion under debugging builds. This was a regression
|
|
from v5.20.
|
|
L<[GH #15017]|https://github.com/Perl/perl5/issues/15017>
|
|
|
|
=item *
|
|
|
|
Many issues relating to C<printf "%a"> of hexadecimal floating point
|
|
were fixed. In addition, the "subnormals" (formerly known as "denormals")
|
|
floating point numbers are now supported both with the plain IEEE 754
|
|
floating point numbers (64-bit or 128-bit) and the x86 80-bit
|
|
"extended precision". Note that subnormal hexadecimal floating
|
|
point literals will give a warning about "exponent underflow".
|
|
L<[GH #15495]|https://github.com/Perl/perl5/issues/15495>
|
|
L<[GH #15503]|https://github.com/Perl/perl5/issues/15503>
|
|
L<[GH #15504]|https://github.com/Perl/perl5/issues/15504>
|
|
L<[GH #15505]|https://github.com/Perl/perl5/issues/15505>
|
|
L<[GH #15510]|https://github.com/Perl/perl5/issues/15510>
|
|
L<[GH #15512]|https://github.com/Perl/perl5/issues/15512>
|
|
|
|
=item *
|
|
|
|
A regression in v5.24 with C<tr/\N{U+...}/foo/> when the code point was between
|
|
128 and 255 has been fixed.
|
|
L<[GH #15475]|https://github.com/Perl/perl5/issues/15475>.
|
|
|
|
=item *
|
|
|
|
Use of a string delimiter whose code point is above 2**31 now works
|
|
correctly on platforms that allow this. Previously, certain characters,
|
|
due to truncation, would be confused with other delimiter characters
|
|
with special meaning (such as C<"?"> in C<m?...?>), resulting
|
|
in inconsistent behaviour. Note that this is non-portable,
|
|
and is based on Perl's extension to UTF-8, and is probably not
|
|
displayable nor enterable by any editor.
|
|
L<[GH #15477]|https://github.com/Perl/perl5/issues/15477>
|
|
|
|
=item *
|
|
|
|
C<@{x> followed by a newline where C<"x"> represents a control or non-ASCII
|
|
character no longer produces a garbled syntax error message or a crash.
|
|
L<[GH #15518]|https://github.com/Perl/perl5/issues/15518>
|
|
|
|
=item *
|
|
|
|
An assertion failure with C<%: = 0> has been fixed.
|
|
L<[GH #15358]|https://github.com/Perl/perl5/issues/15358>
|
|
|
|
=item *
|
|
|
|
In Perl 5.18, the parsing of C<"$foo::$bar"> was accidentally changed, such
|
|
that it would be treated as C<$foo."::".$bar>. The previous behavior, which
|
|
was to parse it as C<$foo:: . $bar>, has been restored.
|
|
L<[GH #15408]|https://github.com/Perl/perl5/issues/15408>
|
|
|
|
=item *
|
|
|
|
Since Perl 5.20, line numbers have been off by one when perl is invoked with
|
|
the B<-x> switch. This has been fixed.
|
|
L<[GH #15413]|https://github.com/Perl/perl5/issues/15413>
|
|
|
|
=item *
|
|
|
|
Vivifying a subroutine stub in a deleted stash (I<e.g.>,
|
|
C<delete $My::{"Foo::"}; \&My::Foo::foo>) no longer crashes. It had begun
|
|
crashing in Perl 5.18.
|
|
L<[GH #15420]|https://github.com/Perl/perl5/issues/15420>
|
|
|
|
=item *
|
|
|
|
Some obscure cases of subroutines and file handles being freed at the same time
|
|
could result in crashes, but have been fixed. The crash was introduced in Perl
|
|
5.22.
|
|
L<[GH #15435]|https://github.com/Perl/perl5/issues/15435>
|
|
|
|
=item *
|
|
|
|
Code that looks for a variable name associated with an uninitialized value
|
|
could cause an assertion failure in cases where magic is involved, such as
|
|
C<$ISA[0][0]>. This has now been fixed.
|
|
L<[GH #15364]|https://github.com/Perl/perl5/issues/15364>
|
|
|
|
=item *
|
|
|
|
A crash caused by code generating the warning "Subroutine STASH::NAME
|
|
redefined" in cases such as C<sub P::f{} undef *P::; *P::f =sub{};> has been
|
|
fixed. In these cases, where the STASH is missing, the warning will now appear
|
|
as "Subroutine NAME redefined".
|
|
L<[GH #15368]|https://github.com/Perl/perl5/issues/15368>
|
|
|
|
=item *
|
|
|
|
Fixed an assertion triggered by some code that handles deprecated behavior in
|
|
formats, I<e.g.>, in cases like this:
|
|
|
|
format STDOUT =
|
|
@
|
|
0"$x"
|
|
|
|
L<[GH #15366]|https://github.com/Perl/perl5/issues/15366>
|
|
|
|
=item *
|
|
|
|
A possible divide by zero in string transformation code on Windows has been
|
|
avoided, fixing a crash when collating an empty string.
|
|
L<[GH #15439]|https://github.com/Perl/perl5/issues/15439>
|
|
|
|
=item *
|
|
|
|
Some regular expression parsing glitches could lead to assertion failures with
|
|
regular expressions such as C</(?E<lt>=/> and C</(?E<lt>!/>. This has now been fixed.
|
|
L<[GH #15332]|https://github.com/Perl/perl5/issues/15332>
|
|
|
|
=item *
|
|
|
|
C< until ($x = 1) { ... } > and C< ... until $x = 1 > now properly
|
|
warn when syntax warnings are enabled.
|
|
L<[GH #15138]|https://github.com/Perl/perl5/issues/15138>
|
|
|
|
=item *
|
|
|
|
socket() now leaves the error code returned by the system in C<$!> on
|
|
failure.
|
|
L<[GH #15383]|https://github.com/Perl/perl5/issues/15383>
|
|
|
|
=item *
|
|
|
|
Assignment variants of any bitwise ops under the C<bitwise> feature would
|
|
crash if the left-hand side was an array or hash.
|
|
L<[GH #15346]|https://github.com/Perl/perl5/issues/15346>
|
|
|
|
=item *
|
|
|
|
C<require> followed by a single colon (as in C<foo() ? require : ...> is
|
|
now parsed correctly as C<require> with implicit C<$_>, rather than
|
|
C<require "">.
|
|
L<[GH #15380]|https://github.com/Perl/perl5/issues/15380>
|
|
|
|
=item *
|
|
|
|
Scalar C<keys %hash> can now be assigned to consistently in all scalar
|
|
lvalue contexts. Previously it worked for some contexts but not others.
|
|
|
|
=item *
|
|
|
|
List assignment to C<vec> or C<substr> with an array or hash for its first
|
|
argument used to result in crashes or "Can't coerce" error messages at run
|
|
time, unlike scalar assignment, which would give an error at compile time.
|
|
List assignment now gives a compile-time error, too.
|
|
L<[GH #15370]|https://github.com/Perl/perl5/issues/15370>
|
|
|
|
=item *
|
|
|
|
Expressions containing an C<&&> or C<||> operator (or their synonyms C<and>
|
|
and C<or>) were being compiled incorrectly in some cases. If the left-hand
|
|
side consisted of either a negated bareword constant or a negated C<do {}>
|
|
block containing a constant expression, and the right-hand side consisted of
|
|
a negated non-foldable expression, one of the negations was effectively
|
|
ignored. The same was true of C<if> and C<unless> statement modifiers,
|
|
though with the left-hand and right-hand sides swapped. This long-standing
|
|
bug has now been fixed.
|
|
L<[GH #15285]|https://github.com/Perl/perl5/issues/15285>
|
|
|
|
=item *
|
|
|
|
C<reset> with an argument no longer crashes when encountering stash entries
|
|
other than globs.
|
|
L<[GH #15314]|https://github.com/Perl/perl5/issues/15314>
|
|
|
|
=item *
|
|
|
|
Assignment of hashes to, and deletion of, typeglobs named C<*::::::> no
|
|
longer causes crashes.
|
|
L<[GH #15307]|https://github.com/Perl/perl5/issues/15307>
|
|
|
|
=item *
|
|
|
|
Perl wasn't correctly handling true/false values in the LHS of a list
|
|
assign; specifically the truth values returned by boolean operators.
|
|
This could trigger an assertion failure in something like the following:
|
|
|
|
for ($x > $y) {
|
|
($_, ...) = (...); # here $_ is aliased to a truth value
|
|
}
|
|
|
|
This was a regression from v5.24.
|
|
L<[GH #15690]|https://github.com/Perl/perl5/issues/15690>
|
|
|
|
=item *
|
|
|
|
Assertion failure with user-defined Unicode-like properties.
|
|
L<[GH #15696]|https://github.com/Perl/perl5/issues/15696>
|
|
|
|
=item *
|
|
|
|
Fix error message for unclosed C<\N{> in a regex. An unclosed C<\N{>
|
|
could give the wrong error message:
|
|
C<"\N{NAME} must be resolved by the lexer">.
|
|
|
|
=item *
|
|
|
|
List assignment in list context where the LHS contained aggregates and
|
|
where there were not enough RHS elements, used to skip scalar lvalues.
|
|
Previously, C<(($a,$b,@c,$d) = (1))> in list context returned C<($a)>; now
|
|
it returns C<($a,$b,$d)>. C<(($a,$b,$c) = (1))> is unchanged: it still
|
|
returns C<($a,$b,$c)>. This can be seen in the following:
|
|
|
|
sub inc { $_++ for @_ }
|
|
inc(($a,$b,@c,$d) = (10))
|
|
|
|
Formerly, the values of C<($a,$b,$d)> would be left as C<(11,undef,undef)>;
|
|
now they are C<(11,1,1)>.
|
|
|
|
=item *
|
|
|
|
Code like this: C</(?{ s!!! })/> could trigger infinite recursion on the C
|
|
stack (not the normal perl stack) when the last successful pattern in
|
|
scope is itself. We avoid the segfault by simply forbidding the use of
|
|
the empty pattern when it would resolve to the currently executing
|
|
pattern.
|
|
L<[GH #15669]|https://github.com/Perl/perl5/issues/15669>
|
|
|
|
=item *
|
|
|
|
Avoid reading beyond the end of the line buffer in perl's lexer when
|
|
there's a short UTF-8 character at the end.
|
|
L<[GH #15531]|https://github.com/Perl/perl5/issues/15531>
|
|
|
|
=item *
|
|
|
|
Alternations in regular expressions were sometimes failing to match
|
|
a utf8 string against a utf8 alternate.
|
|
L<[GH #15680]|https://github.com/Perl/perl5/issues/15680>
|
|
|
|
=item *
|
|
|
|
Make C<do "a\0b"> fail silently (and return C<undef> and set C<$!>)
|
|
instead of throwing an error.
|
|
L<[GH #15676]|https://github.com/Perl/perl5/issues/15676>
|
|
|
|
=item *
|
|
|
|
C<chdir> with no argument didn't ensure that there was stack space
|
|
available for returning its result.
|
|
L<[GH #15569]|https://github.com/Perl/perl5/issues/15569>
|
|
|
|
=item *
|
|
|
|
All error messages related to C<do> now refer to C<do>; some formerly
|
|
claimed to be from C<require> instead.
|
|
|
|
=item *
|
|
|
|
Executing C<undef $x> where C<$x> is tied or magical no longer incorrectly
|
|
blames the variable for an uninitialized-value warning encountered by the
|
|
tied/magical code.
|
|
|
|
=item *
|
|
|
|
Code like C<$x = $x . "a"> was incorrectly failing to yield a
|
|
L<use of uninitialized value|perldiag/"Use of uninitialized value%s">
|
|
warning when C<$x> was a lexical variable with an undefined value. That has
|
|
now been fixed.
|
|
L<[GH #15269]|https://github.com/Perl/perl5/issues/15269>
|
|
|
|
=item *
|
|
|
|
C<undef *_; shift> or C<undef *_; pop> inside a subroutine, with no
|
|
argument to C<shift> or C<pop>, began crashing in Perl 5.14, but has now
|
|
been fixed.
|
|
|
|
=item *
|
|
|
|
C<< "string$scalar-E<gt>$*" >> now correctly prefers concatenation
|
|
overloading to string overloading if C<< $scalar-E<gt>$* >> returns an
|
|
overloaded object, bringing it into consistency with C<$$scalar>.
|
|
|
|
=item *
|
|
|
|
C<< /@0{0*-E<gt>@*/*0 >> and similar contortions used to crash, but no longer
|
|
do, but merely produce a syntax error.
|
|
L<[GH #15333]|https://github.com/Perl/perl5/issues/15333>
|
|
|
|
=item *
|
|
|
|
C<do> or C<require> with an argument which is a reference or typeglob
|
|
which, when stringified,
|
|
contains a null character, started crashing in Perl 5.20, but has now been
|
|
fixed.
|
|
L<[GH #15337]|https://github.com/Perl/perl5/issues/15337>
|
|
|
|
=item *
|
|
|
|
Improve the error message for a missing C<tie()> package/method. This
|
|
brings the error messages in line with the ones used for normal method
|
|
calls.
|
|
|
|
=item *
|
|
|
|
Parsing bad POSIX charclasses no longer leaks memory.
|
|
L<[GH #15382]|https://github.com/Perl/perl5/issues/15382>
|
|
|
|
=back
|
|
|
|
=head1 Known Problems
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
G++ 6 handles subnormal (denormal) floating point values differently
|
|
than gcc 6 or g++ 5 resulting in "flush-to-zero". The end result is
|
|
that if you specify very small values using the hexadecimal floating
|
|
point format, like C<0x1.fffffffffffffp-1022>, they become zeros.
|
|
L<[GH #15990]|https://github.com/Perl/perl5/issues/15990>
|
|
|
|
=back
|
|
|
|
=head1 Errata From Previous Releases
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Fixed issues with recursive regexes. The behavior was fixed in Perl 5.24.
|
|
L<[GH #14935]|https://github.com/Perl/perl5/issues/14935>
|
|
|
|
=back
|
|
|
|
=head1 Obituary
|
|
|
|
Jon Portnoy (AVENJ), a prolific Perl author and admired Gentoo community
|
|
member, has passed away on August 10, 2016. He will be remembered and
|
|
missed by all those who he came in contact with, and enriched with his
|
|
intellect, wit, and spirit.
|
|
|
|
It is with great sadness that we also note Kip Hampton's passing. Probably
|
|
best known as the author of the Perl & XML column on XML.com, he was a
|
|
core contributor to AxKit, an XML server platform that became an Apache
|
|
Foundation project. He was a frequent speaker in the early days at
|
|
OSCON, and most recently at YAPC::NA in Madison. He was frequently on
|
|
irc.perl.org as ubu, generally in the #axkit-dahut community, the
|
|
group responsible for YAPC::NA Asheville in 2011.
|
|
|
|
Kip and his constant contributions to the community will be greatly
|
|
missed.
|
|
|
|
=head1 Acknowledgements
|
|
|
|
Perl 5.26.0 represents approximately 13 months of development since Perl 5.24.0
|
|
and contains approximately 360,000 lines of changes across 2,600 files from 86
|
|
authors.
|
|
|
|
Excluding auto-generated files, documentation and release tools, there were
|
|
approximately 230,000 lines of changes to 1,800 .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.26.0:
|
|
|
|
Aaron Crane, Abigail, Ævar Arnfjörð Bjarmason, Alex Vandiver, Andreas
|
|
König, Andreas Voegele, Andrew Fresh, Andy Lester, Aristotle Pagaltzis, Chad
|
|
Granum, Chase Whitener, Chris 'BinGOs' Williams, Chris Lamb, Christian Hansen,
|
|
Christian Millour, Colin Newell, Craig A. Berry, Dagfinn Ilmari Mannsåker, Dan
|
|
Collins, Daniel Dragan, Dave Cross, Dave Rolsky, David Golden, David H.
|
|
Gutteridge, David Mitchell, Dominic Hargreaves, Doug Bell, E. Choroba, Ed Avis,
|
|
Father Chrysostomos, François Perrad, Hauke D, H.Merijn Brand, Hugo van der
|
|
Sanden, Ivan Pozdeev, James E Keenan, James Raspass, Jarkko Hietaniemi, Jerry
|
|
D. Hedden, Jim Cromie, J. Nick Koston, John Lightsey, Karen Etheridge, Karl
|
|
Williamson, Leon Timmermans, Lukas Mai, Matthew Horsfall, Maxwell Carey, Misty
|
|
De Meo, Neil Bowers, Nicholas Clark, Nicolas R., Niko Tyni, Pali, Paul
|
|
Marquess, Peter Avalos, Petr Písař, Pino Toscano, Rafael Garcia-Suarez, Reini
|
|
Urban, Renee Baecker, Ricardo Signes, Richard Levitte, Rick Delaney, Salvador
|
|
Fandiño, Samuel Thibault, Sawyer X, Sébastien Aperghis-Tramoni, Sergey
|
|
Aleynikov, Shlomi Fish, Smylers, Stefan Seifert, Steffen Müller, Stevan
|
|
Little, Steve Hay, Steven Humphrey, Sullivan Beck, Theo Buehler, Thomas Sibley,
|
|
Todd Rinaldo, Tomasz Konojacki, Tony Cook, Unicode Consortium, Yaroslav Kuzmin,
|
|
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 C<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
|