3 perldelta - what is new for perl v5.9.2
7 This document describes differences between the 5.9.1 and the 5.9.2
8 development releases. See L<perl590delta> and L<perl591delta> for the
9 differences between 5.8.0 and 5.9.1.
11 =head1 Incompatible Changes
13 =head2 Packing and UTF-8 strings
15 The semantics of pack() and unpack() regarding UTF-8-encoded data has been
16 changed. Processing is now by default character per character instead of
17 byte per byte on the underlying encoding. Notably, code that used things
18 like C<pack("a*", $string)> to see through the encoding of string will now
19 simply get back the original $string. Packed strings can also get upgraded
20 during processing when you store upgraded characters. You can get the old
21 behaviour by using C<use bytes>.
23 To be consistent with pack(), the C<C0> in unpack() templates indicates
24 that the data is to be processed in character mode, i.e. character by
25 character; at the contrary, C<U0> in unpack() indicates UTF-8 mode, where
26 the packed string is processed in its UTF-8-encoded Unicode form on a byte
27 by byte basis. This is reversed with regard to perl 5.8.X.
29 Moreover, C<C0> and C<U0> can also be used in pack() templates to specify
30 respectively character and byte modes.
32 C<C0> and C<U0> in the middle of a pack or unpack format now switch to the
33 specified encoding mode, honoring parens grouping. Previously, parens were
36 Also, there is a new pack() character format, C<W>, which is intended to
37 replace the old C<C>. C<C> is kept for unsigned chars coded as bytes in
38 the strings internal representation. C<W> represents unsigned (logical)
39 character values, which can be greater than 255. It is therefore more
40 robust when dealing with potentially UTF-8-encoded data (as C<C> will wrap
41 values outside the range 0..255, and not respect the string encoding).
43 In practice, that means that pack formats are now encoding-neutral, except
46 For consistency, C<A> in unpack() format now trims all Unicode whitespace
47 from the end of the string. Before perl 5.9.2, it used to strip only the
48 classical ASCII space characters.
52 The internal dump output has been improved, so that non-printable characters
53 such as newline and backspace are output in C<\x> notation, rather than
56 The B<-C> option can no longer be used on the C<#!> line. It wasn't
59 =head1 Core Enhancements
61 =head2 Malloc wrapping
63 Perl can now be built to detect attempts to assign pathologically large chunks
64 of memory. Previously such assignments would suffer from integer wrap-around
65 during size calculations causing a misallocation, which would crash perl, and
66 could theoretically be used for "stack smashing" attacks. The wrapping
67 defaults to enabled on platforms where we know it works (most AIX
68 configurations, BSDi, Darwin, DEC OSF/1, FreeBSD, HP/UX, GNU Linux, OpenBSD,
69 Solaris, VMS and most Win32 compilers) and defaults to disabled on other
72 =head2 Unicode Character Database 4.0.1
74 The copy of the Unicode Character Database included in Perl 5.9 has
75 been updated to 4.0.1 from 4.0.0.
77 =head2 suidperl less insecure
79 Paul Szabo has analysed and patched C<suidperl> to remove existing known
80 insecurities. Currently there are no known holes in C<suidperl>, but previous
81 experience shows that we cannot be confident that these were the last. You may
82 no longer invoke the set uid perl directly, so to preserve backwards
83 compatibility with scripts that invoke #!/usr/bin/suidperl the only set uid
84 binary is now C<sperl5.9.>I<n> (C<sperl5.9.2> for this release). C<suidperl>
85 is installed as a hard link to C<perl>; both C<suidperl> and C<perl> will
86 invoke C<sperl5.9.2> automatically the set uid binary, so this change should
87 be completely transparent.
89 For new projects the core perl team would strongly recommend that you use
90 dedicated, single purpose security tools such as C<sudo> in preference to
95 In addition to bug fixes, C<format>'s features have been enhanced. See
98 =head2 Unicode Character Classes
100 Perl's regular expression engine now contains support for matching on the
101 intersection of two Unicode character classes. You can also now refer to
102 user-defined character classes from within other user defined character
105 =head2 Byte-order modifiers for pack() and unpack()
107 There are two new byte-order modifiers, C<E<gt>> (big-endian) and C<E<lt>>
108 (little-endian), that can be appended to most pack() and unpack() template
109 characters and groups to force a certain byte-order for that type or group.
110 See L<perlfunc/pack> and L<perlpacktut> for details.
114 A new variable, ${^RE_DEBUG_FLAGS}, controls what debug flags are in
115 effect for the regular expression engine when running under C<use re
116 "debug">. See L<re> for details.
118 A new variable ${^UTF8LOCALE} indicates where an UTF-8 locale was detected
121 =head1 Modules and Pragmata
129 C<Module::CoreList>, by Richard Clamp, is a small handy module that tells
130 you what versions of core modules ship with any versions of Perl 5. It
131 comes with a command-line frontend, C<corelist>.
135 =head2 Updated And Improved Modules and Pragmata
137 Dual-lived modules have been updated to be kept up-to-date with respect to
140 The dual-lived modules which contain an C<_> in their version number are
141 actually I<ahead> of the corresponding CPAN release.
149 C<B::Concise> was significantly improved.
153 There is experimental support for Linux abstract Unix domain sockets.
157 C<syslog()> can now use numeric constants for facility names and priorities,
158 in addition to strings.
162 Detached threads are now also supported on Windows.
166 =head1 Utility Changes
172 The C<corelist> utility is now installed with perl (see L</"New Modules">
177 C<h2ph> and C<h2xs> have been made a bit more robust with regard to
182 Several bugs have been fixed in C<find2perl>, regarding C<-exec> and
183 C<-eval>. Also the options C<-path>, C<-ipath> and C<-iname> have been
188 The Perl debugger can now save all debugger commands for sourcing later;
189 notably, it can now emulate stepping backwards, by restarting and
190 rerunning all bar the last command from a saved command history.
192 It can also display the parent inheritance tree of a given class.
194 Perl has a new -dt command-line flag, which enables threads support in the
201 =head1 Performance Enhancements
207 Unicode case mappings (C</i>, C<lc>, C<uc>, etc) are faster.
211 C<@a = sort @a> was optimized to do in-place sort. Likewise, C<reverse
212 sort ...> is now optimized to sort in reverse, avoiding the generation of
213 a temporary intermediate list.
217 Unnecessary assignment optimised away in
225 Optimised C<map> in scalar context
229 The regexp engine now implements the trie optimization : it's able to
230 factorize common prefixes and suffixes in regular expressions. A new
231 special variable, ${^RE_TRIE_MAXBUF}, has been added to fine tune this
236 =head1 Installation and Configuration Improvements
238 There is alpha support for relocatable @INC entries.
240 Perl should build on Interix and on GNU/kFreeBSD.
242 =head1 Selected Bug Fixes
244 Most of those bugs were reported in the perl 5.8.x maintainance track.
245 Notably, quite a few utf8 bugs were fixed, and several memory leaks were
248 Development-only bug fixes include :
250 C<$Foo::_> was wrongly forced as C<$main::_>.
252 =head1 New or Changed Diagnostics
254 A new warning, C<!=~ should be !~>, is emitted to prevent this misspelling
255 of the non-matching operator.
257 The warning I<Newline in left-justified string> has been removed.
259 The error I<Too late for "-T" option> has been reformulated to be more
262 There is a new compilation error, I<Illegal declaration of subroutine>,
263 for an obscure case of syntax errors.
265 The diagnostic output of Carp has been changed slightly, to add a space after
266 the comma between arguments. This makes it much easier for tools such as
267 web browsers to wrap it, but might confuse any automatic tools which perform
268 detailed parsing of Carp output.
270 Perl -V has several improvements, making it more useable from shell
273 =head1 Changed Internals
275 =head1 Known Problems
277 =head2 Platform Specific Problems
279 =head1 Reporting Bugs
281 If you find what you think is a bug, you might check the articles
282 recently posted to the comp.lang.perl.misc newsgroup and the perl
283 bug database at http://bugs.perl.org/ . There may also be
284 information at http://www.perl.org/ , the Perl Home Page.
286 If you believe you have an unreported bug, please run the B<perlbug>
287 program included with your release. Be sure to trim your bug down
288 to a tiny but sufficient test case. Your bug report, along with the
289 output of C<perl -V>, will be sent off to perlbug@perl.org to be
290 analysed by the Perl porting team.
294 The F<Changes> file for exhaustive details on what changed.
296 The F<INSTALL> file for how to build Perl.
298 The F<README> file for general stuff.
300 The F<Artistic> and F<Copying> files for copyright information.