perl5120delta - what is new for perl v5.12.0
-FIX ME BEFORE RELEASE
-
-UPDATED MODULE LIST NEEDS TO BE GENERATED
-
=head1 DESCRIPTION
This document describes differences between the 5.10.0 release and
=item *
C<$VERSION> is a version object that provides proper overloading of
-comparision operators so comparing C<$VERSION> to decimal (1.23) or
+comparison operators so comparing C<$VERSION> to decimal (1.23) or
dotted-decimal (v1.2.3) version numbers works correctly.
=item *
literal, it can be statically parsed by toolchain modules
without C<eval> the way MM-E<gt>parse_version does for C<$VERSION = ...>
-=item *
+=back
It does not break old code with only C<package NAME>, but code that uses
C<package NAME VERSION> will need to be restricted to perl 5.12.0 or newer
Users requiring the latest Perl will benefit, and perhaps after several
years, it will become a standard practice.
-=back
However, C<package NAME VERSION> requires a new, 'strict' version
number format. See L<"Version number formats"> for details.
A new operator, C<...>, nicknamed the Yada Yada operator, has been added.
It is intended to mark placeholder code that is not yet implemented.
-See L<perlop/"Yada Yada Operator">. (chromatic)
+See L<perlop/"Yada Yada Operator">.
=head2 Implicit strictures
The C<each> function can now operate on arrays.
+=head2 C<when> as a statement modifier
+
+C<when> is now allowed to be used as a statement modifier.
+
=head2 C<$,> flexibility
The variable C<$,> may now be tied.
-=head2 // in where clauses
+=head2 // in when clauses
// now behaves like || in when clauses
=item C<overloading>
C<overloading> allows you to lexically disable or enable overloading
-for some or all operations. (Yuval Kogman)
+for some or all operations.
Version 0.001 has been added to the Perl core.
internal UTF-8 flag set, but that contain single-byte characters between
128 and 255.
-Upgraded from version 1.11 to 1.15.
+Upgraded from version 1.11 to 1.16.
=item C<less>
=item C<Module::CoreList>
-Upgraded from version 2.12 to 2.26.
+Upgraded from version 2.12 to 2.27.
=item C<Module::Load>
=item *
+The string repetition operator (C<$str x $num>) is now several times faster
+when C<$str> has length one or C<$num> is large.
+
+=item *
+
Reversing an array to itself (as in C<@a = reverse @a>) in void context
now happens in-place and is several orders of magnitude faster than it
used to be. It will also preserve non-existent elements whenever
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).
+completion automatically.
=back
=item *
If an unresolved named character or sequence was encountered when compiling a
-regex pattern then the fatal error C<\\N{NAME} must be resolved by the lexer>
+regex pattern then the fatal error C<\N{NAME} must be resolved by the lexer>
is now produced. This can happen, for example, when using a single-quotish
-context like C<$re = '\N{SPACE}'; $re;>. See L<perldiag> for more examples of
+context like C<$re = '\N{SPACE}'; /$re/;>. See L<perldiag> for more examples of
how the lexer can get bypassed.
=item *
-C<Invalid hexadecimal number in \\N{U+...}> is a new fatal error triggered when
+C<Invalid hexadecimal number in \N{U+...}> is a new fatal error triggered when
the character constant represented by C<...> is not a valid hexadecimal
number.
The new meaning of C<\N> as C<[^\n]> is not valid in a bracketed character
class, just like C<.> in a character class loses its special meaning, and will
-cause the fatal error C<\\N in a character class must be a named character: \\N{...}>.
+cause the fatal error C<\N in a character class must be a named character: \N{...}>.
=item *
The rules on what is legal for the C<...> in C<\N{...}> have been tightened
up so that unless the C<...> begins with an alphabetic character and continues
with a combination of alphanumerics, dashes, spaces, parentheses or colons
-then the warning C<Deprecated character(s) in \\N{...} starting at '%s'> is
+then the warning C<Deprecated character(s) in \N{...} starting at '%s'> is
now issued.
=item *
to suppress only those, but not other syntax-related warnings. Warnings where
prototypes are changed, ignored, or not met are still in the C<prototype>
-category as before. (Matt S. Trout)
+category as before.
=item *
=item *
-The Windows select() implementation now supports all empty C<fd_set>s
-more correctly.
-
-=item *
-
The C<syntax> category was removed from 5 warnings that should only be in
C<deprecated>.
=item *
-The warning C<Missing right brace on \\N{} or unescaped left brace after \\N.
+The warning C<Missing right brace on \N{} or unescaped left brace after \N.
Assuming the latter> will be issued if Perl encounters a C<\N{> but doesn't
find a matching C<}>. In this case Perl doesn't know if it was mistakenly
omitted, or if "match non-newline" followed by "match a C<{>" was desired.
=item *
-F<h2xs> no longer incorrectly treats enum values like macros (Daniel Burr).
-It also now handles C++ style constants (C<//>) properly in enums. (A patch from
-Rainer Weikusat was used; Daniel Burr also proposed a similar fix).
+F<h2xs> no longer incorrectly treats enum values like macros.
+It also now handles C++ style comments (C<//>) properly in enums.
=item *
-F<perl5db.pl> now supports C<LVALUE> subroutines. Additionally, the debugger now correctly handles proxy constant subroutines, and subroutine stubs.
+F<perl5db.pl> now supports C<LVALUE> subroutines. Additionally, the
+debugger now correctly handles proxy constant subroutines, and
+subroutine stubs.
=item *
F<perlbug> now uses C<%Module::CoreList::bug_tracker> to print out
upstream bug tracker URLs. If a user identifies a particular module
-as the topic of their bug report and we're able to divine ithe URL for
+as the topic of their bug report and we're able to divine the URL for
its upstream bug tracker, perlbug now provide a message to the user
explaining that the core copies the CPAN version directly, and provide
the URL for reporting the bug directly to the upstream author.
=item *
Perl's developers have fixed bugs in F<a2p> having to do with the
-C<match()> operator in list context.
+C<match()> operator in list context. Additionally, F<a2p> no longer
+generates code that uses the C<$[> variable.
=back
=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 *
-Perl now includes previously missing files from the Unicode 5.1 Character Database.
+Perl now includes previously missing files from the Unicode Character Database.
=item *
=head2 Discontinued Platforms
-
=over
-=item DomainOS
-
-=item Tenon MachTen
+=item Domain/OS
=item MiNT
+=item Tenon MachTen
+
=back
=head2 Updated Platforms
=over 4
+=item AIX
+
+=over 4
+
+=item *
+
+Removed F<libbsd> for AIX 5L and 6.1. Only C<flock()> was used from F<libbsd>.
+
+=item *
+
+Removed F<libgdbm> for AIX 5L and 6.1 if F<libgdbm> < 1.8.3-5 is installed.
+The F<libgdbm> is delivered as an optional package with the AIX Toolbox.
+Unfortunately the versions below 1.8.3-5 are broken.
+
+=item *
+
+Hints changes mean that AIX 4.2 should work again.
+
+=back
+
+=item Cygwin
+
+=over 4
+
+=item *
+
+Perl now supports IPv6 on Cygwin 1.7 and newer.
+
+=item *
+
+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.
+
+=back
+
=item Darwin (Mac OS X)
=over 4
=back
-=item Win32
+=item FreeBSD
=over 4
=item *
-Initial support for mingw64 is now available.
-
-=item *
-
-Various bits of Perl's build infrastructure are no longer converted to
-win32 line endings at release time. If this hurts you, please report the
-problem with the L<perlbug> program included with perl.
-
-=item *
+The hints files now identify the correct threading libraries on FreeBSD 7
+and later.
-Always add a manifest resource to C<perl.exe> to specify the C<trustInfo>
-settings for Windows Vista and later. Without this setting Windows
-will treat C<perl.exe> as a legacy application and apply various
-heuristics like redirecting access to protected file system areas
-(like the "Program Files" folder) to the users "VirtualStore"
-instead of generating a proper "permission denied" error.
+=back
-For VC8 and VC9 this manifest setting is automatically generated by
-the compiler/linker (together with the binding information for their
-respective runtime libraries); for all other compilers we need to
-embed the manifest resource explicitly in the external resource file.
+=item Irix
-This change also requests the Microsoft Common-Controls version 6.0
-(themed controls introduced in Windows XP) via the dependency list
-in the assembly manifest. For VC8 and VC9 this is specified using the
-C</manifestdependency> linker commandline option instead.
+=over 4
=item *
-Improved message window handling means that C<alarm> and C<kill> messages
-will no longer be dropped under race conditions.
+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.
=back
-=item cygwin
+=item NetBSD
=over 4
=item *
-Perl now suppoorts IPv6 on cygwin 1.7 and newer.
+Hints now supports versions 5.*.
=back
=back
-=item AIX
+=item Stratus VOS
-Removed F<libbsd> for AIX 5L and 6.1. Only C<flock()> was used from F<libbsd>.
+=over 4
-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.
+=item *
-Hints changes mean that AIX 4.2 should work again.
+Various changes from Stratus have been merged in.
-=item Cygwin
+=back
-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 Symbian
+=over 4
-=item FreeBSD
+=item *
-The hints files now identify the correct threading libraries on FreeBSD 7
-and later.
+There is now support for Symbian S60 3.2 SDK and S60 5.0 SDK.
-=item Irix
+=back
-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 Windows
-=item NetBSD
+=over 4
-Hints now supports versions 5.*.
+=item *
-=item Stratus VOS
+Perl 5.12 supports Windows 2000 and later. The supporting code for
+legacy versions of Windows is still included, but will be removed
+during the next development cycle.
-Various changes from Stratus have been merged in.
+=item *
-=item Symbian
+Initial support for building Perl with MinGW-w64 is now available.
-There is now support for Symbian S60 3.2 SDK and S60 5.0 SDK.
+=item *
+
+F<perl.exe> now includes a manifest resource to specify the C<trustInfo>
+settings for Windows Vista and later. Without this setting Windows
+would treat F<perl.exe> as a legacy application and apply various
+heuristics like redirecting access to protected file system areas
+(like the "Program Files" folder) to the users "VirtualStore"
+instead of generating a proper "permission denied" error.
+
+The manifest resource also requests the Microsoft Common-Controls
+version 6.0 (themed controls introduced in Windows XP). Check out the
+Win32::VisualStyles module on CPAN to switch back to old style
+unthemed controls for legacy applications.
+
+=item *
+
+The C<-t> filetest operator now only returns true if the filehandle
+is connected to a console window. In previous versions of Perl it
+would return true for all character mode devices, including F<NUL>
+and F<LPT1>.
+
+=item *
+
+The C<-p> filetest operator now works correctly, and the
+Fcntl::S_IFIFO constant is defined when Perl is compiled with
+Microsoft Visual C. In previous Perl versions C<-p> always
+returned a false value, and the Fcntl::S_IFIFO constant
+was not defined.
+
+This bug is specific to Microsoft Visual C and never affected
+Perl binaries built with MinGW.
+
+=item *
+
+The socket error codes are now more widely supported: The POSIX
+module will define the symbolic names, like POSIX::EWOULDBLOCK,
+and stringification of socket error codes in $! works as well
+now;
+
+ C:\>perl -MPOSIX -E "$!=POSIX::EWOULDBLOCK; say $!"
+ A non-blocking socket operation could not be completed immediately.
+
+=item *
+
+flock() will now set sensible error codes in $!. Previous Perl versions
+copied the value of $^E into $!, which caused much confusion.
+
+=item *
+
+select() now supports all empty C<fd_set>s more correctly.
+
+=item *
+
+C<'.\foo'> and C<'..\foo'> were treated differently than
+C<'./foo'> and C<'../foo'> by C<do> and C<require> [RT #63492].
+
+=item *
+
+Improved message window handling means that C<alarm> and C<kill> messages
+will no longer be dropped under race conditions.
+
+=item *
+
+Various bits of Perl's build infrastructure are no longer converted to
+win32 line endings at release time. If this hurts you, please report the
+problem with the L<perlbug> program included with perl.
+
+=back
=back
=item *
-Several porters have reported mysterious crashes when Perl's entire test suite is run after a build on certain Windows 2000 systems. When run by hand, the individual tests reportedly work fine.
+Several porters have reported mysterious crashes when Perl's entire
+test suite is run after a build on certain Windows 2000 systems. When
+run by hand, the individual tests reportedly work fine.
=back
Perl 5.12.0 represents approximately two years of development since
Perl 5.10.0 and contains over 750,000 lines of changes across over
-3000 files from over 200 authors and committers.
+3,000 files from over 200 authors and committers.
-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.12.0:
+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.12.0:
Aaron Crane, Abe Timmerman, Abhijit Menon-Sen, Abigail, Adam Russell,
Adriano Ferreira, Ævar Arnfjörð Bjarmason, Alan Grover, Alexandr