=head1 NAME perldelta - what is new for perl v5.9.2 =head1 DESCRIPTION This document describes differences between the 5.9.1 and the 5.9.2 development releases. See L and L for the differences between 5.8.0 and 5.9.1. =head1 Incompatible Changes =head2 Packing and UTF-8 strings The semantics of pack() and unpack() regarding UTF-8-encoded data has been changed. Processing is now by default character per character instead of byte per byte on the underlying encoding. Notably, code that used things like C to see through the encoding of string will now simply get back the original $string. Packed strings can also get upgraded during processing when you store upgraded characters. You can get the old behaviour by using C. To be consistent with pack(), the C in unpack() templates indicates that the data is to be processed in character mode, i.e. character by character; at the contrary, C in unpack() indicates UTF-8 mode, where the packed string is processed in its UTF-8-encoded Unicode form on a byte by byte basis. This is reversed with regard to perl 5.8.X. Moreover, C and C can also be used in pack() templates to specify respectively character and byte modes. C and C in the middle of a pack or unpack format now switch to the specified encoding mode, honoring parens grouping. Previously, parens were ignored. Also, there is a new pack() character format, C, which is intended to replace the old C. C is kept for unsigned chars coded as bytes in the strings internal representation. C represents unsigned (logical) character values, which can be greater than 255. It is therefore more robust when dealing with potentially UTF-8-encoded data (as C will wrap values outside the range 0..255, and not respect the string encoding). In practice, that means that pack formats are now encoding-neutral, except C. For consistency, C in unpack() format now trims all Unicode whitespace from the end of the string. Before perl 5.9.2, it used to strip only the classical ASCII space characters. =head2 The -C option can no longer be used on the #! line It wasn't working anyway. =head1 Core Enhancements =head2 Regexp debug flags A new variable, ${^RE_DEBUG_FLAGS}, controls what debug flags are in effect for the regular expression engine when running under C. See L for details. =head1 Modules and Pragmata =head2 New modules =over 4 =item * C, by Richard Clamp, is a small handy module that tells you what versions of core modules ship with any versions of Perl 5. It comes with a command-line frontend, C. =back =head2 Updated And Improved Modules and Pragmata =head1 Utility Changes =over 4 =item * The C utility is now installed with perl (see L above). =item * C and C have been made a bit more robust with regard to "modern" C code. =back =head1 Documentation =head1 Performance Enhancements =head2 Trie optimization for regexp engine The regexp engine is now able to factorize common prefixes and suffixes in regular expressions. A new special variable, ${^RE_TRIE_MAXBUF}, has been added to fine tune this optimization. =head1 Installation and Configuration Improvements =head1 Selected Bug Fixes =head1 New or Changed Diagnostics The warning I has been removed. The error I has been reformulated to be more descriptive. There is a new compilation error, I. =head1 Changed Internals =head1 Known Problems =head2 Platform Specific Problems =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://bugs.perl.org/ . 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 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, will be sent off to perlbug@perl.org to be analysed by the Perl porting team. =head1 SEE ALSO The F file for exhaustive details on what changed. The F file for how to build Perl. The F file for general stuff. The F and F files for copyright information. =cut