1774 lines
43 KiB
Plaintext
1774 lines
43 KiB
Plaintext
=head1 NAME
|
|
|
|
perl5101delta - what is new for perl v5.10.1
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This document describes differences between the 5.10.0 release and
|
|
the 5.10.1 release.
|
|
|
|
If you are upgrading from an earlier release such as 5.8.8, first read
|
|
the L<perl5100delta>, which describes differences between 5.8.8 and
|
|
5.10.0
|
|
|
|
=head1 Incompatible Changes
|
|
|
|
=head2 Switch statement changes
|
|
|
|
The handling of complex expressions by the C<given>/C<when> switch
|
|
statement has been enhanced. There are two new cases where C<when> now
|
|
interprets its argument as a boolean, instead of an expression to be used
|
|
in a smart match:
|
|
|
|
=over 4
|
|
|
|
=item flip-flop operators
|
|
|
|
The C<..> and C<...> flip-flop operators are now evaluated in boolean
|
|
context, following their usual semantics; see L<perlop/"Range Operators">.
|
|
|
|
Note that, as in perl 5.10.0, C<when (1..10)> will not work to test
|
|
whether a given value is an integer between 1 and 10; you should use
|
|
C<when ([1..10])> instead (note the array reference).
|
|
|
|
However, contrary to 5.10.0, evaluating the flip-flop operators in boolean
|
|
context ensures it can now be useful in a C<when()>, notably for
|
|
implementing bistable conditions, like in:
|
|
|
|
when (/^=begin/ .. /^=end/) {
|
|
# do something
|
|
}
|
|
|
|
=item defined-or operator
|
|
|
|
A compound expression involving the defined-or operator, as in
|
|
C<when (expr1 // expr2)>, will be treated as boolean if the first
|
|
expression is boolean. (This just extends the existing rule that applies
|
|
to the regular or operator, as in C<when (expr1 || expr2)>.)
|
|
|
|
=back
|
|
|
|
The next section details more changes brought to the semantics to
|
|
the smart match operator, that naturally also modify the behaviour
|
|
of the switch statements where smart matching is implicitly used.
|
|
|
|
=head2 Smart match changes
|
|
|
|
=head3 Changes to type-based dispatch
|
|
|
|
The smart match operator C<~~> is no longer commutative. The behaviour of
|
|
a smart match now depends primarily on the type of its right hand
|
|
argument. Moreover, its semantics have been adjusted for greater
|
|
consistency or usefulness in several cases. While the general backwards
|
|
compatibility is maintained, several changes must be noted:
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
Code references with an empty prototype are no longer treated specially.
|
|
They are passed an argument like the other code references (even if they
|
|
choose to ignore it).
|
|
|
|
=item *
|
|
|
|
C<%hash ~~ sub {}> and C<@array ~~ sub {}> now test that the subroutine
|
|
returns a true value for each key of the hash (or element of the
|
|
array), instead of passing the whole hash or array as a reference to
|
|
the subroutine.
|
|
|
|
=item *
|
|
|
|
Due to the commutativity breakage, code references are no longer
|
|
treated specially when appearing on the left of the C<~~> operator,
|
|
but like any vulgar scalar.
|
|
|
|
=item *
|
|
|
|
C<undef ~~ %hash> is always false (since C<undef> can't be a key in a
|
|
hash). No implicit conversion to C<""> is done (as was the case in perl
|
|
5.10.0).
|
|
|
|
=item *
|
|
|
|
C<$scalar ~~ @array> now always distributes the smart match across the
|
|
elements of the array. It's true if one element in @array verifies
|
|
C<$scalar ~~ $element>. This is a generalization of the old behaviour
|
|
that tested whether the array contained the scalar.
|
|
|
|
=back
|
|
|
|
The full dispatch table for the smart match operator is given in
|
|
L<perlsyn/"Smart matching in detail">.
|
|
|
|
=head3 Smart match and overloading
|
|
|
|
According to the rule of dispatch based on the rightmost argument type,
|
|
when an object overloading C<~~> appears on the right side of the
|
|
operator, the overload routine will always be called (with a 3rd argument
|
|
set to a true value, see L<overload>.) However, when the object will
|
|
appear on the left, the overload routine will be called only when the
|
|
rightmost argument is a simple scalar. This way distributivity of smart match
|
|
across arrays is not broken, as well as the other behaviours with complex
|
|
types (coderefs, hashes, regexes). Thus, writers of overloading routines
|
|
for smart match mostly need to worry only with comparing against a scalar,
|
|
and possibly with stringification overloading; the other common cases
|
|
will be automatically handled consistently.
|
|
|
|
C<~~> will now refuse to work on objects that do not overload it (in order
|
|
to avoid relying on the object's underlying structure). (However, if the
|
|
object overloads the stringification or the numification operators, and
|
|
if overload fallback is active, it will be used instead, as usual.)
|
|
|
|
=head2 Other incompatible changes
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The semantics of C<use feature :5.10*> have changed slightly.
|
|
See L</"Modules and Pragmata"> for more information.
|
|
|
|
=item *
|
|
|
|
It is now a run-time error to use the smart match operator C<~~>
|
|
with an object that has no overload defined for it. (This way
|
|
C<~~> will not break encapsulation by matching against the
|
|
object's internal representation as a reference.)
|
|
|
|
=item *
|
|
|
|
The version control system used for the development of the perl
|
|
interpreter has been switched from Perforce to git. This is mainly an
|
|
internal issue that only affects people actively working on the perl core;
|
|
but it may have minor external visibility, for example in some of details
|
|
of the output of C<perl -V>. See L<perlrepository> for more information.
|
|
|
|
=item *
|
|
|
|
The internal structure of the C<ext/> directory in the perl source has
|
|
been reorganised. In general, a module C<Foo::Bar> whose source was
|
|
stored under F<ext/Foo/Bar/> is now located under F<ext/Foo-Bar/>. Also,
|
|
some modules have been moved from F<lib/> to F<ext/>. This is purely a
|
|
source tarball change, and should make no difference to the compilation or
|
|
installation of perl, unless you have a very customised build process that
|
|
explicitly relies on this structure, or which hard-codes the C<nonxs_ext>
|
|
F<Configure> parameter. Specifically, this change does not by default
|
|
alter the location of any files in the final installation.
|
|
|
|
=item *
|
|
|
|
As part of the C<Test::Harness> 2.x to 3.x upgrade, the experimental
|
|
C<Test::Harness::Straps> module has been removed.
|
|
See L</"Updated Modules"> for more details.
|
|
|
|
=item *
|
|
|
|
As part of the C<ExtUtils::MakeMaker> upgrade, the
|
|
C<ExtUtils::MakeMaker::bytes> and C<ExtUtils::MakeMaker::vmsish> modules
|
|
have been removed from this distribution.
|
|
|
|
=item *
|
|
|
|
C<Module::CoreList> no longer contains the C<%:patchlevel> hash.
|
|
|
|
=item *
|
|
|
|
This one is actually a change introduced in 5.10.0, but it was missed
|
|
from that release's perldelta, so it is mentioned here instead.
|
|
|
|
A bugfix related to the handling of the C</m> modifier and C<qr> resulted
|
|
in a change of behaviour between 5.8.x and 5.10.0:
|
|
|
|
# matches in 5.8.x, doesn't match in 5.10.0
|
|
$re = qr/^bar/; "foo\nbar" =~ /$re/m;
|
|
|
|
=back
|
|
|
|
=head1 Core Enhancements
|
|
|
|
=head2 Unicode Character Database 5.1.0
|
|
|
|
The copy of the Unicode Character Database included in Perl 5.10.1 has
|
|
been updated to 5.1.0 from 5.0.0. See
|
|
L<http://www.unicode.org/versions/Unicode5.1.0/#Notable_Changes> for the
|
|
notable changes.
|
|
|
|
=head2 A proper interface for pluggable Method Resolution Orders
|
|
|
|
As of Perl 5.10.1 there is a new interface for plugging and using method
|
|
resolution orders other than the default (linear depth first search).
|
|
The C3 method resolution order added in 5.10.0 has been re-implemented as
|
|
a plugin, without changing its Perl-space interface. See L<perlmroapi> for
|
|
more information.
|
|
|
|
=head2 The C<overloading> pragma
|
|
|
|
This pragma allows you to lexically disable or enable overloading
|
|
for some or all operations. (Yuval Kogman)
|
|
|
|
=head2 Parallel tests
|
|
|
|
The core distribution can now run its regression tests in parallel on
|
|
Unix-like platforms. Instead of running C<make test>, set C<TEST_JOBS> in
|
|
your environment to the number of tests to run in parallel, and run
|
|
C<make test_harness>. On a Bourne-like shell, this can be done as
|
|
|
|
TEST_JOBS=3 make test_harness # Run 3 tests in parallel
|
|
|
|
An environment variable is used, rather than parallel make itself, because
|
|
L<TAP::Harness> needs to be able to schedule individual non-conflicting test
|
|
scripts itself, and there is no standard interface to C<make> utilities to
|
|
interact with their job schedulers.
|
|
|
|
Note that currently some test scripts may fail when run in parallel (most
|
|
notably C<ext/IO/t/io_dir.t>). If necessary run just the failing scripts
|
|
again sequentially and see if the failures go away.
|
|
|
|
=head2 DTrace support
|
|
|
|
Some support for DTrace has been added. See "DTrace support" in F<INSTALL>.
|
|
|
|
=head2 Support for C<configure_requires> in CPAN module metadata
|
|
|
|
Both C<CPAN> and C<CPANPLUS> now support the C<configure_requires> keyword
|
|
in the C<META.yml> metadata file included in most recent CPAN distributions.
|
|
This allows distribution authors to specify configuration prerequisites that
|
|
must be installed before running F<Makefile.PL> or F<Build.PL>.
|
|
|
|
See the documentation for C<ExtUtils::MakeMaker> or C<Module::Build> for more
|
|
on how to specify C<configure_requires> when creating a distribution for CPAN.
|
|
|
|
=head1 Modules and Pragmata
|
|
|
|
=head2 New Modules and Pragmata
|
|
|
|
=over 4
|
|
|
|
=item C<autodie>
|
|
|
|
This is a new lexically-scoped alternative for the C<Fatal> module.
|
|
The bundled version is 2.06_01. Note that in this release, using a string
|
|
eval when C<autodie> is in effect can cause the autodie behaviour to leak
|
|
into the surrounding scope. See L<autodie/"BUGS"> for more details.
|
|
|
|
=item C<Compress::Raw::Bzip2>
|
|
|
|
This has been added to the core (version 2.020).
|
|
|
|
=item C<parent>
|
|
|
|
This pragma establishes an ISA relationship with base classes at compile
|
|
time. It provides the key feature of C<base> without the feature creep.
|
|
|
|
=item C<Parse::CPAN::Meta>
|
|
|
|
This has been added to the core (version 1.39).
|
|
|
|
=back
|
|
|
|
=head2 Pragmata Changes
|
|
|
|
=over 4
|
|
|
|
=item C<attributes>
|
|
|
|
Upgraded from version 0.08 to 0.09.
|
|
|
|
=item C<attrs>
|
|
|
|
Upgraded from version 1.02 to 1.03.
|
|
|
|
=item C<base>
|
|
|
|
Upgraded from version 2.13 to 2.14. See L<parent> for a replacement.
|
|
|
|
=item C<bigint>
|
|
|
|
Upgraded from version 0.22 to 0.23.
|
|
|
|
=item C<bignum>
|
|
|
|
Upgraded from version 0.22 to 0.23.
|
|
|
|
=item C<bigrat>
|
|
|
|
Upgraded from version 0.22 to 0.23.
|
|
|
|
=item C<charnames>
|
|
|
|
Upgraded from version 1.06 to 1.07.
|
|
|
|
The Unicode F<NameAliases.txt> database file has been added. This has the
|
|
effect of adding some extra C<\N> character names that formerly wouldn't
|
|
have been recognised; for example, C<"\N{LATIN CAPITAL LETTER GHA}">.
|
|
|
|
=item C<constant>
|
|
|
|
Upgraded from version 1.13 to 1.17.
|
|
|
|
=item C<feature>
|
|
|
|
The meaning of the C<:5.10> and C<:5.10.X> feature bundles has
|
|
changed slightly. The last component, if any (i.e. C<X>) is simply ignored.
|
|
This is predicated on the assumption that new features will not, in
|
|
general, be added to maintenance releases. So C<:5.10> and C<:5.10.X>
|
|
have identical effect. This is a change to the behaviour documented for
|
|
5.10.0.
|
|
|
|
=item C<fields>
|
|
|
|
Upgraded from version 2.13 to 2.14 (this was just a version bump; there
|
|
were no functional changes).
|
|
|
|
=item C<lib>
|
|
|
|
Upgraded from version 0.5565 to 0.62.
|
|
|
|
=item C<open>
|
|
|
|
Upgraded from version 1.06 to 1.07.
|
|
|
|
=item C<overload>
|
|
|
|
Upgraded from version 1.06 to 1.07.
|
|
|
|
=item C<overloading>
|
|
|
|
See L</"The C<overloading> pragma"> above.
|
|
|
|
=item C<version>
|
|
|
|
Upgraded from version 0.74 to 0.77.
|
|
|
|
=back
|
|
|
|
=head2 Updated Modules
|
|
|
|
=over 4
|
|
|
|
=item C<Archive::Extract>
|
|
|
|
Upgraded from version 0.24 to 0.34.
|
|
|
|
=item C<Archive::Tar>
|
|
|
|
Upgraded from version 1.38 to 1.52.
|
|
|
|
=item C<Attribute::Handlers>
|
|
|
|
Upgraded from version 0.79 to 0.85.
|
|
|
|
=item C<AutoLoader>
|
|
|
|
Upgraded from version 5.63 to 5.68.
|
|
|
|
=item C<AutoSplit>
|
|
|
|
Upgraded from version 1.05 to 1.06.
|
|
|
|
=item C<B>
|
|
|
|
Upgraded from version 1.17 to 1.22.
|
|
|
|
=item C<B::Debug>
|
|
|
|
Upgraded from version 1.05 to 1.11.
|
|
|
|
=item C<B::Deparse>
|
|
|
|
Upgraded from version 0.83 to 0.89.
|
|
|
|
=item C<B::Lint>
|
|
|
|
Upgraded from version 1.09 to 1.11.
|
|
|
|
=item C<B::Xref>
|
|
|
|
Upgraded from version 1.01 to 1.02.
|
|
|
|
=item C<Benchmark>
|
|
|
|
Upgraded from version 1.10 to 1.11.
|
|
|
|
=item C<Carp>
|
|
|
|
Upgraded from version 1.08 to 1.11.
|
|
|
|
=item C<CGI>
|
|
|
|
Upgraded from version 3.29 to 3.43.
|
|
(also includes the "default_value for popup_menu()" fix from 3.45).
|
|
|
|
=item C<Compress::Zlib>
|
|
|
|
Upgraded from version 2.008 to 2.020.
|
|
|
|
=item C<CPAN>
|
|
|
|
Upgraded from version 1.9205 to 1.9402. C<CPAN::FTP> has a local fix to
|
|
stop it being too verbose on download failure.
|
|
|
|
=item C<CPANPLUS>
|
|
|
|
Upgraded from version 0.84 to 0.88.
|
|
|
|
=item C<CPANPLUS::Dist::Build>
|
|
|
|
Upgraded from version 0.06_02 to 0.36.
|
|
|
|
=item C<Cwd>
|
|
|
|
Upgraded from version 3.25_01 to 3.30.
|
|
|
|
=item C<Data::Dumper>
|
|
|
|
Upgraded from version 2.121_14 to 2.124.
|
|
|
|
=item C<DB>
|
|
|
|
Upgraded from version 1.01 to 1.02.
|
|
|
|
=item C<DB_File>
|
|
|
|
Upgraded from version 1.816_1 to 1.820.
|
|
|
|
=item C<Devel::PPPort>
|
|
|
|
Upgraded from version 3.13 to 3.19.
|
|
|
|
=item C<Digest::MD5>
|
|
|
|
Upgraded from version 2.36_01 to 2.39.
|
|
|
|
=item C<Digest::SHA>
|
|
|
|
Upgraded from version 5.45 to 5.47.
|
|
|
|
=item C<DirHandle>
|
|
|
|
Upgraded from version 1.01 to 1.03.
|
|
|
|
=item C<Dumpvalue>
|
|
|
|
Upgraded from version 1.12 to 1.13.
|
|
|
|
=item C<DynaLoader>
|
|
|
|
Upgraded from version 1.08 to 1.10.
|
|
|
|
=item C<Encode>
|
|
|
|
Upgraded from version 2.23 to 2.35.
|
|
|
|
=item C<Errno>
|
|
|
|
Upgraded from version 1.10 to 1.11.
|
|
|
|
=item C<Exporter>
|
|
|
|
Upgraded from version 5.62 to 5.63.
|
|
|
|
=item C<ExtUtils::CBuilder>
|
|
|
|
Upgraded from version 0.21 to 0.2602.
|
|
|
|
=item C<ExtUtils::Command>
|
|
|
|
Upgraded from version 1.13 to 1.16.
|
|
|
|
=item C<ExtUtils::Constant>
|
|
|
|
Upgraded from 0.20 to 0.22. (Note that neither of these versions are
|
|
available on CPAN.)
|
|
|
|
=item C<ExtUtils::Embed>
|
|
|
|
Upgraded from version 1.27 to 1.28.
|
|
|
|
=item C<ExtUtils::Install>
|
|
|
|
Upgraded from version 1.44 to 1.54.
|
|
|
|
=item C<ExtUtils::MakeMaker>
|
|
|
|
Upgraded from version 6.42 to 6.55_02.
|
|
|
|
Note that C<ExtUtils::MakeMaker::bytes> and C<ExtUtils::MakeMaker::vmsish>
|
|
have been removed from this distribution.
|
|
|
|
=item C<ExtUtils::Manifest>
|
|
|
|
Upgraded from version 1.51_01 to 1.56.
|
|
|
|
=item C<ExtUtils::ParseXS>
|
|
|
|
Upgraded from version 2.18_02 to 2.2002.
|
|
|
|
=item C<Fatal>
|
|
|
|
Upgraded from version 1.05 to 2.06_01. See also the new pragma C<autodie>.
|
|
|
|
=item C<File::Basename>
|
|
|
|
Upgraded from version 2.76 to 2.77.
|
|
|
|
=item C<File::Compare>
|
|
|
|
Upgraded from version 1.1005 to 1.1006.
|
|
|
|
=item C<File::Copy>
|
|
|
|
Upgraded from version 2.11 to 2.14.
|
|
|
|
=item C<File::Fetch>
|
|
|
|
Upgraded from version 0.14 to 0.20.
|
|
|
|
=item C<File::Find>
|
|
|
|
Upgraded from version 1.12 to 1.14.
|
|
|
|
=item C<File::Path>
|
|
|
|
Upgraded from version 2.04 to 2.07_03.
|
|
|
|
=item C<File::Spec>
|
|
|
|
Upgraded from version 3.2501 to 3.30.
|
|
|
|
=item C<File::stat>
|
|
|
|
Upgraded from version 1.00 to 1.01.
|
|
|
|
=item C<File::Temp>
|
|
|
|
Upgraded from version 0.18 to 0.22.
|
|
|
|
=item C<FileCache>
|
|
|
|
Upgraded from version 1.07 to 1.08.
|
|
|
|
=item C<FileHandle>
|
|
|
|
Upgraded from version 2.01 to 2.02.
|
|
|
|
=item C<Filter::Simple>
|
|
|
|
Upgraded from version 0.82 to 0.84.
|
|
|
|
=item C<Filter::Util::Call>
|
|
|
|
Upgraded from version 1.07 to 1.08.
|
|
|
|
=item C<FindBin>
|
|
|
|
Upgraded from version 1.49 to 1.50.
|
|
|
|
=item C<GDBM_File>
|
|
|
|
Upgraded from version 1.08 to 1.09.
|
|
|
|
=item C<Getopt::Long>
|
|
|
|
Upgraded from version 2.37 to 2.38.
|
|
|
|
=item C<Hash::Util::FieldHash>
|
|
|
|
Upgraded from version 1.03 to 1.04. This fixes a memory leak.
|
|
|
|
=item C<I18N::Collate>
|
|
|
|
Upgraded from version 1.00 to 1.01.
|
|
|
|
=item C<IO>
|
|
|
|
Upgraded from version 1.23_01 to 1.25.
|
|
|
|
This makes non-blocking mode work on Windows in C<IO::Socket::INET>
|
|
[CPAN #43573].
|
|
|
|
=item C<IO::Compress::*>
|
|
|
|
Upgraded from version 2.008 to 2.020.
|
|
|
|
=item C<IO::Dir>
|
|
|
|
Upgraded from version 1.06 to 1.07.
|
|
|
|
=item C<IO::Handle>
|
|
|
|
Upgraded from version 1.27 to 1.28.
|
|
|
|
=item C<IO::Socket>
|
|
|
|
Upgraded from version 1.30_01 to 1.31.
|
|
|
|
=item C<IO::Zlib>
|
|
|
|
Upgraded from version 1.07 to 1.09.
|
|
|
|
=item C<IPC::Cmd>
|
|
|
|
Upgraded from version 0.40_1 to 0.46.
|
|
|
|
=item C<IPC::Open3>
|
|
|
|
Upgraded from version 1.02 to 1.04.
|
|
|
|
=item C<IPC::SysV>
|
|
|
|
Upgraded from version 1.05 to 2.01.
|
|
|
|
=item C<lib>
|
|
|
|
Upgraded from version 0.5565 to 0.62.
|
|
|
|
=item C<List::Util>
|
|
|
|
Upgraded from version 1.19 to 1.21.
|
|
|
|
=item C<Locale::MakeText>
|
|
|
|
Upgraded from version 1.12 to 1.13.
|
|
|
|
=item C<Log::Message>
|
|
|
|
Upgraded from version 0.01 to 0.02.
|
|
|
|
=item C<Math::BigFloat>
|
|
|
|
Upgraded from version 1.59 to 1.60.
|
|
|
|
=item C<Math::BigInt>
|
|
|
|
Upgraded from version 1.88 to 1.89.
|
|
|
|
=item C<Math::BigInt::FastCalc>
|
|
|
|
Upgraded from version 0.16 to 0.19.
|
|
|
|
=item C<Math::BigRat>
|
|
|
|
Upgraded from version 0.21 to 0.22.
|
|
|
|
=item C<Math::Complex>
|
|
|
|
Upgraded from version 1.37 to 1.56.
|
|
|
|
=item C<Math::Trig>
|
|
|
|
Upgraded from version 1.04 to 1.20.
|
|
|
|
=item C<Memoize>
|
|
|
|
Upgraded from version 1.01_02 to 1.01_03 (just a minor documentation
|
|
change).
|
|
|
|
=item C<Module::Build>
|
|
|
|
Upgraded from version 0.2808_01 to 0.34_02.
|
|
|
|
=item C<Module::CoreList>
|
|
|
|
Upgraded from version 2.13 to 2.18. This release no longer contains the
|
|
C<%Module::CoreList::patchlevel> hash.
|
|
|
|
=item C<Module::Load>
|
|
|
|
Upgraded from version 0.12 to 0.16.
|
|
|
|
=item C<Module::Load::Conditional>
|
|
|
|
Upgraded from version 0.22 to 0.30.
|
|
|
|
=item C<Module::Loaded>
|
|
|
|
Upgraded from version 0.01 to 0.02.
|
|
|
|
=item C<Module::Pluggable>
|
|
|
|
Upgraded from version 3.6 to 3.9.
|
|
|
|
=item C<NDBM_File>
|
|
|
|
Upgraded from version 1.07 to 1.08.
|
|
|
|
=item C<Net::Ping>
|
|
|
|
Upgraded from version 2.33 to 2.36.
|
|
|
|
=item C<NEXT>
|
|
|
|
Upgraded from version 0.60_01 to 0.64.
|
|
|
|
=item C<Object::Accessor>
|
|
|
|
Upgraded from version 0.32 to 0.34.
|
|
|
|
=item C<OS2::REXX>
|
|
|
|
Upgraded from version 1.03 to 1.04.
|
|
|
|
=item C<Package::Constants>
|
|
|
|
Upgraded from version 0.01 to 0.02.
|
|
|
|
=item C<PerlIO>
|
|
|
|
Upgraded from version 1.04 to 1.06.
|
|
|
|
=item C<PerlIO::via>
|
|
|
|
Upgraded from version 0.04 to 0.07.
|
|
|
|
=item C<Pod::Man>
|
|
|
|
Upgraded from version 2.16 to 2.22.
|
|
|
|
=item C<Pod::Parser>
|
|
|
|
Upgraded from version 1.35 to 1.37.
|
|
|
|
=item C<Pod::Simple>
|
|
|
|
Upgraded from version 3.05 to 3.07.
|
|
|
|
=item C<Pod::Text>
|
|
|
|
Upgraded from version 3.08 to 3.13.
|
|
|
|
=item C<POSIX>
|
|
|
|
Upgraded from version 1.13 to 1.17.
|
|
|
|
=item C<Safe>
|
|
|
|
Upgraded from 2.12 to 2.18.
|
|
|
|
=item C<Scalar::Util>
|
|
|
|
Upgraded from version 1.19 to 1.21.
|
|
|
|
=item C<SelectSaver>
|
|
|
|
Upgraded from 1.01 to 1.02.
|
|
|
|
=item C<SelfLoader>
|
|
|
|
Upgraded from 1.11 to 1.17.
|
|
|
|
=item C<Socket>
|
|
|
|
Upgraded from 1.80 to 1.82.
|
|
|
|
=item C<Storable>
|
|
|
|
Upgraded from 2.18 to 2.20.
|
|
|
|
=item C<Switch>
|
|
|
|
Upgraded from version 2.13 to 2.14. Please see L</Deprecations>.
|
|
|
|
=item C<Symbol>
|
|
|
|
Upgraded from version 1.06 to 1.07.
|
|
|
|
=item C<Sys::Syslog>
|
|
|
|
Upgraded from version 0.22 to 0.27.
|
|
|
|
=item C<Term::ANSIColor>
|
|
|
|
Upgraded from version 1.12 to 2.00.
|
|
|
|
=item C<Term::ReadLine>
|
|
|
|
Upgraded from version 1.03 to 1.04.
|
|
|
|
=item C<Term::UI>
|
|
|
|
Upgraded from version 0.18 to 0.20.
|
|
|
|
=item C<Test::Harness>
|
|
|
|
Upgraded from version 2.64 to 3.17.
|
|
|
|
Note that one side-effect of the 2.x to 3.x upgrade is that the
|
|
experimental C<Test::Harness::Straps> module (and its supporting
|
|
C<Assert>, C<Iterator>, C<Point> and C<Results> modules) have been
|
|
removed. If you still need this, then they are available in the
|
|
(unmaintained) C<Test-Harness-Straps> distribution on CPAN.
|
|
|
|
=item C<Test::Simple>
|
|
|
|
Upgraded from version 0.72 to 0.92.
|
|
|
|
=item C<Text::ParseWords>
|
|
|
|
Upgraded from version 3.26 to 3.27.
|
|
|
|
=item C<Text::Tabs>
|
|
|
|
Upgraded from version 2007.1117 to 2009.0305.
|
|
|
|
=item C<Text::Wrap>
|
|
|
|
Upgraded from version 2006.1117 to 2009.0305.
|
|
|
|
=item C<Thread::Queue>
|
|
|
|
Upgraded from version 2.00 to 2.11.
|
|
|
|
=item C<Thread::Semaphore>
|
|
|
|
Upgraded from version 2.01 to 2.09.
|
|
|
|
=item C<threads>
|
|
|
|
Upgraded from version 1.67 to 1.72.
|
|
|
|
=item C<threads::shared>
|
|
|
|
Upgraded from version 1.14 to 1.29.
|
|
|
|
=item C<Tie::RefHash>
|
|
|
|
Upgraded from version 1.37 to 1.38.
|
|
|
|
=item C<Tie::StdHandle>
|
|
|
|
This has documentation changes, and has been assigned a version for the
|
|
first time: version 4.2.
|
|
|
|
=item C<Time::HiRes>
|
|
|
|
Upgraded from version 1.9711 to 1.9719.
|
|
|
|
=item C<Time::Local>
|
|
|
|
Upgraded from version 1.18 to 1.1901.
|
|
|
|
=item C<Time::Piece>
|
|
|
|
Upgraded from version 1.12 to 1.15.
|
|
|
|
=item C<Unicode::Normalize>
|
|
|
|
Upgraded from version 1.02 to 1.03.
|
|
|
|
=item C<Unicode::UCD>
|
|
|
|
Upgraded from version 0.25 to 0.27.
|
|
|
|
C<charinfo()> now works on Unified CJK code points added to later versions
|
|
of Unicode.
|
|
|
|
C<casefold()> has new fields returned to provide both a simpler interface
|
|
and previously missing information. The old fields are retained for
|
|
backwards compatibility. Information about Turkic-specific code points is
|
|
now returned.
|
|
|
|
The documentation has been corrected and expanded.
|
|
|
|
=item C<UNIVERSAL>
|
|
|
|
Upgraded from version 1.04 to 1.05.
|
|
|
|
=item C<Win32>
|
|
|
|
Upgraded from version 0.34 to 0.39.
|
|
|
|
=item C<Win32API::File>
|
|
|
|
Upgraded from version 0.1001_01 to 0.1101.
|
|
|
|
=item C<XSLoader>
|
|
|
|
Upgraded from version 0.08 to 0.10.
|
|
|
|
=back
|
|
|
|
=head1 Utility Changes
|
|
|
|
=over 4
|
|
|
|
=item F<h2ph>
|
|
|
|
Now looks in C<include-fixed> too, which is a recent addition to gcc's
|
|
search path.
|
|
|
|
=item F<h2xs>
|
|
|
|
No longer incorrectly treats enum values like macros (Daniel Burr).
|
|
|
|
Now handles C++ style constants (C<//>) properly in enums. (A patch from
|
|
Rainer Weikusat was used; Daniel Burr also proposed a similar fix).
|
|
|
|
=item F<perl5db.pl>
|
|
|
|
C<LVALUE> subroutines now work under the debugger.
|
|
|
|
The debugger now correctly handles proxy constant subroutines, and
|
|
subroutine stubs.
|
|
|
|
=item F<perlthanks>
|
|
|
|
Perl 5.10.1 adds a new utility F<perlthanks>, which is a variant of
|
|
F<perlbug>, but for sending non-bug-reports to the authors and maintainers
|
|
of Perl. Getting nothing but bug reports can become a bit demoralising:
|
|
we'll see if this changes things.
|
|
|
|
=back
|
|
|
|
=head1 New Documentation
|
|
|
|
=over 4
|
|
|
|
=item L<perlhaiku>
|
|
|
|
This contains instructions on how to build perl for the Haiku platform.
|
|
|
|
=item L<perlmroapi>
|
|
|
|
This describes the new interface for pluggable Method Resolution Orders.
|
|
|
|
=item L<perlperf>
|
|
|
|
This document, by Richard Foley, provides an introduction to the use of
|
|
performance and optimization techniques which can be used with particular
|
|
reference to perl programs.
|
|
|
|
=item L<perlrepository>
|
|
|
|
This describes how to access the perl source using the I<git> version
|
|
control system.
|
|
|
|
=item L<perlthanks>
|
|
|
|
This describes the new F<perlthanks> utility.
|
|
|
|
=back
|
|
|
|
=head1 Changes to Existing Documentation
|
|
|
|
The various large C<Changes*> files (which listed every change made to perl
|
|
over the last 18 years) have been removed, and replaced by a small file,
|
|
also called C<Changes>, which just explains how that same information may
|
|
be extracted from the git version control system.
|
|
|
|
The file F<Porting/patching.pod> has been deleted, as it mainly described
|
|
interacting with the old Perforce-based repository, which is now obsolete.
|
|
Information still relevant has been moved to L<perlrepository>.
|
|
|
|
L<perlapi>, L<perlintern>, L<perlmodlib> and L<perltoc> are now all
|
|
generated at build time, rather than being shipped as part of the release.
|
|
|
|
=head1 Performance Enhancements
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
A new internal cache means that C<isa()> will often be faster.
|
|
|
|
=item *
|
|
|
|
Under C<use locale>, the locale-relevant information is now cached on
|
|
read-only values, such as the list returned by C<keys %hash>. This makes
|
|
operations such as C<sort keys %hash> in the scope of C<use locale> much
|
|
faster.
|
|
|
|
=item *
|
|
|
|
Empty C<DESTROY> methods are no longer called.
|
|
|
|
=back
|
|
|
|
=head1 Installation and Configuration Improvements
|
|
|
|
=head2 F<ext/> reorganisation
|
|
|
|
The layout of directories in F<ext> has been revised. Specifically, all
|
|
extensions are now flat, and at the top level, with C</> in pathnames
|
|
replaced by C<->, so that F<ext/Data/Dumper/> is now F<ext/Data-Dumper/>,
|
|
etc. The names of the extensions as specified to F<Configure>, and as
|
|
reported by C<%Config::Config> under the keys C<dynamic_ext>,
|
|
C<known_extensions>, C<nonxs_ext> and C<static_ext> have not changed, and
|
|
still use C</>. Hence this change will not have any affect once perl is
|
|
installed. However, C<Attribute::Handlers>, C<Safe> and C<mro> have now
|
|
become extensions in their own right, so if you run F<Configure> with
|
|
options to specify an exact list of extensions to build, you will need to
|
|
change it to account for this.
|
|
|
|
For 5.10.2, it is planned that many dual-life modules will have been moved
|
|
from F<lib> to F<ext>; again this will have no effect on an installed
|
|
perl, but will matter if you invoke F<Configure> with a pre-canned list of
|
|
extensions to build.
|
|
|
|
=head2 Configuration improvements
|
|
|
|
If C<vendorlib> and C<vendorarch> are the same, then they are only added to
|
|
C<@INC> once.
|
|
|
|
C<$Config{usedevel}> and the C-level C<PERL_USE_DEVEL> are now defined if
|
|
perl is built with C<-Dusedevel>.
|
|
|
|
F<Configure> will enable use of C<-fstack-protector>, to provide protection
|
|
against stack-smashing attacks, if the compiler supports it.
|
|
|
|
F<Configure> will now determine the correct prototypes for re-entrant
|
|
functions, and for C<gconvert>, if you are using a C++ compiler rather
|
|
than a C compiler.
|
|
|
|
On Unix, if you build from a tree containing a git repository, the
|
|
configuration process will note the commit hash you have checked out, for
|
|
display in the output of C<perl -v> and C<perl -V>. Unpushed local commits
|
|
are automatically added to the list of local patches displayed by
|
|
C<perl -V>.
|
|
|
|
=head2 Compilation improvements
|
|
|
|
As part of the flattening of F<ext>, all extensions on all platforms are
|
|
built by F<make_ext.pl>. This replaces the Unix-specific
|
|
F<ext/util/make_ext>, VMS-specific F<make_ext.com> and Win32-specific
|
|
F<win32/buildext.pl>.
|
|
|
|
=head2 Platform Specific Changes
|
|
|
|
=over 4
|
|
|
|
=item AIX
|
|
|
|
Removed F<libbsd> for AIX 5L and 6.1. Only flock() was used from F<libbsd>.
|
|
|
|
Removed F<libgdbm> for AIX 5L and 6.1. The F<libgdbm> is delivered as an
|
|
optional package with the AIX Toolbox. Unfortunately the 64 bit version
|
|
is broken.
|
|
|
|
Hints changes mean that AIX 4.2 should work again.
|
|
|
|
=item Cygwin
|
|
|
|
On Cygwin we now strip the last number from the DLL. This has been the
|
|
behaviour in the cygwin.com build for years. The hints files have been
|
|
updated.
|
|
|
|
=item FreeBSD
|
|
|
|
The hints files now identify the correct threading libraries on FreeBSD 7
|
|
and later.
|
|
|
|
=item Irix
|
|
|
|
We now work around a bizarre preprocessor bug in the Irix 6.5 compiler:
|
|
C<cc -E -> unfortunately goes into K&R mode, but C<cc -E file.c> doesn't.
|
|
|
|
=item Haiku
|
|
|
|
Patches from the Haiku maintainers have been merged in. Perl should now
|
|
build on Haiku.
|
|
|
|
=item MirOS BSD
|
|
|
|
Perl should now build on MirOS BSD.
|
|
|
|
=item NetBSD
|
|
|
|
Hints now supports versions 5.*.
|
|
|
|
=item Stratus VOS
|
|
|
|
Various changes from Stratus have been merged in.
|
|
|
|
=item Symbian
|
|
|
|
There is now support for Symbian S60 3.2 SDK and S60 5.0 SDK.
|
|
|
|
=item Win32
|
|
|
|
Improved message window handling means that C<alarm> and C<kill> messages
|
|
will no longer be dropped under race conditions.
|
|
|
|
=item VMS
|
|
|
|
Reads from the in-memory temporary files of C<PerlIO::scalar> used to fail
|
|
if C<$/> was set to a numeric reference (to indicate record-style reads).
|
|
This is now fixed.
|
|
|
|
VMS now supports C<getgrgid>.
|
|
|
|
Many improvements and cleanups have been made to the VMS file name handling
|
|
and conversion code.
|
|
|
|
Enabling the C<PERL_VMS_POSIX_EXIT> logical name now encodes a POSIX exit
|
|
status in a VMS condition value for better interaction with GNV's bash
|
|
shell and other utilities that depend on POSIX exit values. See
|
|
L<perlvms/"$?"> for details.
|
|
|
|
=back
|
|
|
|
=head1 Selected Bug Fixes
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
5.10.0 inadvertently disabled an optimisation, which caused a measurable
|
|
performance drop in list assignment, such as is often used to assign
|
|
function parameters from C<@_>. The optimisation has been re-instated, and
|
|
the performance regression fixed.
|
|
|
|
=item *
|
|
|
|
Fixed memory leak on C<while (1) { map 1, 1 }> [RT #53038].
|
|
|
|
=item *
|
|
|
|
Some potential coredumps in PerlIO fixed [RT #57322,54828].
|
|
|
|
=item *
|
|
|
|
The debugger now works with lvalue subroutines.
|
|
|
|
=item *
|
|
|
|
The debugger's C<m> command was broken on modules that defined constants
|
|
[RT #61222].
|
|
|
|
=item *
|
|
|
|
C<crypt()> and string complement could return tainted values for untainted
|
|
arguments [RT #59998].
|
|
|
|
=item *
|
|
|
|
The C<-i.suffix> command-line switch now recreates the file using
|
|
restricted permissions, before changing its mode to match the original
|
|
file. This eliminates a potential race condition [RT #60904].
|
|
|
|
=item *
|
|
|
|
On some Unix systems, the value in C<$?> would not have the top bit set
|
|
(C<$? & 128>) even if the child core dumped.
|
|
|
|
=item *
|
|
|
|
Under some circumstances, $^R could incorrectly become undefined
|
|
[RT #57042].
|
|
|
|
=item *
|
|
|
|
(XS) In various hash functions, passing a pre-computed hash to when the
|
|
key is UTF-8 might result in an incorrect lookup.
|
|
|
|
=item *
|
|
|
|
(XS) Including F<XSUB.h> before F<perl.h> gave a compile-time error
|
|
[RT #57176].
|
|
|
|
=item *
|
|
|
|
C<< $object->isa('Foo') >> would report false if the package C<Foo> didn't
|
|
exist, even if the object's C<@ISA> contained C<Foo>.
|
|
|
|
=item *
|
|
|
|
Various bugs in the new-to 5.10.0 mro code, triggered by manipulating
|
|
C<@ISA>, have been found and fixed.
|
|
|
|
=item *
|
|
|
|
Bitwise operations on references could crash the interpreter, e.g.
|
|
C<$x=\$y; $x |= "foo"> [RT #54956].
|
|
|
|
=item *
|
|
|
|
Patterns including alternation might be sensitive to the internal UTF-8
|
|
representation, e.g.
|
|
|
|
my $byte = chr(192);
|
|
my $utf8 = chr(192); utf8::upgrade($utf8);
|
|
$utf8 =~ /$byte|X}/i; # failed in 5.10.0
|
|
|
|
=item *
|
|
|
|
Within UTF8-encoded Perl source files (i.e. where C<use utf8> is in
|
|
effect), double-quoted literal strings could be corrupted where a C<\xNN>,
|
|
C<\0NNN> or C<\N{}> is followed by a literal character with ordinal value
|
|
greater than 255 [RT #59908].
|
|
|
|
=item *
|
|
|
|
C<B::Deparse> failed to correctly deparse various constructs:
|
|
C<readpipe STRING> [RT #62428], C<CORE::require(STRING)> [RT #62488],
|
|
C<sub foo(_)> [RT #62484].
|
|
|
|
=item *
|
|
|
|
Using C<setpgrp()> with no arguments could corrupt the perl stack.
|
|
|
|
=item *
|
|
|
|
The block form of C<eval> is now specifically trappable by C<Safe> and
|
|
C<ops>. Previously it was erroneously treated like string C<eval>.
|
|
|
|
=item *
|
|
|
|
In 5.10.0, the two characters C<[~> were sometimes parsed as the smart
|
|
match operator (C<~~>) [RT #63854].
|
|
|
|
=item *
|
|
|
|
In 5.10.0, the C<*> quantifier in patterns was sometimes treated as
|
|
C<{0,32767}> [RT #60034, #60464]. For example, this match would fail:
|
|
|
|
("ab" x 32768) =~ /^(ab)*$/
|
|
|
|
=item *
|
|
|
|
C<shmget> was limited to a 32 bit segment size on a 64 bit OS [RT #63924].
|
|
|
|
=item *
|
|
|
|
Using C<next> or C<last> to exit a C<given> block no longer produces a
|
|
spurious warning like the following:
|
|
|
|
Exiting given via last at foo.pl line 123
|
|
|
|
=item *
|
|
|
|
On Windows, C<'.\foo'> and C<'..\foo'> were treated differently than
|
|
C<'./foo'> and C<'../foo'> by C<do> and C<require> [RT #63492].
|
|
|
|
=item *
|
|
|
|
Assigning a format to a glob could corrupt the format; e.g.:
|
|
|
|
*bar=*foo{FORMAT}; # foo format now bad
|
|
|
|
=item *
|
|
|
|
Attempting to coerce a typeglob to a string or number could cause an
|
|
assertion failure. The correct error message is now generated,
|
|
C<Can't coerce GLOB to I<$type>>.
|
|
|
|
=item *
|
|
|
|
Under C<use filetest 'access'>, C<-x> was using the wrong access mode. This
|
|
has been fixed [RT #49003].
|
|
|
|
=item *
|
|
|
|
C<length> on a tied scalar that returned a Unicode value would not be
|
|
correct the first time. This has been fixed.
|
|
|
|
=item *
|
|
|
|
Using an array C<tie> inside in array C<tie> could SEGV. This has been
|
|
fixed. [RT #51636]
|
|
|
|
=item *
|
|
|
|
A race condition inside C<PerlIOStdio_close()> has been identified and
|
|
fixed. This used to cause various threading issues, including SEGVs.
|
|
|
|
=item *
|
|
|
|
In C<unpack>, the use of C<()> groups in scalar context was internally
|
|
placing a list on the interpreter's stack, which manifested in various
|
|
ways, including SEGVs. This is now fixed [RT #50256].
|
|
|
|
=item *
|
|
|
|
Magic was called twice in C<substr>, C<\&$x>, C<tie $x, $m> and C<chop>.
|
|
These have all been fixed.
|
|
|
|
=item *
|
|
|
|
A 5.10.0 optimisation to clear the temporary stack within the implicit
|
|
loop of C<s///ge> has been reverted, as it turned out to be the cause of
|
|
obscure bugs in seemingly unrelated parts of the interpreter [commit
|
|
ef0d4e17921ee3de].
|
|
|
|
=item *
|
|
|
|
The line numbers for warnings inside C<elsif> are now correct.
|
|
|
|
=item *
|
|
|
|
The C<..> operator now works correctly with ranges whose ends are at or
|
|
close to the values of the smallest and largest integers.
|
|
|
|
=item *
|
|
|
|
C<binmode STDIN, ':raw'> could lead to segmentation faults on some platforms.
|
|
This has been fixed [RT #54828].
|
|
|
|
=item *
|
|
|
|
An off-by-one error meant that C<index $str, ...> was effectively being
|
|
executed as C<index "$str\0", ...>. This has been fixed [RT #53746].
|
|
|
|
=item *
|
|
|
|
Various leaks associated with named captures in regexes have been fixed
|
|
[RT #57024].
|
|
|
|
=item *
|
|
|
|
A weak reference to a hash would leak. This was affecting C<DBI>
|
|
[RT #56908].
|
|
|
|
=item *
|
|
|
|
Using (?|) in a regex could cause a segfault [RT #59734].
|
|
|
|
=item *
|
|
|
|
Use of a UTF-8 C<tr//> within a closure could cause a segfault [RT #61520].
|
|
|
|
=item *
|
|
|
|
Calling C<sv_chop()> or otherwise upgrading an SV could result in an
|
|
unaligned 64-bit access on the SPARC architecture [RT #60574].
|
|
|
|
=item *
|
|
|
|
In the 5.10.0 release, C<inc_version_list> would incorrectly list
|
|
C<5.10.*> after C<5.8.*>; this affected the C<@INC> search order
|
|
[RT #67628].
|
|
|
|
=item *
|
|
|
|
In 5.10.0, C<pack "a*", $tainted_value> returned a non-tainted value
|
|
[RT #52552].
|
|
|
|
=item *
|
|
|
|
In 5.10.0, C<printf> and C<sprintf> could produce the fatal error
|
|
C<panic: utf8_mg_pos_cache_update> when printing UTF-8 strings
|
|
[RT #62666].
|
|
|
|
=item *
|
|
|
|
In the 5.10.0 release, a dynamically created C<AUTOLOAD> method might be
|
|
missed (method cache issue) [RT #60220,60232].
|
|
|
|
=item *
|
|
|
|
In the 5.10.0 release, a combination of C<use feature> and C<//ee> could
|
|
cause a memory leak [RT #63110].
|
|
|
|
=item *
|
|
|
|
C<-C> on the shebang (C<#!>) line is once more permitted if it is also
|
|
specified on the command line. C<-C> on the shebang line used to be a
|
|
silent no-op I<if> it was not also on the command line, so perl 5.10.0
|
|
disallowed it, which broke some scripts. Now perl checks whether it is
|
|
also on the command line and only dies if it is not [RT #67880].
|
|
|
|
=item *
|
|
|
|
In 5.10.0, certain types of re-entrant regular expression could crash,
|
|
or cause the following assertion failure [RT #60508]:
|
|
|
|
Assertion rx->sublen >= (s - rx->subbeg) + i failed
|
|
|
|
|
|
=back
|
|
|
|
=head1 New or Changed Diagnostics
|
|
|
|
=over 4
|
|
|
|
=item C<panic: sv_chop %s>
|
|
|
|
This new fatal error occurs when the C routine C<Perl_sv_chop()> was
|
|
passed a position that is not within the scalar's string buffer. This
|
|
could be caused by buggy XS code, and at this point recovery is not
|
|
possible.
|
|
|
|
=item C<Can't locate package %s for the parents of %s>
|
|
|
|
This warning has been removed. In general, it only got produced in
|
|
conjunction with other warnings, and removing it allowed an ISA lookup
|
|
optimisation to be added.
|
|
|
|
=item C<v-string in use/require is non-portable>
|
|
|
|
This warning has been removed.
|
|
|
|
=item C<Deep recursion on subroutine "%s">
|
|
|
|
It is now possible to change the depth threshold for this warning from the
|
|
default of 100, by recompiling the F<perl> binary, setting the C
|
|
pre-processor macro C<PERL_SUB_DEPTH_WARN> to the desired value.
|
|
|
|
=back
|
|
|
|
=head1 Changed Internals
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
The J.R.R. Tolkien quotes at the head of C source file have been checked and
|
|
proper citations added, thanks to a patch from Tom Christiansen.
|
|
|
|
=item *
|
|
|
|
C<vcroak()> now accepts a null first argument. In addition, a full audit
|
|
was made of the "not NULL" compiler annotations, and those for several
|
|
other internal functions were corrected.
|
|
|
|
=item *
|
|
|
|
New macros C<dSAVEDERRNO>, C<dSAVE_ERRNO>, C<SAVE_ERRNO>, C<RESTORE_ERRNO>
|
|
have been added to formalise the temporary saving of the C<errno>
|
|
variable.
|
|
|
|
=item *
|
|
|
|
The function C<Perl_sv_insert_flags> has been added to augment
|
|
C<Perl_sv_insert>.
|
|
|
|
=item *
|
|
|
|
The function C<Perl_newSV_type(type)> has been added, equivalent to
|
|
C<Perl_newSV()> followed by C<Perl_sv_upgrade(type)>.
|
|
|
|
=item *
|
|
|
|
The function C<Perl_newSVpvn_flags()> has been added, equivalent to
|
|
C<Perl_newSVpvn()> and then performing the action relevant to the flag.
|
|
|
|
Two flag bits are currently supported.
|
|
|
|
=over 4
|
|
|
|
=item C<SVf_UTF8>
|
|
|
|
This will call C<SvUTF8_on()> for you. (Note that this does not convert an
|
|
sequence of ISO 8859-1 characters to UTF-8). A wrapper, C<newSVpvn_utf8()>
|
|
is available for this.
|
|
|
|
=item C<SVs_TEMP>
|
|
|
|
Call C<sv_2mortal()> on the new SV.
|
|
|
|
=back
|
|
|
|
There is also a wrapper that takes constant strings, C<newSVpvs_flags()>.
|
|
|
|
=item *
|
|
|
|
The function C<Perl_croak_xs_usage> has been added as a wrapper to
|
|
C<Perl_croak>.
|
|
|
|
=item *
|
|
|
|
The functions C<PerlIO_find_layer> and C<PerlIO_list_alloc> are now
|
|
exported.
|
|
|
|
=item *
|
|
|
|
C<PL_na> has been exterminated from the core code, replaced by local STRLEN
|
|
temporaries, or C<*_nolen()> calls. Either approach is faster than C<PL_na>,
|
|
which is a pointer deference into the interpreter structure under ithreads,
|
|
and a global variable otherwise.
|
|
|
|
=item *
|
|
|
|
C<Perl_mg_free()> used to leave freed memory accessible via SvMAGIC() on
|
|
the scalar. It now updates the linked list to remove each piece of magic
|
|
as it is freed.
|
|
|
|
=item *
|
|
|
|
Under ithreads, the regex in C<PL_reg_curpm> is now reference counted. This
|
|
eliminates a lot of hackish workarounds to cope with it not being reference
|
|
counted.
|
|
|
|
=item *
|
|
|
|
C<Perl_mg_magical()> would sometimes incorrectly turn on C<SvRMAGICAL()>.
|
|
This has been fixed.
|
|
|
|
=item *
|
|
|
|
The I<public> IV and NV flags are now not set if the string value has
|
|
trailing "garbage". This behaviour is consistent with not setting the
|
|
public IV or NV flags if the value is out of range for the type.
|
|
|
|
=item *
|
|
|
|
SV allocation tracing has been added to the diagnostics enabled by C<-Dm>.
|
|
The tracing can alternatively output via the C<PERL_MEM_LOG> mechanism, if
|
|
that was enabled when the F<perl> binary was compiled.
|
|
|
|
=item *
|
|
|
|
Uses of C<Nullav>, C<Nullcv>, C<Nullhv>, C<Nullop>, C<Nullsv> etc have been
|
|
replaced by C<NULL> in the core code, and non-dual-life modules, as C<NULL>
|
|
is clearer to those unfamiliar with the core code.
|
|
|
|
=item *
|
|
|
|
A macro C<MUTABLE_PTR(p)> has been added, which on (non-pedantic) gcc will
|
|
not cast away C<const>, returning a C<void *>. Macros C<MUTABLE_SV(av)>,
|
|
C<MUTABLE_SV(cv)> etc build on this, casting to C<AV *> etc without
|
|
casting away C<const>. This allows proper compile-time auditing of
|
|
C<const> correctness in the core, and helped picked up some errors (now
|
|
fixed).
|
|
|
|
=item *
|
|
|
|
Macros C<mPUSHs()> and C<mXPUSHs()> have been added, for pushing SVs on the
|
|
stack and mortalizing them.
|
|
|
|
=item *
|
|
|
|
Use of the private structure C<mro_meta> has changed slightly. Nothing
|
|
outside the core should be accessing this directly anyway.
|
|
|
|
=item *
|
|
|
|
A new tool, C<Porting/expand-macro.pl> has been added, that allows you
|
|
to view how a C preprocessor macro would be expanded when compiled.
|
|
This is handy when trying to decode the macro hell that is the perl
|
|
guts.
|
|
|
|
=back
|
|
|
|
=head1 New Tests
|
|
|
|
Many modules updated from CPAN incorporate new tests.
|
|
|
|
Several tests that have the potential to hang forever if they fail now
|
|
incorporate a "watchdog" functionality that will kill them after a timeout,
|
|
which helps ensure that C<make test> and C<make test_harness> run to
|
|
completion automatically. (Jerry Hedden).
|
|
|
|
Some core-specific tests have been added:
|
|
|
|
=over 4
|
|
|
|
=item t/comp/retainedlines.t
|
|
|
|
Check that the debugger can retain source lines from C<eval>.
|
|
|
|
=item t/io/perlio_fail.t
|
|
|
|
Check that bad layers fail.
|
|
|
|
=item t/io/perlio_leaks.t
|
|
|
|
Check that PerlIO layers are not leaking.
|
|
|
|
=item t/io/perlio_open.t
|
|
|
|
Check that certain special forms of open work.
|
|
|
|
=item t/io/perlio.t
|
|
|
|
General PerlIO tests.
|
|
|
|
=item t/io/pvbm.t
|
|
|
|
Check that there is no unexpected interaction between the internal types
|
|
C<PVBM> and C<PVGV>.
|
|
|
|
=item t/mro/package_aliases.t
|
|
|
|
Check that mro works properly in the presence of aliased packages.
|
|
|
|
=item t/op/dbm.t
|
|
|
|
Tests for C<dbmopen> and C<dbmclose>.
|
|
|
|
=item t/op/index_thr.t
|
|
|
|
Tests for the interaction of C<index> and threads.
|
|
|
|
=item t/op/pat_thr.t
|
|
|
|
Tests for the interaction of esoteric patterns and threads.
|
|
|
|
=item t/op/qr_gc.t
|
|
|
|
Test that C<qr> doesn't leak.
|
|
|
|
=item t/op/reg_email_thr.t
|
|
|
|
Tests for the interaction of regex recursion and threads.
|
|
|
|
=item t/op/regexp_qr_embed_thr.t
|
|
|
|
Tests for the interaction of patterns with embedded C<qr//> and threads.
|
|
|
|
=item t/op/regexp_unicode_prop.t
|
|
|
|
Tests for Unicode properties in regular expressions.
|
|
|
|
=item t/op/regexp_unicode_prop_thr.t
|
|
|
|
Tests for the interaction of Unicode properties and threads.
|
|
|
|
=item t/op/reg_nc_tie.t
|
|
|
|
Test the tied methods of C<Tie::Hash::NamedCapture>.
|
|
|
|
=item t/op/reg_posixcc.t
|
|
|
|
Check that POSIX character classes behave consistently.
|
|
|
|
=item t/op/re.t
|
|
|
|
Check that exportable C<re> functions in F<universal.c> work.
|
|
|
|
=item t/op/setpgrpstack.t
|
|
|
|
Check that C<setpgrp> works.
|
|
|
|
=item t/op/substr_thr.t
|
|
|
|
Tests for the interaction of C<substr> and threads.
|
|
|
|
=item t/op/upgrade.t
|
|
|
|
Check that upgrading and assigning scalars works.
|
|
|
|
=item t/uni/lex_utf8.t
|
|
|
|
Check that Unicode in the lexer works.
|
|
|
|
=item t/uni/tie.t
|
|
|
|
Check that Unicode and C<tie> work.
|
|
|
|
=back
|
|
|
|
=head1 Known Problems
|
|
|
|
This is a list of some significant unfixed bugs, which are regressions
|
|
from either 5.10.0 or 5.8.x.
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
C<List::Util::first> misbehaves in the presence of a lexical C<$_>
|
|
(typically introduced by C<my $_> or implicitly by C<given>). The variable
|
|
which gets set for each iteration is the package variable C<$_>, not the
|
|
lexical C<$_> [RT #67694].
|
|
|
|
A similar issue may occur in other modules that provide functions which
|
|
take a block as their first argument, like
|
|
|
|
foo { ... $_ ...} list
|
|
|
|
=item *
|
|
|
|
The C<charnames> pragma may generate a run-time error when a regex is
|
|
interpolated [RT #56444]:
|
|
|
|
use charnames ':full';
|
|
my $r1 = qr/\N{THAI CHARACTER SARA I}/;
|
|
"foo" =~ $r1; # okay
|
|
"foo" =~ /$r1+/; # runtime error
|
|
|
|
A workaround is to generate the character outside of the regex:
|
|
|
|
my $a = "\N{THAI CHARACTER SARA I}";
|
|
my $r1 = qr/$a/;
|
|
|
|
=item *
|
|
|
|
Some regexes may run much more slowly when run in a child thread compared
|
|
with the thread the pattern was compiled into [RT #55600].
|
|
|
|
|
|
=back
|
|
|
|
=head1 Deprecations
|
|
|
|
The following items are now deprecated.
|
|
|
|
=over 4
|
|
|
|
=item *
|
|
|
|
C<Switch> is buggy and should be avoided. From perl 5.11.0 onwards, it is
|
|
intended that any use of the core version of this module will emit a
|
|
warning, and that the module will eventually be removed from the core
|
|
(probably in perl 5.14.0). See L<perlsyn/"Switch statements"> for its
|
|
replacement.
|
|
|
|
=item *
|
|
|
|
C<suidperl> will be removed in 5.12.0. This provides a mechanism to
|
|
emulate setuid permission bits on systems that don't support it properly.
|
|
|
|
=back
|
|
|
|
=head1 Acknowledgements
|
|
|
|
Some of the work in this release was funded by a TPF grant.
|
|
|
|
Nicholas Clark officially retired from maintenance pumpking duty at the
|
|
end of 2008; however in reality he has put much effort in since then to
|
|
help get 5.10.1 into a fit state to be released, including writing a
|
|
considerable chunk of this perldelta.
|
|
|
|
Steffen Mueller and David Golden in particular helped getting CPAN modules
|
|
polished and synchronised with their in-core equivalents.
|
|
|
|
Craig Berry was tireless in getting maint to run under VMS, no matter how
|
|
many times we broke it for him.
|
|
|
|
The other core committers contributed most of the changes, and applied most
|
|
of the patches sent in by the hundreds of contributors listed in F<AUTHORS>.
|
|
|
|
(Sorry to all the people I haven't mentioned by name).
|
|
|
|
Finally, thanks to Larry Wall, without whom none of this would be
|
|
necessary.
|
|
|
|
=head1 Reporting Bugs
|
|
|
|
If you find what you think is a bug, you might check the articles
|
|
recently posted to the comp.lang.perl.misc newsgroup and the perl
|
|
bug database at http://rt.perl.org/perlbug/ . There may also be
|
|
information at http://www.perl.org/ , the Perl Home Page.
|
|
|
|
If you believe you have an unreported bug, please run the B<perlbug>
|
|
program included with your release. Be sure to trim your bug down
|
|
to a tiny but sufficient test case. Your bug report, along with the
|
|
output of C<perl -V>, will be sent off to perlbug@perl.org to be
|
|
analysed by the Perl porting team.
|
|
|
|
If the bug you are reporting has security implications, which make it
|
|
inappropriate to send to a publicly archived mailing list, then please send
|
|
it to perl5-security-report@perl.org. This points to a closed subscription
|
|
unarchived mailing list, which includes
|
|
all the core committers, who will be able
|
|
to help assess the impact of issues, figure out a resolution, and help
|
|
co-ordinate the release of patches to mitigate or fix the problem across all
|
|
platforms on which Perl is supported. Please only use this address for
|
|
security issues in the Perl core, not for modules independently
|
|
distributed on CPAN.
|
|
|
|
=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
|