Changes include performance enhancements and various bug fixes.
Perl 5.20.1 represents approximately 4 months of development since Perl 5.20.0 and contains approximately 12,000 lines of changes across 170 files from 36 authors.
/boot/common/lib.
Undef it for Haiku and COMPILER_LIB_DIRS instead (also for other platforms
not set here).
XXX: all platforms should be SYSLIBPATH=${COMPILER_LIB_DIRS}, or
XXX: _OPSYS_LIB_DIRS for such platforms should be fixed.
Experimental Subroutine signatures
subs now take a prototype attribute
More consistent prototype parsing
rand now uses a consistent random number generator
New slice syntax
Experimental Postfix Dereferencing
Unicode 6.3 now supported
New \p{Unicode} regular expression pattern property
Better 64-bit support
use locale now works on UTF-8 locales
use locale now compiles on systems without locale ability
More locale initialization fallback options
-DL runtime option now added for tracing locale setting
-F now implies -a and -a implies -n
$a and $b warnings exemption
* In module.mk, pthread is marked as direct dependency unconditionally for
packages using module.mk. It is unwanted behavior.
* Include pthread.buildlink3.mk in buildlink3.mk only for the case perl5 is
built with "threads".
Fixes potential unwanted dependeny on pthread using perl5/module.mk.
* B has been upgraded from version 1.42_01 to 1.42_02.
* B::Concise has been upgraded from version 0.95 to 0.95_01.
* English has been upgraded from version 1.06 to 1.06_01. This fixes an error about the performance of $`, $&, and c<$'>.
* File::Glob has been upgraded from version 1.20 to 1.20_01.
Bugs fixed:
* Perl 5.18.1 introduced a regression along with a bugfix for lexical subs. Some B::SPECIAL results from B::CV::GV became undefs instead. This broke Devel::Cover among other libraries.
* Perl 5.18.0 introduced a regression whereby [:^ascii:], if used in the same character class as other qualifiers, would fail to match characters in the Latin-1 block.
* Perl 5.18.0 introduced a regression when using ->SUPER::method with AUTOLOAD by looking up AUTOLOAD from the current package, rather than the current package’s superclass.
* Perl 5.18.0 introduced a regression whereby -bareword was no longer permitted under the strict and integer pragmata when used together.
* Previously PerlIOBase_dup didn't check if pushing the new layer succeeded before (optionally) setting the utf8 flag. This could cause segfaults-by-nullpointer.
* A buffer overflow with very long identifiers has been fixed.
* A regression from 5.16 in the handling of padranges led to assertion failures if a keyword plugin declined to handle the second ‘my’, but only after creating a padop.
* The construct $r=qr/.../; /$r/p is now handled properly, an issue which had been worsened by changes 5.18.0.
* B has been upgraded from 1.42 to 1.42_01, fixing bugs related to lexical subroutines.
* Digest::SHA has been upgraded from 5.84 to 5.84_01, fixing a crashing bug.
* Module::CoreList has been upgraded from 2.89 to 2.96.
* Starting in v5.18.0, a construct like /[#](?{})/x would have its # incorrectly interpreted as a comment. The code block would be skipped, unparsed. This has been corrected.
* A number of memory leaks related to the new, experimental regexp bracketed character class feature have been plugged.
* The OP allocation code now returns correctly aligned memory in all cases for struct pmop. Previously it could return memory only aligned to a 4-byte boundary, which is not correct for an ithreads build with 64 bit IVs on some 32 bit platforms. Notably, this caused the build to fail completely on sparc GNU/Linux.
* The debugger's man command been fixed. It was broken in the v5.18.0 release. The man command is aliased to the names doc and perldoc - all now work again.
* @_ is now correctly visible in the debugger, fixing a regression introduced in v5.18.0's debugger.
* Fixed a small number of regexp constructions that could either fail to match or crash perl when the string being matched against was allocated above the 2GB line on 32-bit systems.
* Perl v5.16 inadvertently introduced a bug whereby calls to XSUBs that were not visible at compile time were treated as lvalues and could be assigned to, even when the subroutine was not an lvalue sub. This has been fixed.
* Perl v5.18 inadvertently introduced a bug whereby dual-vars (i.e. variables with both string and numeric values, such as $! ) where the truthness of the variable was determined by the numeric value rather than the string value.
* Perl v5.18 inadvertently introduced a bug whereby interpolating mixed up- and down-graded UTF-8 strings in a regex could result in malformed UTF-8 in the pattern: specifically if a downgraded character in the range \x80..\xff followed a UTF-8 string
* Lexical constants (my sub a() { 42 }) no longer crash when inlined.
* Parameter prototypes attached to lexical subroutines are now respected when compiling sub calls without parentheses. Previously, the prototypes were honoured only for calls with parentheses.
* Syntax errors in lexical subroutines in combination with calls to the same subroutines no longer cause crashes at compile time.
* The dtrace sub-entry probe now works with lexical subs, instead of crashing
* Undefining an inlinable lexical subroutine (my sub foo() { 42 } undef &foo) would result in a crash if warnings were turned on.
* Deep recursion warnings no longer crash lexical subroutines.