Open SourceAfter years of development presents a new stable branch of the programming language – Perl 5.18.

In preparation for the new release has been changed about 400 thousand lines of code changes affected the 2100 files, developed with the participation of 113 developers.

A branch of 5.18 is released under an approved three years ago, a fixed schedule of development, implying a new stable release branches once a year and corrective releases – once in three months. June 20 is scheduled to release first correction release Perl 5.18.1, which will be corrected in the most significant errors identified in the implementation of Perl 5.18.0. Simultaneously with the release Perl 5.18 5.14 discontinued support for branches, for which in the future may be issued updates only in case of critical security problems. Also began the process of developing the experimental 5.19, on the basis of which in May 2014 will be formed stable release of Perl 5.20.

Key enhancements added in Perl 5.18:

The revised implementation hashes. One of the most noticeable changes is to ensure randomization used hash functions, which has a positive effect on safety (eg protection against DoS-attacks through the manipulation of hash collisions), but results in an unpredictable order of the widgets function keys (), values ​​() and each (). This change may affect the performance of applications that use undocumented property of preserving the order of records in different hashes (hashes in the official documentation is positioned as a disordered structure). From now on, the order of the identical entries in different hashes in the same hashes in different runs the script will be different. The level of randomization can be set via the environment variable PERL_PERTURB_KEYS (when assigned to the 0 key randomization is turned off and the behavior of perl is as in previous releases).

Among other changes, you can mention the implementation of the use of alternative algorithms. As a hashing algorithm by default activated ONE_AT_A_TIME_HARD. In addition, the composition includes several alternative algorithms, but except SIPHASH, which is considered safe, yet only recommended for experimentation because they contain certain safety problems;

A new mechanism for activation of the experimental possibilities and a new category of alert “experimental”, the control displays a notification to test functionality. For example, for the inclusion of new experimental possibilities and hide related warnings should specify directives:

no warnings “experimental :: feature_name”;
use feature “feature_name”;

– Support pilot expansion in the system of regular expressions, allowing to carry out a comparison with the use of advanced crossing rules, exceptions, and the union of sets of characters. For example, ‘[AZ – W]’ – the characters from A to Z with the exception of W. A more complex example of forming a plurality of characters: ‘[\ p {Latin} & \ p {L &} – AZ]’. Functionality coincides with the capabilities module Unicode :: Regex :: Set;
– Experimental support for lexical routines (“lexical_subs”), allowing to identify with the expression “state sub” routine, visible only in the lexical block scope in which the routine was created. In contrast to the “my sub” procedure “state sub” work much faster because they are not created each time the unit and shared between calls to other routines;
– Ability to use in statements next, last and redo dynamically computed labels generated during the execution of the script based on an arbitrary expression;
– Previously, any non-constant arguments next, last and redo perceived as an empty string;
– In the namespace “CORE ::” includes features defined, delete, exists, glob, pos, prototytpe, scalar, split, study and undef, ie now they can override the standard way without additional tweaks;
– Support for Unicode 6.2 and implementation of the possibility of determining the proper names of characters to use \ N {…}, charnames :: vianame (), etc. When naming signs can be employed range from Unicode, i.e. Character names can now be defined not only in English. The use of unqualified names of characters in the \ N {…} now results in an error instead of a warning. Note $ / = \ N the function readline () now leads to the reading of N-symbols rather than N-bytes. Held prominent optimize the speed of regular expressions in which there are Unicode characters, for example, the speed of the operation \ X has increased by 35-40%;
– Integration of new checkpoints for use in a dynamic debugging DTrace: op-entry, loading-file, loaded-file;
– Added a new internal variable $ {^ LAST_FH} to access the last read file descriptor;
– Vertical tab (\ cK) is now attributed to a number of space characters (\ s).
Updated versions of a large number of members in the basic modules;
Deprecated modules: encoding, Archive :: Extract, B :: Lint *, Devel :: InnerPackage, Log :: Message *, Module :: Pluggable *, Object :: Accessor, Pod :: LaTeX, Term :: UI *. Dropped support directly called from the system library functions to check a character class, for example, is_uni_alnum etc.; Stops platform support Windows CE, z / OS, DG / UX, and NeXT;
– The documentation on the use of Storable module added item, the warning about the inadmissibility of deserializing data from untrusted external sources, as in the course of such treatment can organize the implementation of perl-code and load modules.