This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Clarification on what Perl does to floating points in the modulus
[perl5.git] / pod / perl592delta.pod
CommitLineData
e0eb806d
RGS
1=head1 NAME
2
3perldelta - what is new for perl v5.9.2
4
5=head1 DESCRIPTION
6
7This document describes differences between the 5.9.1 and the 5.9.2
fa11829f 8development releases. See L<perl590delta> and L<perl591delta> for the
e0eb806d
RGS
9differences between 5.8.0 and 5.9.1.
10
11=head1 Incompatible Changes
12
a8cf0b1d
RGS
13=head2 Packing and UTF-8 strings
14
15The semantics of pack() and unpack() regarding UTF-8-encoded data has been
f1aa04aa
RGS
16changed. Processing is now by default character per character instead of
17byte per byte on the underlying encoding. Notably, code that used things
18like C<pack("a*", $string)> to see through the encoding of string will now
19simply get back the original $string. Packed strings can also get upgraded
20during processing when you store upgraded characters. You can get the old
21behaviour by using C<use bytes>.
a8cf0b1d
RGS
22
23To be consistent with pack(), the C<C0> in unpack() templates indicates
24that the data is to be processed in character mode, i.e. character by
118f78c9 25character; on the contrary, C<U0> in unpack() indicates UTF-8 mode, where
a8cf0b1d
RGS
26the packed string is processed in its UTF-8-encoded Unicode form on a byte
27by byte basis. This is reversed with regard to perl 5.8.X.
28
29Moreover, C<C0> and C<U0> can also be used in pack() templates to specify
30respectively character and byte modes.
31
f1aa04aa
RGS
32C<C0> and C<U0> in the middle of a pack or unpack format now switch to the
33specified encoding mode, honoring parens grouping. Previously, parens were
34ignored.
a8cf0b1d
RGS
35
36Also, there is a new pack() character format, C<W>, which is intended to
f1aa04aa
RGS
37replace the old C<C>. C<C> is kept for unsigned chars coded as bytes in
38the strings internal representation. C<W> represents unsigned (logical)
39character values, which can be greater than 255. It is therefore more
40robust when dealing with potentially UTF-8-encoded data (as C<C> will wrap
41values outside the range 0..255, and not respect the string encoding).
a8cf0b1d
RGS
42
43In practice, that means that pack formats are now encoding-neutral, except
44C<C>.
45
1cdd6bcc
RGS
46For consistency, C<A> in unpack() format now trims all Unicode whitespace
47from the end of the string. Before perl 5.9.2, it used to strip only the
48classical ASCII space characters.
49
1af60bcb 50=head2 Miscellaneous
3911fe8f 51
1af60bcb
RGS
52The internal dump output has been improved, so that non-printable characters
53such as newline and backspace are output in C<\x> notation, rather than
54octal.
55
56The B<-C> option can no longer be used on the C<#!> line. It wasn't
118f78c9 57working there anyway.
3911fe8f 58
e0eb806d
RGS
59=head1 Core Enhancements
60
1af60bcb 61=head2 Malloc wrapping
1cdd6bcc 62
1af60bcb
RGS
63Perl can now be built to detect attempts to assign pathologically large chunks
64of memory. Previously such assignments would suffer from integer wrap-around
65during size calculations causing a misallocation, which would crash perl, and
66could theoretically be used for "stack smashing" attacks. The wrapping
67defaults to enabled on platforms where we know it works (most AIX
e5c81e17 68configurations, BSDi, Darwin, DEC OSF/1, FreeBSD, HP-UX, GNU Linux, OpenBSD,
1af60bcb
RGS
69Solaris, VMS and most Win32 compilers) and defaults to disabled on other
70platforms.
71
72=head2 Unicode Character Database 4.0.1
73
74The copy of the Unicode Character Database included in Perl 5.9 has
75been updated to 4.0.1 from 4.0.0.
76
77=head2 suidperl less insecure
78
79Paul Szabo has analysed and patched C<suidperl> to remove existing known
80insecurities. Currently there are no known holes in C<suidperl>, but previous
81experience shows that we cannot be confident that these were the last. You may
82no longer invoke the set uid perl directly, so to preserve backwards
83compatibility with scripts that invoke #!/usr/bin/suidperl the only set uid
84binary is now C<sperl5.9.>I<n> (C<sperl5.9.2> for this release). C<suidperl>
85is installed as a hard link to C<perl>; both C<suidperl> and C<perl> will
86invoke C<sperl5.9.2> automatically the set uid binary, so this change should
87be completely transparent.
88
89For new projects the core perl team would strongly recommend that you use
90dedicated, single purpose security tools such as C<sudo> in preference to
91C<suidperl>.
92
118f78c9
RGS
93=head2 PERLIO_DEBUG
94
95The C<PERLIO_DEBUG> environment variable has no longer any effect for
96setuid scripts and for scripts run with B<-T>.
97
98Moreover, with a thread-enabled perl, using C<PERLIO_DEBUG> could lead to
99an internal buffer overflow. This has been fixed.
100
1af60bcb
RGS
101=head2 Formats
102
103In addition to bug fixes, C<format>'s features have been enhanced. See
104L<perlform>.
105
106=head2 Unicode Character Classes
107
108Perl's regular expression engine now contains support for matching on the
109intersection of two Unicode character classes. You can also now refer to
110user-defined character classes from within other user defined character
111classes.
1cdd6bcc 112
2bbb3949
MHM
113=head2 Byte-order modifiers for pack() and unpack()
114
115There 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
117characters and groups to force a certain byte-order for that type or group.
118See L<perlfunc/pack> and L<perlpacktut> for details.
119
118f78c9
RGS
120=head2 Byte count feature in pack()
121
122A new pack() template character, C<".">, returns the number of characters
123read so far.
124
1af60bcb
RGS
125=head2 New variables
126
127A new variable, ${^RE_DEBUG_FLAGS}, controls what debug flags are in
128effect for the regular expression engine when running under C<use re
129"debug">. See L<re> for details.
130
131A new variable ${^UTF8LOCALE} indicates where an UTF-8 locale was detected
132by perl at startup.
133
e0eb806d
RGS
134=head1 Modules and Pragmata
135
3911fe8f
RGS
136=head2 New modules
137
138=over 4
139
140=item *
141
118f78c9
RGS
142C<encoding::warnings>, by Autrijus Tang, is a module to emit warnings
143whenever an ASCII character string containing high-bit bytes is implicitly
144converted into UTF-8.
145
146=item *
147
3911fe8f
RGS
148C<Module::CoreList>, by Richard Clamp, is a small handy module that tells
149you what versions of core modules ship with any versions of Perl 5. It
150comes with a command-line frontend, C<corelist>.
151
152=back
153
154=head2 Updated And Improved Modules and Pragmata
155
1af60bcb
RGS
156Dual-lived modules have been updated to be kept up-to-date with respect to
157CPAN.
158
159The dual-lived modules which contain an C<_> in their version number are
160actually I<ahead> of the corresponding CPAN release.
161
162=over 4
163
1af60bcb
RGS
164=item B::Concise
165
166C<B::Concise> was significantly improved.
167
168=item Socket
169
170There is experimental support for Linux abstract Unix domain sockets.
171
172=item Sys::Syslog
173
174C<syslog()> can now use numeric constants for facility names and priorities,
175in addition to strings.
176
177=item threads
178
179Detached threads are now also supported on Windows.
180
181=back
182
e0eb806d
RGS
183=head1 Utility Changes
184
3911fe8f
RGS
185=over 4
186
187=item *
188
118f78c9 189The C<corelist> utility is now installed with perl (see L</"New modules">
3911fe8f
RGS
190above).
191
192=item *
193
194C<h2ph> and C<h2xs> have been made a bit more robust with regard to
195"modern" C code.
196
1af60bcb
RGS
197=item *
198
199Several bugs have been fixed in C<find2perl>, regarding C<-exec> and
200C<-eval>. Also the options C<-path>, C<-ipath> and C<-iname> have been
201added.
202
203=item *
204
205The Perl debugger can now save all debugger commands for sourcing later;
206notably, it can now emulate stepping backwards, by restarting and
207rerunning all bar the last command from a saved command history.
208
209It can also display the parent inheritance tree of a given class.
210
211Perl has a new -dt command-line flag, which enables threads support in the
212debugger.
213
3911fe8f
RGS
214=back
215
e0eb806d
RGS
216=head1 Performance Enhancements
217
1af60bcb
RGS
218=over 4
219
220=item *
221
222Unicode case mappings (C</i>, C<lc>, C<uc>, etc) are faster.
223
224=item *
225
226C<@a = sort @a> was optimized to do in-place sort. Likewise, C<reverse
227sort ...> is now optimized to sort in reverse, avoiding the generation of
228a temporary intermediate list.
229
230=item *
231
118f78c9 232Unnecessary assignments are optimised away in
1af60bcb
RGS
233
234 my $s = undef;
235 my @a = ();
236 my %h = ();
237
238=item *
239
118f78c9 240C<map> in scalar context is now optimized.
1cdd6bcc 241
1af60bcb
RGS
242=item *
243
244The regexp engine now implements the trie optimization : it's able to
245factorize common prefixes and suffixes in regular expressions. A new
118f78c9 246special variable, ${^RE_TRIE_MAXBUF}, has been added to fine-tune this
1af60bcb
RGS
247optimization.
248
249=back
1cdd6bcc 250
e0eb806d
RGS
251=head1 Installation and Configuration Improvements
252
118f78c9
RGS
253Run-time customization of @INC can be enabled by passing the
254C<-Dusesitecustomize> flag to configure. When enabled, this will make perl
255run F<$sitelibexp/sitecustomize.pl> before anything else. This script can
256then be set up to add additional entries to @INC.
257
1af60bcb
RGS
258There is alpha support for relocatable @INC entries.
259
260Perl should build on Interix and on GNU/kFreeBSD.
261
e0eb806d
RGS
262=head1 Selected Bug Fixes
263
118f78c9 264Most of those bugs were reported in the perl 5.8.x maintenance track.
1af60bcb 265Notably, quite a few utf8 bugs were fixed, and several memory leaks were
118f78c9 266suppressed. The perl58Xdelta manpages have more details on them.
1af60bcb
RGS
267
268Development-only bug fixes include :
269
270C<$Foo::_> was wrongly forced as C<$main::_>.
271
e0eb806d
RGS
272=head1 New or Changed Diagnostics
273
1af60bcb
RGS
274A new warning, C<!=~ should be !~>, is emitted to prevent this misspelling
275of the non-matching operator.
276
3911fe8f
RGS
277The warning I<Newline in left-justified string> has been removed.
278
279The error I<Too late for "-T" option> has been reformulated to be more
280descriptive.
281
1af60bcb
RGS
282There is a new compilation error, I<Illegal declaration of subroutine>,
283for an obscure case of syntax errors.
284
285The diagnostic output of Carp has been changed slightly, to add a space after
286the comma between arguments. This makes it much easier for tools such as
287web browsers to wrap it, but might confuse any automatic tools which perform
288detailed parsing of Carp output.
289
118f78c9
RGS
290C<perl -V> has several improvements, making it more useable from shell
291scripts to get the value of configuration variables. See L<perlrun> for
292details.
3911fe8f 293
e0eb806d
RGS
294=head1 Changed Internals
295
118f78c9
RGS
296The perl core has been refactored and reorganised in several places.
297In short, this release will not be binary compatible with any previous
298perl release.
299
e0eb806d
RGS
300=head1 Known Problems
301
118f78c9
RGS
302For threaded builds, F<ext/threads/shared/t/wait.t> has been reported to
303fail some tests on HP-UX 10.20.
304
c3ed3de7
RGS
305Net::Ping might fail some tests on HP-UX 11.00 with the latest OS
306upgrades.
307
921db004
RGS
308F<t/io/dup.t>, F<t/io/open.t> and F<lib/ExtUtils/t/Constant.t> fail some
309tests on some BSD flavours.
118f78c9
RGS
310
311=head1 Plans for the next release
312
313The current plan for perl 5.9.3 is to add CPANPLUS as a core module.
314More regular expression optimizations are also in the works.
315
316It is planned to release a development version of perl more frequently,
317i.e. each time something major changes.
e0eb806d
RGS
318
319=head1 Reporting Bugs
320
321If you find what you think is a bug, you might check the articles
322recently posted to the comp.lang.perl.misc newsgroup and the perl
323bug database at http://bugs.perl.org/ . There may also be
324information at http://www.perl.org/ , the Perl Home Page.
325
326If you believe you have an unreported bug, please run the B<perlbug>
327program included with your release. Be sure to trim your bug down
328to a tiny but sufficient test case. Your bug report, along with the
329output of C<perl -V>, will be sent off to perlbug@perl.org to be
330analysed by the Perl porting team.
331
332=head1 SEE ALSO
333
334The F<Changes> file for exhaustive details on what changed.
335
336The F<INSTALL> file for how to build Perl.
337
338The F<README> file for general stuff.
339
340The F<Artistic> and F<Copying> files for copyright information.
341
342=cut