This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Format perlhist consistently by maint/dev track
[perl5.git] / pod / perl592delta.pod
1 =head1 NAME
2
3 perl592delta - what is new for perl v5.9.2
4
5 =head1 DESCRIPTION
6
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.
10
11 =head1 Incompatible Changes
12
13 =head2 Packing and UTF-8 strings
14
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>.
22
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; on 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.
28
29 Moreover, C<C0> and C<U0> can also be used in pack() templates to specify
30 respectively character and byte modes.
31
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
34 ignored.
35
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).
42
43 In practice, that means that pack formats are now encoding-neutral, except
44 C<C>.
45
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.
49
50 =head2 Miscellaneous
51
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
54 octal.
55
56 The B<-C> option can no longer be used on the C<#!> line. It wasn't
57 working there anyway.
58
59 =head1 Core Enhancements
60
61 =head2 Malloc wrapping
62
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
70 platforms.
71
72 =head2 Unicode Character Database 4.0.1
73
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.
76
77 =head2 suidperl less insecure
78
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.
88
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
91 C<suidperl>.
92
93 =head2 PERLIO_DEBUG
94
95 The C<PERLIO_DEBUG> environment variable has no longer any effect for
96 setuid scripts and for scripts run with B<-T>.
97
98 Moreover, with a thread-enabled perl, using C<PERLIO_DEBUG> could lead to
99 an internal buffer overflow. This has been fixed.
100
101 =head2 Formats
102
103 In addition to bug fixes, C<format>'s features have been enhanced. See
104 L<perlform>.
105
106 =head2 Unicode Character Classes
107
108 Perl's regular expression engine now contains support for matching on the
109 intersection of two Unicode character classes. You can also now refer to
110 user-defined character classes from within other user defined character
111 classes.
112
113 =head2 Byte-order modifiers for pack() and unpack()
114
115 There are two new byte-order modifiers, C<E<gt>> (big-endian) and C<E<lt>>
116 (little-endian), that can be appended to most pack() and unpack() template
117 characters and groups to force a certain byte-order for that type or group.
118 See L<perlfunc/pack> and L<perlpacktut> for details.
119
120 =head2 Byte count feature in pack()
121
122 A new pack() template character, C<".">, returns the number of characters
123 read so far.
124
125 =head2 New variables
126
127 A new variable, ${^RE_DEBUG_FLAGS}, controls what debug flags are in
128 effect for the regular expression engine when running under C<use re
129 "debug">. See L<re> for details.
130
131 A new variable ${^UTF8LOCALE} indicates where a UTF-8 locale was detected
132 by perl at startup.
133
134 =head1 Modules and Pragmata
135
136 =head2 New modules
137
138 =over 4
139
140 =item *
141
142 C<encoding::warnings>, by Audrey Tang, is a module to emit warnings
143 whenever an ASCII character string containing high-bit bytes is implicitly
144 converted into UTF-8.
145
146 =item *
147
148 C<Module::CoreList>, by Richard Clamp, is a small handy module that tells
149 you what versions of core modules ship with any versions of Perl 5. It
150 comes with a command-line frontend, C<corelist>.
151
152 =back
153
154 =head2 Updated And Improved Modules and Pragmata
155
156 Dual-lived modules have been updated to be kept up-to-date with respect to
157 CPAN.
158
159 The dual-lived modules which contain an C<_> in their version number are
160 actually I<ahead> of the corresponding CPAN release.
161
162 =over 4
163
164 =item B::Concise
165
166 C<B::Concise> was significantly improved.
167
168 =item Socket
169
170 There is experimental support for Linux abstract Unix domain sockets.
171
172 =item Sys::Syslog
173
174 C<syslog()> can now use numeric constants for facility names and priorities,
175 in addition to strings.
176
177 =item threads
178
179 Detached threads are now also supported on Windows.
180
181 =back
182
183 =head1 Utility Changes
184
185 =over 4
186
187 =item *
188
189 The C<corelist> utility is now installed with perl (see L</"New modules">
190 above).
191
192 =item *
193
194 C<h2ph> and C<h2xs> have been made a bit more robust with regard to
195 "modern" C code.
196
197 =item *
198
199 Several bugs have been fixed in C<find2perl>, regarding C<-exec> and
200 C<-eval>. Also the options C<-path>, C<-ipath> and C<-iname> have been
201 added.
202
203 =item *
204
205 The Perl debugger can now save all debugger commands for sourcing later;
206 notably, it can now emulate stepping backwards, by restarting and
207 rerunning all bar the last command from a saved command history.
208
209 It can also display the parent inheritance tree of a given class.
210
211 Perl has a new -dt command-line flag, which enables threads support in the
212 debugger.
213
214 =back
215
216 =head1 Performance Enhancements
217
218 =over 4
219
220 =item *
221
222 Unicode case mappings (C</i>, C<lc>, C<uc>, etc) are faster.
223
224 =item *
225
226 C<@a = sort @a> was optimized to do in-place sort. Likewise, C<reverse
227 sort ...> is now optimized to sort in reverse, avoiding the generation of
228 a temporary intermediate list.
229
230 =item *
231
232 Unnecessary assignments are optimised away in
233
234   my $s = undef;
235   my @a = ();
236   my %h = ();
237
238 =item *
239
240 C<map> in scalar context is now optimized.
241
242 =item *
243
244 The regexp engine now implements the trie optimization : it's able to
245 factorize common prefixes and suffixes in regular expressions. A new
246 special variable, ${^RE_TRIE_MAXBUF}, has been added to fine-tune this
247 optimization.
248
249 =back
250
251 =head1 Installation and Configuration Improvements
252
253 Run-time customization of @INC can be enabled by passing the
254 C<-Dusesitecustomize> flag to configure. When enabled, this will make perl
255 run F<$sitelibexp/sitecustomize.pl> before anything else.  This script can
256 then be set up to add additional entries to @INC.
257
258 There is alpha support for relocatable @INC entries.
259
260 Perl should build on Interix and on GNU/kFreeBSD.
261
262 =head1 Selected Bug Fixes
263
264 Most of those bugs were reported in the perl 5.8.x maintenance track.
265 Notably, quite a few utf8 bugs were fixed, and several memory leaks were
266 suppressed. The perl58Xdelta manpages have more details on them.
267
268 Development-only bug fixes include :
269
270 C<$Foo::_> was wrongly forced as C<$main::_>.
271
272 =head1 New or Changed Diagnostics
273
274 A new warning, C<!=~ should be !~>, is emitted to prevent this misspelling
275 of the non-matching operator.
276
277 The warning I<Newline in left-justified string> has been removed.
278
279 The error I<Too late for "-T" option> has been reformulated to be more
280 descriptive.
281
282 There is a new compilation error, I<Illegal declaration of subroutine>,
283 for an obscure case of syntax errors.
284
285 The diagnostic output of Carp has been changed slightly, to add a space after
286 the comma between arguments. This makes it much easier for tools such as
287 web browsers to wrap it, but might confuse any automatic tools which perform
288 detailed parsing of Carp output.
289
290 C<perl -V> has several improvements, making it more useable from shell
291 scripts to get the value of configuration variables. See L<perlrun> for
292 details.
293
294 =head1 Changed Internals
295
296 The perl core has been refactored and reorganised in several places.
297 In short, this release will not be binary compatible with any previous
298 perl release.
299
300 =head1 Known Problems
301
302 For threaded builds, F<ext/threads/shared/t/wait.t> has been reported to
303 fail some tests on HP-UX 10.20.
304
305 Net::Ping might fail some tests on HP-UX 11.00 with the latest OS
306 upgrades.
307
308 F<t/io/dup.t>, F<t/io/open.t> and F<lib/ExtUtils/t/Constant.t> fail some
309 tests on some BSD flavours.
310
311 =head1 Plans for the next release
312
313 The current plan for perl 5.9.3 is to add CPANPLUS as a core module.
314 More regular expression optimizations are also in the works.
315
316 It is planned to release a development version of perl more frequently,
317 i.e. each time something major changes.
318
319 =head1 Reporting Bugs
320
321 If you find what you think is a bug, you might check the articles
322 recently posted to the comp.lang.perl.misc newsgroup and the perl
323 bug database at http://bugs.perl.org/ .  There may also be
324 information at http://www.perl.org/ , the Perl Home Page.
325
326 If you believe you have an unreported bug, please run the B<perlbug>
327 program included with your release.  Be sure to trim your bug down
328 to a tiny but sufficient test case.  Your bug report, along with the
329 output of C<perl -V>, will be sent off to perlbug@perl.org to be
330 analysed by the Perl porting team.
331
332 =head1 SEE ALSO
333
334 The F<Changes> file for exhaustive details on what changed.
335
336 The F<INSTALL> file for how to build Perl.
337
338 The F<README> file for general stuff.
339
340 The F<Artistic> and F<Copying> files for copyright information.
341
342 =cut