xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/pod/perl58delta.pod (revision 0:68f95e015346)
1*0Sstevel@tonic-gate=head1 NAME
2*0Sstevel@tonic-gate
3*0Sstevel@tonic-gateperl58delta - what is new for perl v5.8.0
4*0Sstevel@tonic-gate
5*0Sstevel@tonic-gate=head1 DESCRIPTION
6*0Sstevel@tonic-gate
7*0Sstevel@tonic-gateThis document describes differences between the 5.6.0 release and
8*0Sstevel@tonic-gatethe 5.8.0 release.
9*0Sstevel@tonic-gate
10*0Sstevel@tonic-gateMany of the bug fixes in 5.8.0 were already seen in the 5.6.1
11*0Sstevel@tonic-gatemaintenance release since the two releases were kept closely
12*0Sstevel@tonic-gatecoordinated (while 5.8.0 was still called 5.7.something).
13*0Sstevel@tonic-gate
14*0Sstevel@tonic-gateChanges that were integrated into the 5.6.1 release are marked C<[561]>.
15*0Sstevel@tonic-gateMany of these changes have been further developed since 5.6.1 was released,
16*0Sstevel@tonic-gatethose are marked C<[561+]>.
17*0Sstevel@tonic-gate
18*0Sstevel@tonic-gateYou can see the list of changes in the 5.6.1 release (both from the
19*0Sstevel@tonic-gate5.005_03 release and the 5.6.0 release) by reading L<perl561delta>.
20*0Sstevel@tonic-gate
21*0Sstevel@tonic-gate=head1 Highlights In 5.8.0
22*0Sstevel@tonic-gate
23*0Sstevel@tonic-gate=over 4
24*0Sstevel@tonic-gate
25*0Sstevel@tonic-gate=item *
26*0Sstevel@tonic-gate
27*0Sstevel@tonic-gateBetter Unicode support
28*0Sstevel@tonic-gate
29*0Sstevel@tonic-gate=item *
30*0Sstevel@tonic-gate
31*0Sstevel@tonic-gateNew IO Implementation
32*0Sstevel@tonic-gate
33*0Sstevel@tonic-gate=item *
34*0Sstevel@tonic-gate
35*0Sstevel@tonic-gateNew Thread Implementation
36*0Sstevel@tonic-gate
37*0Sstevel@tonic-gate=item *
38*0Sstevel@tonic-gate
39*0Sstevel@tonic-gateBetter Numeric Accuracy
40*0Sstevel@tonic-gate
41*0Sstevel@tonic-gate=item *
42*0Sstevel@tonic-gate
43*0Sstevel@tonic-gateSafe Signals
44*0Sstevel@tonic-gate
45*0Sstevel@tonic-gate=item *
46*0Sstevel@tonic-gate
47*0Sstevel@tonic-gateMany New Modules
48*0Sstevel@tonic-gate
49*0Sstevel@tonic-gate=item *
50*0Sstevel@tonic-gate
51*0Sstevel@tonic-gateMore Extensive Regression Testing
52*0Sstevel@tonic-gate
53*0Sstevel@tonic-gate=back
54*0Sstevel@tonic-gate
55*0Sstevel@tonic-gate=head1 Incompatible Changes
56*0Sstevel@tonic-gate
57*0Sstevel@tonic-gate=head2 Binary Incompatibility
58*0Sstevel@tonic-gate
59*0Sstevel@tonic-gateB<Perl 5.8 is not binary compatible with earlier releases of Perl.>
60*0Sstevel@tonic-gate
61*0Sstevel@tonic-gateB<You have to recompile your XS modules.>
62*0Sstevel@tonic-gate
63*0Sstevel@tonic-gate(Pure Perl modules should continue to work.)
64*0Sstevel@tonic-gate
65*0Sstevel@tonic-gateThe major reason for the discontinuity is the new IO architecture
66*0Sstevel@tonic-gatecalled PerlIO.  PerlIO is the default configuration because without
67*0Sstevel@tonic-gateit many new features of Perl 5.8 cannot be used.  In other words:
68*0Sstevel@tonic-gateyou just have to recompile your modules containing XS code, sorry
69*0Sstevel@tonic-gateabout that.
70*0Sstevel@tonic-gate
71*0Sstevel@tonic-gateIn future releases of Perl, non-PerlIO aware XS modules may become
72*0Sstevel@tonic-gatecompletely unsupported.  This shouldn't be too difficult for module
73*0Sstevel@tonic-gateauthors, however: PerlIO has been designed as a drop-in replacement
74*0Sstevel@tonic-gate(at the source code level) for the stdio interface.
75*0Sstevel@tonic-gate
76*0Sstevel@tonic-gateDepending on your platform, there are also other reasons why
77*0Sstevel@tonic-gatewe decided to break binary compatibility, please read on.
78*0Sstevel@tonic-gate
79*0Sstevel@tonic-gate=head2 64-bit platforms and malloc
80*0Sstevel@tonic-gate
81*0Sstevel@tonic-gateIf your pointers are 64 bits wide, the Perl malloc is no longer being
82*0Sstevel@tonic-gateused because it does not work well with 8-byte pointers.  Also,
83*0Sstevel@tonic-gateusually the system mallocs on such platforms are much better optimized
84*0Sstevel@tonic-gatefor such large memory models than the Perl malloc.  Some memory-hungry
85*0Sstevel@tonic-gatePerl applications like the PDL don't work well with Perl's malloc.
86*0Sstevel@tonic-gateFinally, other applications than Perl (such as mod_perl) tend to prefer
87*0Sstevel@tonic-gatethe system malloc.  Such platforms include Alpha and 64-bit HPPA,
88*0Sstevel@tonic-gateMIPS, PPC, and Sparc.
89*0Sstevel@tonic-gate
90*0Sstevel@tonic-gate=head2 AIX Dynaloading
91*0Sstevel@tonic-gate
92*0Sstevel@tonic-gateThe AIX dynaloading now uses in AIX releases 4.3 and newer the native
93*0Sstevel@tonic-gatedlopen interface of AIX instead of the old emulated interface.  This
94*0Sstevel@tonic-gatechange will probably break backward compatibility with compiled
95*0Sstevel@tonic-gatemodules.  The change was made to make Perl more compliant with other
96*0Sstevel@tonic-gateapplications like mod_perl which are using the AIX native interface.
97*0Sstevel@tonic-gate
98*0Sstevel@tonic-gate=head2 Attributes for C<my> variables now handled at run-time
99*0Sstevel@tonic-gate
100*0Sstevel@tonic-gateThe C<my EXPR : ATTRS> syntax now applies variable attributes at
101*0Sstevel@tonic-gaterun-time.  (Subroutine and C<our> variables still get attributes applied
102*0Sstevel@tonic-gateat compile-time.)  See L<attributes> for additional details.  In particular,
103*0Sstevel@tonic-gatehowever, this allows variable attributes to be useful for C<tie> interfaces,
104*0Sstevel@tonic-gatewhich was a deficiency of earlier releases.  Note that the new semantics
105*0Sstevel@tonic-gatedoesn't work with the Attribute::Handlers module (as of version 0.76).
106*0Sstevel@tonic-gate
107*0Sstevel@tonic-gate=head2 Socket Extension Dynamic in VMS
108*0Sstevel@tonic-gate
109*0Sstevel@tonic-gateThe Socket extension is now dynamically loaded instead of being
110*0Sstevel@tonic-gatestatically built in.  This may or may not be a problem with ancient
111*0Sstevel@tonic-gateTCP/IP stacks of VMS: we do not know since we weren't able to test
112*0Sstevel@tonic-gatePerl in such configurations.
113*0Sstevel@tonic-gate
114*0Sstevel@tonic-gate=head2 IEEE-format Floating Point Default on OpenVMS Alpha
115*0Sstevel@tonic-gate
116*0Sstevel@tonic-gatePerl now uses IEEE format (T_FLOAT) as the default internal floating
117*0Sstevel@tonic-gatepoint format on OpenVMS Alpha, potentially breaking binary compatibility
118*0Sstevel@tonic-gatewith external libraries or existing data.  G_FLOAT is still available as
119*0Sstevel@tonic-gatea configuration option.  The default on VAX (D_FLOAT) has not changed.
120*0Sstevel@tonic-gate
121*0Sstevel@tonic-gate=head2 New Unicode Semantics (no more C<use utf8>, almost)
122*0Sstevel@tonic-gate
123*0Sstevel@tonic-gatePreviously in Perl 5.6 to use Unicode one would say "use utf8" and
124*0Sstevel@tonic-gatethen the operations (like string concatenation) were Unicode-aware
125*0Sstevel@tonic-gatein that lexical scope.
126*0Sstevel@tonic-gate
127*0Sstevel@tonic-gateThis was found to be an inconvenient interface, and in Perl 5.8 the
128*0Sstevel@tonic-gateUnicode model has completely changed: now the "Unicodeness" is bound
129*0Sstevel@tonic-gateto the data itself, and for most of the time "use utf8" is not needed
130*0Sstevel@tonic-gateat all.  The only remaining use of "use utf8" is when the Perl script
131*0Sstevel@tonic-gateitself has been written in the UTF-8 encoding of Unicode.  (UTF-8 has
132*0Sstevel@tonic-gatenot been made the default since there are many Perl scripts out there
133*0Sstevel@tonic-gatethat are using various national eight-bit character sets, which would
134*0Sstevel@tonic-gatebe illegal in UTF-8.)
135*0Sstevel@tonic-gate
136*0Sstevel@tonic-gateSee L<perluniintro> for the explanation of the current model,
137*0Sstevel@tonic-gateand L<utf8> for the current use of the utf8 pragma.
138*0Sstevel@tonic-gate
139*0Sstevel@tonic-gate=head2 New Unicode Properties
140*0Sstevel@tonic-gate
141*0Sstevel@tonic-gateUnicode I<scripts> are now supported. Scripts are similar to (and superior
142*0Sstevel@tonic-gateto) Unicode I<blocks>. The difference between scripts and blocks is that
143*0Sstevel@tonic-gatescripts are the glyphs used by a language or a group of languages, while
144*0Sstevel@tonic-gatethe blocks are more artificial groupings of (mostly) 256 characters based
145*0Sstevel@tonic-gateon the Unicode numbering.
146*0Sstevel@tonic-gate
147*0Sstevel@tonic-gateIn general, scripts are more inclusive, but not universally so. For
148*0Sstevel@tonic-gateexample, while the script C<Latin> includes all the Latin characters and
149*0Sstevel@tonic-gatetheir various diacritic-adorned versions, it does not include the various
150*0Sstevel@tonic-gatepunctuation or digits (since they are not solely C<Latin>).
151*0Sstevel@tonic-gate
152*0Sstevel@tonic-gateA number of other properties are now supported, including C<\p{L&}>,
153*0Sstevel@tonic-gateC<\p{Any}> C<\p{Assigned}>, C<\p{Unassigned}>, C<\p{Blank}> [561] and
154*0Sstevel@tonic-gateC<\p{SpacePerl}> [561] (along with their C<\P{...}> versions, of course).
155*0Sstevel@tonic-gateSee L<perlunicode> for details, and more additions.
156*0Sstevel@tonic-gate
157*0Sstevel@tonic-gateThe C<In> or C<Is> prefix to names used with the C<\p{...}> and C<\P{...}>
158*0Sstevel@tonic-gateare now almost always optional. The only exception is that a C<In> prefix
159*0Sstevel@tonic-gateis required to signify a Unicode block when a block name conflicts with a
160*0Sstevel@tonic-gatescript name. For example, C<\p{Tibetan}> refers to the script, while
161*0Sstevel@tonic-gateC<\p{InTibetan}> refers to the block. When there is no name conflict, you
162*0Sstevel@tonic-gatecan omit the C<In> from the block name (e.g. C<\p{BraillePatterns}>), but
163*0Sstevel@tonic-gateto be safe, it's probably best to always use the C<In>).
164*0Sstevel@tonic-gate
165*0Sstevel@tonic-gate=head2 REF(...) Instead Of SCALAR(...)
166*0Sstevel@tonic-gate
167*0Sstevel@tonic-gateA reference to a reference now stringifies as "REF(0x81485ec)" instead
168*0Sstevel@tonic-gateof "SCALAR(0x81485ec)" in order to be more consistent with the return
169*0Sstevel@tonic-gatevalue of ref().
170*0Sstevel@tonic-gate
171*0Sstevel@tonic-gate=head2 pack/unpack D/F recycled
172*0Sstevel@tonic-gate
173*0Sstevel@tonic-gateThe undocumented pack/unpack template letters D/F have been recycled
174*0Sstevel@tonic-gatefor better use: now they stand for long double (if supported by the
175*0Sstevel@tonic-gateplatform) and NV (Perl internal floating point type).  (They used
176*0Sstevel@tonic-gateto be aliases for d/f, but you never knew that.)
177*0Sstevel@tonic-gate
178*0Sstevel@tonic-gate=head2 glob() now returns filenames in alphabetical order
179*0Sstevel@tonic-gate
180*0Sstevel@tonic-gateThe list of filenames from glob() (or <...>) is now by default sorted
181*0Sstevel@tonic-gatealphabetically to be csh-compliant (which is what happened before
182*0Sstevel@tonic-gatein most UNIX platforms).  (bsd_glob() does still sort platform
183*0Sstevel@tonic-gatenatively, ASCII or EBCDIC, unless GLOB_ALPHASORT is specified.) [561]
184*0Sstevel@tonic-gate
185*0Sstevel@tonic-gate=head2 Deprecations
186*0Sstevel@tonic-gate
187*0Sstevel@tonic-gate=over 4
188*0Sstevel@tonic-gate
189*0Sstevel@tonic-gate=item *
190*0Sstevel@tonic-gate
191*0Sstevel@tonic-gateThe semantics of bless(REF, REF) were unclear and until someone proves
192*0Sstevel@tonic-gateit to make some sense, it is forbidden.
193*0Sstevel@tonic-gate
194*0Sstevel@tonic-gate=item *
195*0Sstevel@tonic-gate
196*0Sstevel@tonic-gateThe obsolete chat2 library that should never have been allowed
197*0Sstevel@tonic-gateto escape the laboratory has been decommissioned.
198*0Sstevel@tonic-gate
199*0Sstevel@tonic-gate=item *
200*0Sstevel@tonic-gate
201*0Sstevel@tonic-gateUsing chdir("") or chdir(undef) instead of explicit chdir() is
202*0Sstevel@tonic-gatedoubtful.  A failure (think chdir(some_function()) can lead into
203*0Sstevel@tonic-gateunintended chdir() to the home directory, therefore this behaviour
204*0Sstevel@tonic-gateis deprecated.
205*0Sstevel@tonic-gate
206*0Sstevel@tonic-gate=item *
207*0Sstevel@tonic-gate
208*0Sstevel@tonic-gateThe builtin dump() function has probably outlived most of its
209*0Sstevel@tonic-gateusefulness.  The core-dumping functionality will remain in future
210*0Sstevel@tonic-gateavailable as an explicit call to C<CORE::dump()>, but in future
211*0Sstevel@tonic-gatereleases the behaviour of an unqualified C<dump()> call may change.
212*0Sstevel@tonic-gate
213*0Sstevel@tonic-gate=item *
214*0Sstevel@tonic-gate
215*0Sstevel@tonic-gateThe very dusty examples in the eg/ directory have been removed.
216*0Sstevel@tonic-gateSuggestions for new shiny examples welcome but the main issue is that
217*0Sstevel@tonic-gatethe examples need to be documented, tested and (most importantly)
218*0Sstevel@tonic-gatemaintained.
219*0Sstevel@tonic-gate
220*0Sstevel@tonic-gate=item *
221*0Sstevel@tonic-gate
222*0Sstevel@tonic-gateThe (bogus) escape sequences \8 and \9 now give an optional warning
223*0Sstevel@tonic-gate("Unrecognized escape passed through").  There is no need to \-escape
224*0Sstevel@tonic-gateany C<\w> character.
225*0Sstevel@tonic-gate
226*0Sstevel@tonic-gate=item *
227*0Sstevel@tonic-gate
228*0Sstevel@tonic-gateThe *glob{FILEHANDLE} is deprecated, use *glob{IO} instead.
229*0Sstevel@tonic-gate
230*0Sstevel@tonic-gate=item *
231*0Sstevel@tonic-gate
232*0Sstevel@tonic-gateThe C<package;> syntax (C<package> without an argument) has been
233*0Sstevel@tonic-gatedeprecated.  Its semantics were never that clear and its
234*0Sstevel@tonic-gateimplementation even less so.  If you have used that feature to
235*0Sstevel@tonic-gatedisallow all but fully qualified variables, C<use strict;> instead.
236*0Sstevel@tonic-gate
237*0Sstevel@tonic-gate=item *
238*0Sstevel@tonic-gate
239*0Sstevel@tonic-gateThe unimplemented POSIX regex features [[.cc.]] and [[=c=]] are still
240*0Sstevel@tonic-gaterecognised but now cause fatal errors.  The previous behaviour of
241*0Sstevel@tonic-gateignoring them by default and warning if requested was unacceptable
242*0Sstevel@tonic-gatesince it, in a way, falsely promised that the features could be used.
243*0Sstevel@tonic-gate
244*0Sstevel@tonic-gate=item *
245*0Sstevel@tonic-gate
246*0Sstevel@tonic-gateIn future releases, non-PerlIO aware XS modules may become completely
247*0Sstevel@tonic-gateunsupported.  Since PerlIO is a drop-in replacement for stdio at the
248*0Sstevel@tonic-gatesource code level, this shouldn't be that drastic a change.
249*0Sstevel@tonic-gate
250*0Sstevel@tonic-gate=item *
251*0Sstevel@tonic-gate
252*0Sstevel@tonic-gatePrevious versions of perl and some readings of some sections of Camel
253*0Sstevel@tonic-gateIII implied that the C<:raw> "discipline" was the inverse of C<:crlf>.
254*0Sstevel@tonic-gateTurning off "clrfness" is no longer enough to make a stream truly
255*0Sstevel@tonic-gatebinary. So the PerlIO C<:raw> layer (or "discipline", to use the Camel
256*0Sstevel@tonic-gatebook's older terminology) is now formally defined as being equivalent
257*0Sstevel@tonic-gateto binmode(FH) - which is in turn defined as doing whatever is
258*0Sstevel@tonic-gatenecessary to pass each byte as-is without any translation.  In
259*0Sstevel@tonic-gateparticular binmode(FH) - and hence C<:raw> - will now turn off both
260*0Sstevel@tonic-gateCRLF and UTF-8 translation and remove other layers (e.g. :encoding())
261*0Sstevel@tonic-gatewhich would modify byte stream.
262*0Sstevel@tonic-gate
263*0Sstevel@tonic-gate=item *
264*0Sstevel@tonic-gate
265*0Sstevel@tonic-gateThe current user-visible implementation of pseudo-hashes (the weird
266*0Sstevel@tonic-gateuse of the first array element) is deprecated starting from Perl 5.8.0
267*0Sstevel@tonic-gateand will be removed in Perl 5.10.0, and the feature will be
268*0Sstevel@tonic-gateimplemented differently.  Not only is the current interface rather
269*0Sstevel@tonic-gateugly, but the current implementation slows down normal array and hash
270*0Sstevel@tonic-gateuse quite noticeably. The C<fields> pragma interface will remain
271*0Sstevel@tonic-gateavailable.  The I<restricted hashes> interface is expected to
272*0Sstevel@tonic-gatebe the replacement interface (see L<Hash::Util>).  If your existing
273*0Sstevel@tonic-gateprograms depends on the underlying implementation, consider using
274*0Sstevel@tonic-gateL<Class::PseudoHash> from CPAN.
275*0Sstevel@tonic-gate
276*0Sstevel@tonic-gate=item *
277*0Sstevel@tonic-gate
278*0Sstevel@tonic-gateThe syntaxes C<< @a->[...] >> and  C<< %h->{...} >> have now been deprecated.
279*0Sstevel@tonic-gate
280*0Sstevel@tonic-gate=item *
281*0Sstevel@tonic-gate
282*0Sstevel@tonic-gateAfter years of trying, suidperl is considered to be too complex to
283*0Sstevel@tonic-gateever be considered truly secure.  The suidperl functionality is likely
284*0Sstevel@tonic-gateto be removed in a future release.
285*0Sstevel@tonic-gate
286*0Sstevel@tonic-gate=item *
287*0Sstevel@tonic-gate
288*0Sstevel@tonic-gateThe 5.005 threads model (module C<Thread>) is deprecated and expected
289*0Sstevel@tonic-gateto be removed in Perl 5.10.  Multithreaded code should be migrated to
290*0Sstevel@tonic-gatethe new ithreads model (see L<threads>, L<threads::shared> and
291*0Sstevel@tonic-gateL<perlthrtut>).
292*0Sstevel@tonic-gate
293*0Sstevel@tonic-gate=item *
294*0Sstevel@tonic-gate
295*0Sstevel@tonic-gateThe long deprecated uppercase aliases for the string comparison
296*0Sstevel@tonic-gateoperators (EQ, NE, LT, LE, GE, GT) have now been removed.
297*0Sstevel@tonic-gate
298*0Sstevel@tonic-gate=item *
299*0Sstevel@tonic-gate
300*0Sstevel@tonic-gateThe tr///C and tr///U features have been removed and will not return;
301*0Sstevel@tonic-gatethe interface was a mistake.  Sorry about that.  For similar
302*0Sstevel@tonic-gatefunctionality, see pack('U0', ...) and pack('C0', ...). [561]
303*0Sstevel@tonic-gate
304*0Sstevel@tonic-gate=item *
305*0Sstevel@tonic-gate
306*0Sstevel@tonic-gateEarlier Perls treated "sub foo (@bar)" as equivalent to "sub foo (@)".
307*0Sstevel@tonic-gateThe prototypes are now checked better at compile-time for invalid
308*0Sstevel@tonic-gatesyntax.  An optional warning is generated ("Illegal character in
309*0Sstevel@tonic-gateprototype...")  but this may be upgraded to a fatal error in a future
310*0Sstevel@tonic-gaterelease.
311*0Sstevel@tonic-gate
312*0Sstevel@tonic-gate=item *
313*0Sstevel@tonic-gate
314*0Sstevel@tonic-gateThe C<exec LIST> and C<system LIST> operations now produce warnings on
315*0Sstevel@tonic-gatetainted data and in some future release they will produce fatal errors.
316*0Sstevel@tonic-gate
317*0Sstevel@tonic-gate=item *
318*0Sstevel@tonic-gate
319*0Sstevel@tonic-gateThe existing behaviour when localising tied arrays and hashes is wrong,
320*0Sstevel@tonic-gateand will be changed in a future release, so do not rely on the existing
321*0Sstevel@tonic-gatebehaviour. See L<"Localising Tied Arrays and Hashes Is Broken">.
322*0Sstevel@tonic-gate
323*0Sstevel@tonic-gate=back
324*0Sstevel@tonic-gate
325*0Sstevel@tonic-gate=head1 Core Enhancements
326*0Sstevel@tonic-gate
327*0Sstevel@tonic-gate=head2 Unicode Overhaul
328*0Sstevel@tonic-gate
329*0Sstevel@tonic-gateUnicode in general should be now much more usable than in Perl 5.6.0
330*0Sstevel@tonic-gate(or even in 5.6.1).  Unicode can be used in hash keys, Unicode in
331*0Sstevel@tonic-gateregular expressions should work now, Unicode in tr/// should work now,
332*0Sstevel@tonic-gateUnicode in I/O should work now.  See L<perluniintro> for introduction
333*0Sstevel@tonic-gateand L<perlunicode> for details.
334*0Sstevel@tonic-gate
335*0Sstevel@tonic-gate=over 4
336*0Sstevel@tonic-gate
337*0Sstevel@tonic-gate=item *
338*0Sstevel@tonic-gate
339*0Sstevel@tonic-gateThe Unicode Character Database coming with Perl has been upgraded
340*0Sstevel@tonic-gateto Unicode 3.2.0.  For more information, see http://www.unicode.org/ .
341*0Sstevel@tonic-gate[561+] (5.6.1 has UCD 3.0.1.)
342*0Sstevel@tonic-gate
343*0Sstevel@tonic-gate=item *
344*0Sstevel@tonic-gate
345*0Sstevel@tonic-gateFor developers interested in enhancing Perl's Unicode capabilities:
346*0Sstevel@tonic-gatealmost all the UCD files are included with the Perl distribution in
347*0Sstevel@tonic-gatethe F<lib/unicore> subdirectory.  The most notable omission, for space
348*0Sstevel@tonic-gateconsiderations, is the Unihan database.
349*0Sstevel@tonic-gate
350*0Sstevel@tonic-gate=item *
351*0Sstevel@tonic-gate
352*0Sstevel@tonic-gateThe properties \p{Blank} and \p{SpacePerl} have been added. "Blank" is like
353*0Sstevel@tonic-gateC isblank(), that is, it contains only "horizontal whitespace" (the space
354*0Sstevel@tonic-gatecharacter is, the newline isn't), and the "SpacePerl" is the Unicode
355*0Sstevel@tonic-gateequivalent of C<\s> (\p{Space} isn't, since that includes the vertical
356*0Sstevel@tonic-gatetabulator character, whereas C<\s> doesn't.)
357*0Sstevel@tonic-gate
358*0Sstevel@tonic-gateSee "New Unicode Properties" earlier in this document for additional
359*0Sstevel@tonic-gateinformation on changes with Unicode properties.
360*0Sstevel@tonic-gate
361*0Sstevel@tonic-gate=back
362*0Sstevel@tonic-gate
363*0Sstevel@tonic-gate=head2 PerlIO is Now The Default
364*0Sstevel@tonic-gate
365*0Sstevel@tonic-gate=over 4
366*0Sstevel@tonic-gate
367*0Sstevel@tonic-gate=item *
368*0Sstevel@tonic-gate
369*0Sstevel@tonic-gateIO is now by default done via PerlIO rather than system's "stdio".
370*0Sstevel@tonic-gatePerlIO allows "layers" to be "pushed" onto a file handle to alter the
371*0Sstevel@tonic-gatehandle's behaviour.  Layers can be specified at open time via 3-arg
372*0Sstevel@tonic-gateform of open:
373*0Sstevel@tonic-gate
374*0Sstevel@tonic-gate   open($fh,'>:crlf :utf8', $path) || ...
375*0Sstevel@tonic-gate
376*0Sstevel@tonic-gateor on already opened handles via extended C<binmode>:
377*0Sstevel@tonic-gate
378*0Sstevel@tonic-gate   binmode($fh,':encoding(iso-8859-7)');
379*0Sstevel@tonic-gate
380*0Sstevel@tonic-gateThe built-in layers are: unix (low level read/write), stdio (as in
381*0Sstevel@tonic-gateprevious Perls), perlio (re-implementation of stdio buffering in a
382*0Sstevel@tonic-gateportable manner), crlf (does CRLF <=> "\n" translation as on Win32,
383*0Sstevel@tonic-gatebut available on any platform).  A mmap layer may be available if
384*0Sstevel@tonic-gateplatform supports it (mostly UNIXes).
385*0Sstevel@tonic-gate
386*0Sstevel@tonic-gateLayers to be applied by default may be specified via the 'open' pragma.
387*0Sstevel@tonic-gate
388*0Sstevel@tonic-gateSee L</"Installation and Configuration Improvements"> for the effects
389*0Sstevel@tonic-gateof PerlIO on your architecture name.
390*0Sstevel@tonic-gate
391*0Sstevel@tonic-gate=item *
392*0Sstevel@tonic-gate
393*0Sstevel@tonic-gateIf your platform supports fork(), you can use the list form of C<open>
394*0Sstevel@tonic-gatefor pipes.  For example:
395*0Sstevel@tonic-gate
396*0Sstevel@tonic-gate    open KID_PS, "-|", "ps", "aux" or die $!;
397*0Sstevel@tonic-gate
398*0Sstevel@tonic-gateforks the ps(1) command (without spawning a shell, as there are more
399*0Sstevel@tonic-gatethan three arguments to open()), and reads its standard output via the
400*0Sstevel@tonic-gateC<KID_PS> filehandle.  See L<perlipc>.
401*0Sstevel@tonic-gate
402*0Sstevel@tonic-gate=item *
403*0Sstevel@tonic-gate
404*0Sstevel@tonic-gateFile handles can be marked as accepting Perl's internal encoding of Unicode
405*0Sstevel@tonic-gate(UTF-8 or UTF-EBCDIC depending on platform) by a pseudo layer ":utf8" :
406*0Sstevel@tonic-gate
407*0Sstevel@tonic-gate   open($fh,">:utf8","Uni.txt");
408*0Sstevel@tonic-gate
409*0Sstevel@tonic-gateNote for EBCDIC users: the pseudo layer ":utf8" is erroneously named
410*0Sstevel@tonic-gatefor you since it's not UTF-8 what you will be getting but instead
411*0Sstevel@tonic-gateUTF-EBCDIC.  See L<perlunicode>, L<utf8>, and
412*0Sstevel@tonic-gatehttp://www.unicode.org/unicode/reports/tr16/ for more information.
413*0Sstevel@tonic-gateIn future releases this naming may change.  See L<perluniintro>
414*0Sstevel@tonic-gatefor more information about UTF-8.
415*0Sstevel@tonic-gate
416*0Sstevel@tonic-gate=item *
417*0Sstevel@tonic-gate
418*0Sstevel@tonic-gateIf your environment variables (LC_ALL, LC_CTYPE, LANG) look like you
419*0Sstevel@tonic-gatewant to use UTF-8 (any of the the variables match C</utf-?8/i>), your
420*0Sstevel@tonic-gateSTDIN, STDOUT, STDERR handles and the default open layer (see L<open>)
421*0Sstevel@tonic-gateare marked as UTF-8.  (This feature, like other new features that
422*0Sstevel@tonic-gatecombine Unicode and I/O, work only if you are using PerlIO, but that's
423*0Sstevel@tonic-gatethe default.)
424*0Sstevel@tonic-gate
425*0Sstevel@tonic-gateNote that after this Perl really does assume that everything is UTF-8:
426*0Sstevel@tonic-gatefor example if some input handle is not, Perl will probably very soon
427*0Sstevel@tonic-gatecomplain about the input data like this "Malformed UTF-8 ..." since
428*0Sstevel@tonic-gateany old eight-bit data is not legal UTF-8.
429*0Sstevel@tonic-gate
430*0Sstevel@tonic-gateNote for code authors: if you want to enable your users to use UTF-8
431*0Sstevel@tonic-gateas their default encoding  but in your code still have eight-bit I/O streams
432*0Sstevel@tonic-gate(such as images or zip files), you need to explicitly open() or binmode()
433*0Sstevel@tonic-gatewith C<:bytes> (see L<perlfunc/open> and L<perlfunc/binmode>), or you
434*0Sstevel@tonic-gatecan just use C<binmode(FH)> (nice for pre-5.8.0 backward compatibility).
435*0Sstevel@tonic-gate
436*0Sstevel@tonic-gate=item *
437*0Sstevel@tonic-gate
438*0Sstevel@tonic-gateFile handles can translate character encodings from/to Perl's internal
439*0Sstevel@tonic-gateUnicode form on read/write via the ":encoding()" layer.
440*0Sstevel@tonic-gate
441*0Sstevel@tonic-gate=item *
442*0Sstevel@tonic-gate
443*0Sstevel@tonic-gateFile handles can be opened to "in memory" files held in Perl scalars via:
444*0Sstevel@tonic-gate
445*0Sstevel@tonic-gate   open($fh,'>', \$variable) || ...
446*0Sstevel@tonic-gate
447*0Sstevel@tonic-gate=item *
448*0Sstevel@tonic-gate
449*0Sstevel@tonic-gateAnonymous temporary files are available without need to
450*0Sstevel@tonic-gate'use FileHandle' or other module via
451*0Sstevel@tonic-gate
452*0Sstevel@tonic-gate   open($fh,"+>", undef) || ...
453*0Sstevel@tonic-gate
454*0Sstevel@tonic-gateThat is a literal undef, not an undefined value.
455*0Sstevel@tonic-gate
456*0Sstevel@tonic-gate=back
457*0Sstevel@tonic-gate
458*0Sstevel@tonic-gate=head2 ithreads
459*0Sstevel@tonic-gate
460*0Sstevel@tonic-gateThe new interpreter threads ("ithreads" for short) implementation of
461*0Sstevel@tonic-gatemultithreading, by Arthur Bergman, replaces the old "5.005 threads"
462*0Sstevel@tonic-gateimplementation.  In the ithreads model any data sharing between
463*0Sstevel@tonic-gatethreads must be explicit, as opposed to the model where data sharing
464*0Sstevel@tonic-gatewas implicit.  See L<threads> and L<threads::shared>, and
465*0Sstevel@tonic-gateL<perlthrtut>.
466*0Sstevel@tonic-gate
467*0Sstevel@tonic-gateAs a part of the ithreads implementation Perl will also use
468*0Sstevel@tonic-gateany necessary and detectable reentrant libc interfaces.
469*0Sstevel@tonic-gate
470*0Sstevel@tonic-gate=head2 Restricted Hashes
471*0Sstevel@tonic-gate
472*0Sstevel@tonic-gateA restricted hash is restricted to a certain set of keys, no keys
473*0Sstevel@tonic-gateoutside the set can be added.  Also individual keys can be restricted
474*0Sstevel@tonic-gateso that the key cannot be deleted and the value cannot be changed.
475*0Sstevel@tonic-gateNo new syntax is involved: the Hash::Util module is the interface.
476*0Sstevel@tonic-gate
477*0Sstevel@tonic-gate=head2 Safe Signals
478*0Sstevel@tonic-gate
479*0Sstevel@tonic-gatePerl used to be fragile in that signals arriving at inopportune moments
480*0Sstevel@tonic-gatecould corrupt Perl's internal state.  Now Perl postpones handling of
481*0Sstevel@tonic-gatesignals until it's safe (between opcodes).
482*0Sstevel@tonic-gate
483*0Sstevel@tonic-gateThis change may have surprising side effects because signals no longer
484*0Sstevel@tonic-gateinterrupt Perl instantly.  Perl will now first finish whatever it was
485*0Sstevel@tonic-gatedoing, like finishing an internal operation (like sort()) or an
486*0Sstevel@tonic-gateexternal operation (like an I/O operation), and only then look at any
487*0Sstevel@tonic-gatearrived signals (and before starting the next operation).  No more corrupt
488*0Sstevel@tonic-gateinternal state since the current operation is always finished first,
489*0Sstevel@tonic-gatebut the signal may take more time to get heard.  Note that breaking
490*0Sstevel@tonic-gateout from potentially blocking operations should still work, though.
491*0Sstevel@tonic-gate
492*0Sstevel@tonic-gate=head2 Understanding of Numbers
493*0Sstevel@tonic-gate
494*0Sstevel@tonic-gateIn general a lot of fixing has happened in the area of Perl's
495*0Sstevel@tonic-gateunderstanding of numbers, both integer and floating point.  Since in
496*0Sstevel@tonic-gatemany systems the standard number parsing functions like C<strtoul()>
497*0Sstevel@tonic-gateand C<atof()> seem to have bugs, Perl tries to work around their
498*0Sstevel@tonic-gatedeficiencies.  This results hopefully in more accurate numbers.
499*0Sstevel@tonic-gate
500*0Sstevel@tonic-gatePerl now tries internally to use integer values in numeric conversions
501*0Sstevel@tonic-gateand basic arithmetics (+ - * /) if the arguments are integers, and
502*0Sstevel@tonic-gatetries also to keep the results stored internally as integers.
503*0Sstevel@tonic-gateThis change leads to often slightly faster and always less lossy
504*0Sstevel@tonic-gatearithmetics. (Previously Perl always preferred floating point numbers
505*0Sstevel@tonic-gatein its math.)
506*0Sstevel@tonic-gate
507*0Sstevel@tonic-gate=head2 Arrays now always interpolate into double-quoted strings [561]
508*0Sstevel@tonic-gate
509*0Sstevel@tonic-gateIn double-quoted strings, arrays now interpolate, no matter what.  The
510*0Sstevel@tonic-gatebehavior in earlier versions of perl 5 was that arrays would interpolate
511*0Sstevel@tonic-gateinto strings if the array had been mentioned before the string was
512*0Sstevel@tonic-gatecompiled, and otherwise Perl would raise a fatal compile-time error.
513*0Sstevel@tonic-gateIn versions 5.000 through 5.003, the error was
514*0Sstevel@tonic-gate
515*0Sstevel@tonic-gate        Literal @example now requires backslash
516*0Sstevel@tonic-gate
517*0Sstevel@tonic-gateIn versions 5.004_01 through 5.6.0, the error was
518*0Sstevel@tonic-gate
519*0Sstevel@tonic-gate        In string, @example now must be written as \@example
520*0Sstevel@tonic-gate
521*0Sstevel@tonic-gateThe idea here was to get people into the habit of writing
522*0Sstevel@tonic-gateC<"fred\@example.com"> when they wanted a literal C<@> sign, just as
523*0Sstevel@tonic-gatethey have always written C<"Give me back my \$5"> when they wanted a
524*0Sstevel@tonic-gateliteral C<$> sign.
525*0Sstevel@tonic-gate
526*0Sstevel@tonic-gateStarting with 5.6.1, when Perl now sees an C<@> sign in a
527*0Sstevel@tonic-gatedouble-quoted string, it I<always> attempts to interpolate an array,
528*0Sstevel@tonic-gateregardless of whether or not the array has been used or declared
529*0Sstevel@tonic-gatealready.  The fatal error has been downgraded to an optional warning:
530*0Sstevel@tonic-gate
531*0Sstevel@tonic-gate        Possible unintended interpolation of @example in string
532*0Sstevel@tonic-gate
533*0Sstevel@tonic-gateThis warns you that C<"fred@example.com"> is going to turn into
534*0Sstevel@tonic-gateC<fred.com> if you don't backslash the C<@>.
535*0Sstevel@tonic-gateSee http://www.plover.com/~mjd/perl/at-error.html for more details
536*0Sstevel@tonic-gateabout the history here.
537*0Sstevel@tonic-gate
538*0Sstevel@tonic-gate=head2 Miscellaneous Changes
539*0Sstevel@tonic-gate
540*0Sstevel@tonic-gate=over 4
541*0Sstevel@tonic-gate
542*0Sstevel@tonic-gate=item *
543*0Sstevel@tonic-gate
544*0Sstevel@tonic-gateAUTOLOAD is now lvaluable, meaning that you can add the :lvalue attribute
545*0Sstevel@tonic-gateto AUTOLOAD subroutines and you can assign to the AUTOLOAD return value.
546*0Sstevel@tonic-gate
547*0Sstevel@tonic-gate=item *
548*0Sstevel@tonic-gate
549*0Sstevel@tonic-gateThe $Config{byteorder} (and corresponding BYTEORDER in config.h) was
550*0Sstevel@tonic-gatepreviously wrong in platforms if sizeof(long) was 4, but sizeof(IV)
551*0Sstevel@tonic-gatewas 8.  The byteorder was only sizeof(long) bytes long (1234 or 4321),
552*0Sstevel@tonic-gatebut now it is correctly sizeof(IV) bytes long, (12345678 or 87654321).
553*0Sstevel@tonic-gate(This problem didn't affect Windows platforms.)
554*0Sstevel@tonic-gate
555*0Sstevel@tonic-gateAlso, $Config{byteorder} is now computed dynamically--this is more
556*0Sstevel@tonic-gaterobust with "fat binaries" where an executable image contains binaries
557*0Sstevel@tonic-gatefor more than one binary platform, and when cross-compiling.
558*0Sstevel@tonic-gate
559*0Sstevel@tonic-gate=item *
560*0Sstevel@tonic-gate
561*0Sstevel@tonic-gateC<perl -d:Module=arg,arg,arg> now works (previously one couldn't pass
562*0Sstevel@tonic-gatein multiple arguments.)
563*0Sstevel@tonic-gate
564*0Sstevel@tonic-gate=item *
565*0Sstevel@tonic-gate
566*0Sstevel@tonic-gateC<do> followed by a bareword now ensures that this bareword isn't
567*0Sstevel@tonic-gatea keyword (to avoid a bug where C<do q(foo.pl)> tried to call a
568*0Sstevel@tonic-gatesubroutine called C<q>).  This means that for example instead of
569*0Sstevel@tonic-gateC<do format()> you must write C<do &format()>.
570*0Sstevel@tonic-gate
571*0Sstevel@tonic-gate=item *
572*0Sstevel@tonic-gate
573*0Sstevel@tonic-gateThe builtin dump() now gives an optional warning
574*0Sstevel@tonic-gateC<dump() better written as CORE::dump()>,
575*0Sstevel@tonic-gatemeaning that by default C<dump(...)> is resolved as the builtin
576*0Sstevel@tonic-gatedump() which dumps core and aborts, not as (possibly) user-defined
577*0Sstevel@tonic-gateC<sub dump>.  To call the latter, qualify the call as C<&dump(...)>.
578*0Sstevel@tonic-gate(The whole dump() feature is to considered deprecated, and possibly
579*0Sstevel@tonic-gateremoved/changed in future releases.)
580*0Sstevel@tonic-gate
581*0Sstevel@tonic-gate=item *
582*0Sstevel@tonic-gate
583*0Sstevel@tonic-gatechomp() and chop() are now overridable.  Note, however, that their
584*0Sstevel@tonic-gateprototype (as given by C<prototype("CORE::chomp")> is undefined,
585*0Sstevel@tonic-gatebecause it cannot be expressed and therefore one cannot really write
586*0Sstevel@tonic-gatereplacements to override these builtins.
587*0Sstevel@tonic-gate
588*0Sstevel@tonic-gate=item *
589*0Sstevel@tonic-gate
590*0Sstevel@tonic-gateEND blocks are now run even if you exit/die in a BEGIN block.
591*0Sstevel@tonic-gateInternally, the execution of END blocks is now controlled by
592*0Sstevel@tonic-gatePL_exit_flags & PERL_EXIT_DESTRUCT_END. This enables the new
593*0Sstevel@tonic-gatebehaviour for Perl embedders. This will default in 5.10. See
594*0Sstevel@tonic-gateL<perlembed>.
595*0Sstevel@tonic-gate
596*0Sstevel@tonic-gate=item *
597*0Sstevel@tonic-gate
598*0Sstevel@tonic-gateFormats now support zero-padded decimal fields.
599*0Sstevel@tonic-gate
600*0Sstevel@tonic-gate=item *
601*0Sstevel@tonic-gate
602*0Sstevel@tonic-gateAlthough "you shouldn't do that", it was possible to write code that
603*0Sstevel@tonic-gatedepends on Perl's hashed key order (Data::Dumper does this).  The new
604*0Sstevel@tonic-gatealgorithm "One-at-a-Time" produces a different hashed key order.
605*0Sstevel@tonic-gateMore details are in L</"Performance Enhancements">.
606*0Sstevel@tonic-gate
607*0Sstevel@tonic-gate=item *
608*0Sstevel@tonic-gate
609*0Sstevel@tonic-gatelstat(FILEHANDLE) now gives a warning because the operation makes no sense.
610*0Sstevel@tonic-gateIn future releases this may become a fatal error.
611*0Sstevel@tonic-gate
612*0Sstevel@tonic-gate=item *
613*0Sstevel@tonic-gate
614*0Sstevel@tonic-gateSpurious syntax errors generated in certain situations, when glob()
615*0Sstevel@tonic-gatecaused File::Glob to be loaded for the first time, have been fixed. [561]
616*0Sstevel@tonic-gate
617*0Sstevel@tonic-gate=item *
618*0Sstevel@tonic-gate
619*0Sstevel@tonic-gateLvalue subroutines can now return C<undef> in list context.  However,
620*0Sstevel@tonic-gatethe lvalue subroutine feature still remains experimental.  [561+]
621*0Sstevel@tonic-gate
622*0Sstevel@tonic-gate=item *
623*0Sstevel@tonic-gate
624*0Sstevel@tonic-gateA lost warning "Can't declare ... dereference in my" has been
625*0Sstevel@tonic-gaterestored (Perl had it earlier but it became lost in later releases.)
626*0Sstevel@tonic-gate
627*0Sstevel@tonic-gate=item *
628*0Sstevel@tonic-gate
629*0Sstevel@tonic-gateA new special regular expression variable has been introduced:
630*0Sstevel@tonic-gateC<$^N>, which contains the most-recently closed group (submatch).
631*0Sstevel@tonic-gate
632*0Sstevel@tonic-gate=item *
633*0Sstevel@tonic-gate
634*0Sstevel@tonic-gateC<no Module;> does not produce an error even if Module does not have an
635*0Sstevel@tonic-gateunimport() method.  This parallels the behavior of C<use> vis-a-vis
636*0Sstevel@tonic-gateC<import>. [561]
637*0Sstevel@tonic-gate
638*0Sstevel@tonic-gate=item *
639*0Sstevel@tonic-gate
640*0Sstevel@tonic-gateThe numerical comparison operators return C<undef> if either operand
641*0Sstevel@tonic-gateis a NaN.  Previously the behaviour was unspecified.
642*0Sstevel@tonic-gate
643*0Sstevel@tonic-gate=item *
644*0Sstevel@tonic-gate
645*0Sstevel@tonic-gateC<our> can now have an experimental optional attribute C<unique> that
646*0Sstevel@tonic-gateaffects how global variables are shared among multiple interpreters,
647*0Sstevel@tonic-gatesee L<perlfunc/our>.
648*0Sstevel@tonic-gate
649*0Sstevel@tonic-gate=item *
650*0Sstevel@tonic-gate
651*0Sstevel@tonic-gateThe following builtin functions are now overridable: each(), keys(),
652*0Sstevel@tonic-gatepop(), push(), shift(), splice(), unshift(). [561]
653*0Sstevel@tonic-gate
654*0Sstevel@tonic-gate=item *
655*0Sstevel@tonic-gate
656*0Sstevel@tonic-gateC<pack() / unpack()> can now group template letters with C<()> and then
657*0Sstevel@tonic-gateapply repetition/count modifiers on the groups.
658*0Sstevel@tonic-gate
659*0Sstevel@tonic-gate=item *
660*0Sstevel@tonic-gate
661*0Sstevel@tonic-gateC<pack() / unpack()> can now process the Perl internal numeric types:
662*0Sstevel@tonic-gateIVs, UVs, NVs-- and also long doubles, if supported by the platform.
663*0Sstevel@tonic-gateThe template letters are C<j>, C<J>, C<F>, and C<D>.
664*0Sstevel@tonic-gate
665*0Sstevel@tonic-gate=item *
666*0Sstevel@tonic-gate
667*0Sstevel@tonic-gateC<pack('U0a*', ...)> can now be used to force a string to UTF-8.
668*0Sstevel@tonic-gate
669*0Sstevel@tonic-gate=item *
670*0Sstevel@tonic-gate
671*0Sstevel@tonic-gatemy __PACKAGE__ $obj now works. [561]
672*0Sstevel@tonic-gate
673*0Sstevel@tonic-gate=item *
674*0Sstevel@tonic-gate
675*0Sstevel@tonic-gatePOSIX::sleep() now returns the number of I<unslept> seconds
676*0Sstevel@tonic-gate(as the POSIX standard says), as opposed to CORE::sleep() which
677*0Sstevel@tonic-gatereturns the number of slept seconds.
678*0Sstevel@tonic-gate
679*0Sstevel@tonic-gate=item *
680*0Sstevel@tonic-gate
681*0Sstevel@tonic-gateprintf() and sprintf() now support parameter reordering using the
682*0Sstevel@tonic-gateC<%\d+\$> and C<*\d+\$> syntaxes.  For example
683*0Sstevel@tonic-gate
684*0Sstevel@tonic-gate    printf "%2\$s %1\$s\n", "foo", "bar";
685*0Sstevel@tonic-gate
686*0Sstevel@tonic-gatewill print "bar foo\n".  This feature helps in writing
687*0Sstevel@tonic-gateinternationalised software, and in general when the order
688*0Sstevel@tonic-gateof the parameters can vary.
689*0Sstevel@tonic-gate
690*0Sstevel@tonic-gate=item *
691*0Sstevel@tonic-gate
692*0Sstevel@tonic-gateThe (\&) prototype now works properly. [561]
693*0Sstevel@tonic-gate
694*0Sstevel@tonic-gate=item *
695*0Sstevel@tonic-gate
696*0Sstevel@tonic-gateprototype(\[$@%&]) is now available to implicitly create references
697*0Sstevel@tonic-gate(useful for example if you want to emulate the tie() interface).
698*0Sstevel@tonic-gate
699*0Sstevel@tonic-gate=item *
700*0Sstevel@tonic-gate
701*0Sstevel@tonic-gateA new command-line option, C<-t> is available.  It is the
702*0Sstevel@tonic-gatelittle brother of C<-T>: instead of dying on taint violations,
703*0Sstevel@tonic-gatelexical warnings are given.  B<This is only meant as a temporary
704*0Sstevel@tonic-gatedebugging aid while securing the code of old legacy applications.
705*0Sstevel@tonic-gateThis is not a substitute for -T.>
706*0Sstevel@tonic-gate
707*0Sstevel@tonic-gate=item *
708*0Sstevel@tonic-gate
709*0Sstevel@tonic-gateIn other taint news, the C<exec LIST> and C<system LIST> have now been
710*0Sstevel@tonic-gateconsidered too risky (think C<exec @ARGV>: it can start any program
711*0Sstevel@tonic-gatewith any arguments), and now the said forms cause a warning under
712*0Sstevel@tonic-gatelexical warnings.  You should carefully launder the arguments to
713*0Sstevel@tonic-gateguarantee their validity.  In future releases of Perl the forms will
714*0Sstevel@tonic-gatebecome fatal errors so consider starting laundering now.
715*0Sstevel@tonic-gate
716*0Sstevel@tonic-gate=item *
717*0Sstevel@tonic-gate
718*0Sstevel@tonic-gateTied hash interfaces are now required to have the EXISTS and DELETE
719*0Sstevel@tonic-gatemethods (either own or inherited).
720*0Sstevel@tonic-gate
721*0Sstevel@tonic-gate=item *
722*0Sstevel@tonic-gate
723*0Sstevel@tonic-gateIf tr/// is just counting characters, it doesn't attempt to
724*0Sstevel@tonic-gatemodify its target.
725*0Sstevel@tonic-gate
726*0Sstevel@tonic-gate=item *
727*0Sstevel@tonic-gate
728*0Sstevel@tonic-gateuntie() will now call an UNTIE() hook if it exists.  See L<perltie>
729*0Sstevel@tonic-gatefor details. [561]
730*0Sstevel@tonic-gate
731*0Sstevel@tonic-gate=item *
732*0Sstevel@tonic-gate
733*0Sstevel@tonic-gateL<utime> now supports C<utime undef, undef, @files> to change the
734*0Sstevel@tonic-gatefile timestamps to the current time.
735*0Sstevel@tonic-gate
736*0Sstevel@tonic-gate=item *
737*0Sstevel@tonic-gate
738*0Sstevel@tonic-gateThe rules for allowing underscores (underbars) in numeric constants
739*0Sstevel@tonic-gatehave been relaxed and simplified: now you can have an underscore
740*0Sstevel@tonic-gatesimply B<between digits>.
741*0Sstevel@tonic-gate
742*0Sstevel@tonic-gate=item *
743*0Sstevel@tonic-gate
744*0Sstevel@tonic-gateRather than relying on C's argv[0] (which may not contain a full pathname)
745*0Sstevel@tonic-gatewhere possible $^X is now set by asking the operating system.
746*0Sstevel@tonic-gate(eg by reading F</proc/self/exe> on Linux, F</proc/curproc/file> on FreeBSD)
747*0Sstevel@tonic-gate
748*0Sstevel@tonic-gate=item *
749*0Sstevel@tonic-gate
750*0Sstevel@tonic-gateA new variable, C<${^TAINT}>, indicates whether taint mode is enabled.
751*0Sstevel@tonic-gate
752*0Sstevel@tonic-gate=item *
753*0Sstevel@tonic-gate
754*0Sstevel@tonic-gateYou can now override the readline() builtin, and this overrides also
755*0Sstevel@tonic-gatethe <FILEHANDLE> angle bracket operator.
756*0Sstevel@tonic-gate
757*0Sstevel@tonic-gate=item *
758*0Sstevel@tonic-gate
759*0Sstevel@tonic-gateThe command-line options -s and -F are now recognized on the shebang
760*0Sstevel@tonic-gate(#!) line.
761*0Sstevel@tonic-gate
762*0Sstevel@tonic-gate=item *
763*0Sstevel@tonic-gate
764*0Sstevel@tonic-gateUse of the C</c> match modifier without an accompanying C</g> modifier
765*0Sstevel@tonic-gateelicits a new warning: C<Use of /c modifier is meaningless without /g>.
766*0Sstevel@tonic-gate
767*0Sstevel@tonic-gateUse of C</c> in substitutions, even with C</g>, elicits
768*0Sstevel@tonic-gateC<Use of /c modifier is meaningless in s///>.
769*0Sstevel@tonic-gate
770*0Sstevel@tonic-gateUse of C</g> with C<split> elicits C<Use of /g modifier is meaningless
771*0Sstevel@tonic-gatein split>.
772*0Sstevel@tonic-gate
773*0Sstevel@tonic-gate=item *
774*0Sstevel@tonic-gate
775*0Sstevel@tonic-gateSupport for the C<CLONE> special subroutine had been added.
776*0Sstevel@tonic-gateWith ithreads, when a new thread is created, all Perl data is cloned,
777*0Sstevel@tonic-gatehowever non-Perl data cannot be cloned automatically.  In C<CLONE> you
778*0Sstevel@tonic-gatecan do whatever you need to do, like for example handle the cloning of
779*0Sstevel@tonic-gatenon-Perl data, if necessary.  C<CLONE> will be executed once for every
780*0Sstevel@tonic-gatepackage that has it defined or inherited.  It will be called in the
781*0Sstevel@tonic-gatecontext of the new thread, so all modifications are made in the new area.
782*0Sstevel@tonic-gate
783*0Sstevel@tonic-gateSee L<perlmod>
784*0Sstevel@tonic-gate
785*0Sstevel@tonic-gate=back
786*0Sstevel@tonic-gate
787*0Sstevel@tonic-gate=head1 Modules and Pragmata
788*0Sstevel@tonic-gate
789*0Sstevel@tonic-gate=head2 New Modules and Pragmata
790*0Sstevel@tonic-gate
791*0Sstevel@tonic-gate=over 4
792*0Sstevel@tonic-gate
793*0Sstevel@tonic-gate=item *
794*0Sstevel@tonic-gate
795*0Sstevel@tonic-gateC<Attribute::Handlers>, originally by Damian Conway and now maintained
796*0Sstevel@tonic-gateby Arthur Bergman, allows a class to define attribute handlers.
797*0Sstevel@tonic-gate
798*0Sstevel@tonic-gate    package MyPack;
799*0Sstevel@tonic-gate    use Attribute::Handlers;
800*0Sstevel@tonic-gate    sub Wolf :ATTR(SCALAR) { print "howl!\n" }
801*0Sstevel@tonic-gate
802*0Sstevel@tonic-gate    # later, in some package using or inheriting from MyPack...
803*0Sstevel@tonic-gate
804*0Sstevel@tonic-gate    my MyPack $Fluffy : Wolf; # the attribute handler Wolf will be called
805*0Sstevel@tonic-gate
806*0Sstevel@tonic-gateBoth variables and routines can have attribute handlers.  Handlers can
807*0Sstevel@tonic-gatebe specific to type (SCALAR, ARRAY, HASH, or CODE), or specific to the
808*0Sstevel@tonic-gateexact compilation phase (BEGIN, CHECK, INIT, or END).
809*0Sstevel@tonic-gateSee L<Attribute::Handlers>.
810*0Sstevel@tonic-gate
811*0Sstevel@tonic-gate=item *
812*0Sstevel@tonic-gate
813*0Sstevel@tonic-gateC<B::Concise>, by Stephen McCamant, is a new compiler backend for
814*0Sstevel@tonic-gatewalking the Perl syntax tree, printing concise info about ops.
815*0Sstevel@tonic-gateThe output is highly customisable.  See L<B::Concise>. [561+]
816*0Sstevel@tonic-gate
817*0Sstevel@tonic-gate=item *
818*0Sstevel@tonic-gate
819*0Sstevel@tonic-gateThe new bignum, bigint, and bigrat pragmas, by Tels, implement
820*0Sstevel@tonic-gatetransparent bignum support (using the Math::BigInt, Math::BigFloat,
821*0Sstevel@tonic-gateand Math::BigRat backends).
822*0Sstevel@tonic-gate
823*0Sstevel@tonic-gate=item *
824*0Sstevel@tonic-gate
825*0Sstevel@tonic-gateC<Class::ISA>, by Sean Burke, is a module for reporting the search
826*0Sstevel@tonic-gatepath for a class's ISA tree.  See L<Class::ISA>.
827*0Sstevel@tonic-gate
828*0Sstevel@tonic-gate=item *
829*0Sstevel@tonic-gate
830*0Sstevel@tonic-gateC<Cwd> now has a split personality: if possible, an XS extension is
831*0Sstevel@tonic-gateused, (this will hopefully be faster, more secure, and more robust)
832*0Sstevel@tonic-gatebut if not possible, the familiar Perl implementation is used.
833*0Sstevel@tonic-gate
834*0Sstevel@tonic-gate=item *
835*0Sstevel@tonic-gate
836*0Sstevel@tonic-gateC<Devel::PPPort>, originally by Kenneth Albanowski and now
837*0Sstevel@tonic-gatemaintained by Paul Marquess, has been added.  It is primarily used
838*0Sstevel@tonic-gateby C<h2xs> to enhance portability of XS modules between different
839*0Sstevel@tonic-gateversions of Perl.  See L<Devel::PPPort>.
840*0Sstevel@tonic-gate
841*0Sstevel@tonic-gate=item *
842*0Sstevel@tonic-gate
843*0Sstevel@tonic-gateC<Digest>, frontend module for calculating digests (checksums), from
844*0Sstevel@tonic-gateGisle Aas, has been added.  See L<Digest>.
845*0Sstevel@tonic-gate
846*0Sstevel@tonic-gate=item *
847*0Sstevel@tonic-gate
848*0Sstevel@tonic-gateC<Digest::MD5> for calculating MD5 digests (checksums) as defined in
849*0Sstevel@tonic-gateRFC 1321, from Gisle Aas, has been added.  See L<Digest::MD5>.
850*0Sstevel@tonic-gate
851*0Sstevel@tonic-gate    use Digest::MD5 'md5_hex';
852*0Sstevel@tonic-gate
853*0Sstevel@tonic-gate    $digest = md5_hex("Thirsty Camel");
854*0Sstevel@tonic-gate
855*0Sstevel@tonic-gate    print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1
856*0Sstevel@tonic-gate
857*0Sstevel@tonic-gateNOTE: the C<MD5> backward compatibility module is deliberately not
858*0Sstevel@tonic-gateincluded since its further use is discouraged.
859*0Sstevel@tonic-gate
860*0Sstevel@tonic-gateSee also L<PerlIO::via::QuotedPrint>.
861*0Sstevel@tonic-gate
862*0Sstevel@tonic-gate=item *
863*0Sstevel@tonic-gate
864*0Sstevel@tonic-gateC<Encode>, originally by Nick Ing-Simmons and now maintained by Dan
865*0Sstevel@tonic-gateKogai, provides a mechanism to translate between different character
866*0Sstevel@tonic-gateencodings.  Support for Unicode, ISO-8859-1, and ASCII are compiled in
867*0Sstevel@tonic-gateto the module.  Several other encodings (like the rest of the
868*0Sstevel@tonic-gateISO-8859, CP*/Win*, Mac, KOI8-R, three variants EBCDIC, Chinese,
869*0Sstevel@tonic-gateJapanese, and Korean encodings) are included and can be loaded at
870*0Sstevel@tonic-gateruntime.  (For space considerations, the largest Chinese encodings
871*0Sstevel@tonic-gatehave been separated into their own CPAN module, Encode::HanExtra,
872*0Sstevel@tonic-gatewhich Encode will use if available).  See L<Encode>.
873*0Sstevel@tonic-gate
874*0Sstevel@tonic-gateAny encoding supported by Encode module is also available to the
875*0Sstevel@tonic-gate":encoding()" layer if PerlIO is used.
876*0Sstevel@tonic-gate
877*0Sstevel@tonic-gate=item *
878*0Sstevel@tonic-gate
879*0Sstevel@tonic-gateC<Hash::Util> is the interface to the new I<restricted hashes>
880*0Sstevel@tonic-gatefeature.  (Implemented by Jeffrey Friedl, Nick Ing-Simmons, and
881*0Sstevel@tonic-gateMichael Schwern.)  See L<Hash::Util>.
882*0Sstevel@tonic-gate
883*0Sstevel@tonic-gate=item *
884*0Sstevel@tonic-gate
885*0Sstevel@tonic-gateC<I18N::Langinfo> can be used to query locale information.
886*0Sstevel@tonic-gateSee L<I18N::Langinfo>.
887*0Sstevel@tonic-gate
888*0Sstevel@tonic-gate=item *
889*0Sstevel@tonic-gate
890*0Sstevel@tonic-gateC<I18N::LangTags>, by Sean Burke, has functions for dealing with
891*0Sstevel@tonic-gateRFC3066-style language tags.  See L<I18N::LangTags>.
892*0Sstevel@tonic-gate
893*0Sstevel@tonic-gate=item *
894*0Sstevel@tonic-gate
895*0Sstevel@tonic-gateC<ExtUtils::Constant>, by Nicholas Clark, is a new tool for extension
896*0Sstevel@tonic-gatewriters for generating XS code to import C header constants.
897*0Sstevel@tonic-gateSee L<ExtUtils::Constant>.
898*0Sstevel@tonic-gate
899*0Sstevel@tonic-gate=item *
900*0Sstevel@tonic-gate
901*0Sstevel@tonic-gateC<Filter::Simple>, by Damian Conway, is an easy-to-use frontend to
902*0Sstevel@tonic-gateFilter::Util::Call.  See L<Filter::Simple>.
903*0Sstevel@tonic-gate
904*0Sstevel@tonic-gate    # in MyFilter.pm:
905*0Sstevel@tonic-gate
906*0Sstevel@tonic-gate    package MyFilter;
907*0Sstevel@tonic-gate
908*0Sstevel@tonic-gate    use Filter::Simple sub {
909*0Sstevel@tonic-gate        while (my ($from, $to) = splice @_, 0, 2) {
910*0Sstevel@tonic-gate                s/$from/$to/g;
911*0Sstevel@tonic-gate        }
912*0Sstevel@tonic-gate    };
913*0Sstevel@tonic-gate
914*0Sstevel@tonic-gate    1;
915*0Sstevel@tonic-gate
916*0Sstevel@tonic-gate    # in user's code:
917*0Sstevel@tonic-gate
918*0Sstevel@tonic-gate    use MyFilter qr/red/ => 'green';
919*0Sstevel@tonic-gate
920*0Sstevel@tonic-gate    print "red\n";   # this code is filtered, will print "green\n"
921*0Sstevel@tonic-gate    print "bored\n"; # this code is filtered, will print "bogreen\n"
922*0Sstevel@tonic-gate
923*0Sstevel@tonic-gate    no MyFilter;
924*0Sstevel@tonic-gate
925*0Sstevel@tonic-gate    print "red\n";   # this code is not filtered, will print "red\n"
926*0Sstevel@tonic-gate
927*0Sstevel@tonic-gate=item *
928*0Sstevel@tonic-gate
929*0Sstevel@tonic-gateC<File::Temp>, by Tim Jenness, allows one to create temporary files
930*0Sstevel@tonic-gateand directories in an easy, portable, and secure way.  See L<File::Temp>.
931*0Sstevel@tonic-gate[561+]
932*0Sstevel@tonic-gate
933*0Sstevel@tonic-gate=item *
934*0Sstevel@tonic-gate
935*0Sstevel@tonic-gateC<Filter::Util::Call>, by Paul Marquess, provides you with the
936*0Sstevel@tonic-gateframework to write I<source filters> in Perl.  For most uses, the
937*0Sstevel@tonic-gatefrontend Filter::Simple is to be preferred.  See L<Filter::Util::Call>.
938*0Sstevel@tonic-gate
939*0Sstevel@tonic-gate=item *
940*0Sstevel@tonic-gate
941*0Sstevel@tonic-gateC<if>, by Ilya Zakharevich, is a new pragma for conditional inclusion
942*0Sstevel@tonic-gateof modules.
943*0Sstevel@tonic-gate
944*0Sstevel@tonic-gate=item *
945*0Sstevel@tonic-gate
946*0Sstevel@tonic-gateL<libnet>, by Graham Barr, is a collection of perl5 modules related
947*0Sstevel@tonic-gateto network programming.  See L<Net::FTP>, L<Net::NNTP>, L<Net::Ping>
948*0Sstevel@tonic-gate(not part of libnet, but related), L<Net::POP3>, L<Net::SMTP>,
949*0Sstevel@tonic-gateand L<Net::Time>.
950*0Sstevel@tonic-gate
951*0Sstevel@tonic-gatePerl installation leaves libnet unconfigured; use F<libnetcfg>
952*0Sstevel@tonic-gateto configure it.
953*0Sstevel@tonic-gate
954*0Sstevel@tonic-gate=item *
955*0Sstevel@tonic-gate
956*0Sstevel@tonic-gateC<List::Util>, by Graham Barr, is a selection of general-utility
957*0Sstevel@tonic-gatelist subroutines, such as sum(), min(), first(), and shuffle().
958*0Sstevel@tonic-gateSee L<List::Util>.
959*0Sstevel@tonic-gate
960*0Sstevel@tonic-gate=item *
961*0Sstevel@tonic-gate
962*0Sstevel@tonic-gateC<Locale::Constants>, C<Locale::Country>, C<Locale::Currency>
963*0Sstevel@tonic-gateC<Locale::Language>, and L<Locale::Script>, by Neil Bowers, have
964*0Sstevel@tonic-gatebeen added.  They provide the codes for various locale standards, such
965*0Sstevel@tonic-gateas "fr" for France, "usd" for US Dollar, and "ja" for Japanese.
966*0Sstevel@tonic-gate
967*0Sstevel@tonic-gate    use Locale::Country;
968*0Sstevel@tonic-gate
969*0Sstevel@tonic-gate    $country = code2country('jp');               # $country gets 'Japan'
970*0Sstevel@tonic-gate    $code    = country2code('Norway');           # $code gets 'no'
971*0Sstevel@tonic-gate
972*0Sstevel@tonic-gateSee L<Locale::Constants>, L<Locale::Country>, L<Locale::Currency>,
973*0Sstevel@tonic-gateand L<Locale::Language>.
974*0Sstevel@tonic-gate
975*0Sstevel@tonic-gate=item *
976*0Sstevel@tonic-gate
977*0Sstevel@tonic-gateC<Locale::Maketext>, by Sean Burke, is a localization framework.  See
978*0Sstevel@tonic-gateL<Locale::Maketext>, and L<Locale::Maketext::TPJ13>.  The latter is an
979*0Sstevel@tonic-gatearticle about software localization, originally published in The Perl
980*0Sstevel@tonic-gateJournal #13, and republished here with kind permission.
981*0Sstevel@tonic-gate
982*0Sstevel@tonic-gate=item *
983*0Sstevel@tonic-gate
984*0Sstevel@tonic-gateC<Math::BigRat> for big rational numbers, to accompany Math::BigInt and
985*0Sstevel@tonic-gateMath::BigFloat, from Tels.  See L<Math::BigRat>.
986*0Sstevel@tonic-gate
987*0Sstevel@tonic-gate=item *
988*0Sstevel@tonic-gate
989*0Sstevel@tonic-gateC<Memoize> can make your functions faster by trading space for time,
990*0Sstevel@tonic-gatefrom Mark-Jason Dominus.  See L<Memoize>.
991*0Sstevel@tonic-gate
992*0Sstevel@tonic-gate=item *
993*0Sstevel@tonic-gate
994*0Sstevel@tonic-gateC<MIME::Base64>, by Gisle Aas, allows you to encode data in base64,
995*0Sstevel@tonic-gateas defined in RFC 2045 - I<MIME (Multipurpose Internet Mail
996*0Sstevel@tonic-gateExtensions)>.
997*0Sstevel@tonic-gate
998*0Sstevel@tonic-gate    use MIME::Base64;
999*0Sstevel@tonic-gate
1000*0Sstevel@tonic-gate    $encoded = encode_base64('Aladdin:open sesame');
1001*0Sstevel@tonic-gate    $decoded = decode_base64($encoded);
1002*0Sstevel@tonic-gate
1003*0Sstevel@tonic-gate    print $encoded, "\n"; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
1004*0Sstevel@tonic-gate
1005*0Sstevel@tonic-gateSee L<MIME::Base64>.
1006*0Sstevel@tonic-gate
1007*0Sstevel@tonic-gate=item *
1008*0Sstevel@tonic-gate
1009*0Sstevel@tonic-gateC<MIME::QuotedPrint>, by Gisle Aas, allows you to encode data
1010*0Sstevel@tonic-gatein quoted-printable encoding, as defined in RFC 2045 - I<MIME
1011*0Sstevel@tonic-gate(Multipurpose Internet Mail Extensions)>.
1012*0Sstevel@tonic-gate
1013*0Sstevel@tonic-gate    use MIME::QuotedPrint;
1014*0Sstevel@tonic-gate
1015*0Sstevel@tonic-gate    $encoded = encode_qp("\xDE\xAD\xBE\xEF");
1016*0Sstevel@tonic-gate    $decoded = decode_qp($encoded);
1017*0Sstevel@tonic-gate
1018*0Sstevel@tonic-gate    print $encoded, "\n"; # "=DE=AD=BE=EF\n"
1019*0Sstevel@tonic-gate    print $decoded, "\n"; # "\xDE\xAD\xBE\xEF\n"
1020*0Sstevel@tonic-gate
1021*0Sstevel@tonic-gateSee also L<PerlIO::via::QuotedPrint>.
1022*0Sstevel@tonic-gate
1023*0Sstevel@tonic-gate=item *
1024*0Sstevel@tonic-gate
1025*0Sstevel@tonic-gateC<NEXT>, by Damian Conway, is a pseudo-class for method redispatch.
1026*0Sstevel@tonic-gateSee L<NEXT>.
1027*0Sstevel@tonic-gate
1028*0Sstevel@tonic-gate=item *
1029*0Sstevel@tonic-gate
1030*0Sstevel@tonic-gateC<open> is a new pragma for setting the default I/O layers
1031*0Sstevel@tonic-gatefor open().
1032*0Sstevel@tonic-gate
1033*0Sstevel@tonic-gate=item *
1034*0Sstevel@tonic-gate
1035*0Sstevel@tonic-gateC<PerlIO::scalar>, by Nick Ing-Simmons, provides the implementation
1036*0Sstevel@tonic-gateof IO to "in memory" Perl scalars as discussed above.  It also serves
1037*0Sstevel@tonic-gateas an example of a loadable PerlIO layer.  Other future possibilities
1038*0Sstevel@tonic-gateinclude PerlIO::Array and PerlIO::Code.  See L<PerlIO::scalar>.
1039*0Sstevel@tonic-gate
1040*0Sstevel@tonic-gate=item *
1041*0Sstevel@tonic-gate
1042*0Sstevel@tonic-gateC<PerlIO::via>, by Nick Ing-Simmons, acts as a PerlIO layer and wraps
1043*0Sstevel@tonic-gatePerlIO layer functionality provided by a class (typically implemented
1044*0Sstevel@tonic-gatein Perl code).
1045*0Sstevel@tonic-gate
1046*0Sstevel@tonic-gate=item *
1047*0Sstevel@tonic-gate
1048*0Sstevel@tonic-gateC<PerlIO::via::QuotedPrint>, by Elizabeth Mattijsen, is an example
1049*0Sstevel@tonic-gateof a C<PerlIO::via> class:
1050*0Sstevel@tonic-gate
1051*0Sstevel@tonic-gate    use PerlIO::via::QuotedPrint;
1052*0Sstevel@tonic-gate    open($fh,">:via(QuotedPrint)",$path);
1053*0Sstevel@tonic-gate
1054*0Sstevel@tonic-gateThis will automatically convert everything output to C<$fh> to
1055*0Sstevel@tonic-gateQuoted-Printable.  See L<PerlIO::via> and L<PerlIO::via::QuotedPrint>.
1056*0Sstevel@tonic-gate
1057*0Sstevel@tonic-gate=item *
1058*0Sstevel@tonic-gate
1059*0Sstevel@tonic-gateC<Pod::ParseLink>, by Russ Allbery, has been added,
1060*0Sstevel@tonic-gateto parse LZ<><> links in pods as described in the new
1061*0Sstevel@tonic-gateperlpodspec.
1062*0Sstevel@tonic-gate
1063*0Sstevel@tonic-gate=item *
1064*0Sstevel@tonic-gate
1065*0Sstevel@tonic-gateC<Pod::Text::Overstrike>, by Joe Smith, has been added.
1066*0Sstevel@tonic-gateIt converts POD data to formatted overstrike text.
1067*0Sstevel@tonic-gateSee L<Pod::Text::Overstrike>. [561+]
1068*0Sstevel@tonic-gate
1069*0Sstevel@tonic-gate=item *
1070*0Sstevel@tonic-gate
1071*0Sstevel@tonic-gateC<Scalar::Util> is a selection of general-utility scalar subroutines,
1072*0Sstevel@tonic-gatesuch as blessed(), reftype(), and tainted().  See L<Scalar::Util>.
1073*0Sstevel@tonic-gate
1074*0Sstevel@tonic-gate=item *
1075*0Sstevel@tonic-gate
1076*0Sstevel@tonic-gateC<sort> is a new pragma for controlling the behaviour of sort().
1077*0Sstevel@tonic-gate
1078*0Sstevel@tonic-gate=item *
1079*0Sstevel@tonic-gate
1080*0Sstevel@tonic-gateC<Storable> gives persistence to Perl data structures by allowing the
1081*0Sstevel@tonic-gatestorage and retrieval of Perl data to and from files in a fast and
1082*0Sstevel@tonic-gatecompact binary format.  Because in effect Storable does serialisation
1083*0Sstevel@tonic-gateof Perl data structures, with it you can also clone deep, hierarchical
1084*0Sstevel@tonic-gatedatastructures.  Storable was originally created by Raphael Manfredi,
1085*0Sstevel@tonic-gatebut it is now maintained by Abhijit Menon-Sen.  Storable has been
1086*0Sstevel@tonic-gateenhanced to understand the two new hash features, Unicode keys and
1087*0Sstevel@tonic-gaterestricted hashes.  See L<Storable>.
1088*0Sstevel@tonic-gate
1089*0Sstevel@tonic-gate=item *
1090*0Sstevel@tonic-gate
1091*0Sstevel@tonic-gateC<Switch>, by Damian Conway, has been added.  Just by saying
1092*0Sstevel@tonic-gate
1093*0Sstevel@tonic-gate    use Switch;
1094*0Sstevel@tonic-gate
1095*0Sstevel@tonic-gateyou have C<switch> and C<case> available in Perl.
1096*0Sstevel@tonic-gate
1097*0Sstevel@tonic-gate    use Switch;
1098*0Sstevel@tonic-gate
1099*0Sstevel@tonic-gate    switch ($val) {
1100*0Sstevel@tonic-gate
1101*0Sstevel@tonic-gate		case 1		{ print "number 1" }
1102*0Sstevel@tonic-gate		case "a"	{ print "string a" }
1103*0Sstevel@tonic-gate		case [1..10,42]	{ print "number in list" }
1104*0Sstevel@tonic-gate		case (@array)	{ print "number in list" }
1105*0Sstevel@tonic-gate		case /\w+/	{ print "pattern" }
1106*0Sstevel@tonic-gate		case qr/\w+/	{ print "pattern" }
1107*0Sstevel@tonic-gate		case (%hash)	{ print "entry in hash" }
1108*0Sstevel@tonic-gate		case (\%hash)	{ print "entry in hash" }
1109*0Sstevel@tonic-gate		case (\&sub)	{ print "arg to subroutine" }
1110*0Sstevel@tonic-gate		else		{ print "previous case not true" }
1111*0Sstevel@tonic-gate    }
1112*0Sstevel@tonic-gate
1113*0Sstevel@tonic-gateSee L<Switch>.
1114*0Sstevel@tonic-gate
1115*0Sstevel@tonic-gate=item *
1116*0Sstevel@tonic-gate
1117*0Sstevel@tonic-gateC<Test::More>, by Michael Schwern, is yet another framework for writing
1118*0Sstevel@tonic-gatetest scripts, more extensive than Test::Simple.  See L<Test::More>.
1119*0Sstevel@tonic-gate
1120*0Sstevel@tonic-gate=item *
1121*0Sstevel@tonic-gate
1122*0Sstevel@tonic-gateC<Test::Simple>, by Michael Schwern, has basic utilities for writing
1123*0Sstevel@tonic-gatetests.   See L<Test::Simple>.
1124*0Sstevel@tonic-gate
1125*0Sstevel@tonic-gate=item *
1126*0Sstevel@tonic-gate
1127*0Sstevel@tonic-gateC<Text::Balanced>, by Damian Conway, has been added, for extracting
1128*0Sstevel@tonic-gatedelimited text sequences from strings.
1129*0Sstevel@tonic-gate
1130*0Sstevel@tonic-gate    use Text::Balanced 'extract_delimited';
1131*0Sstevel@tonic-gate
1132*0Sstevel@tonic-gate    ($a, $b) = extract_delimited("'never say never', he never said", "'", '');
1133*0Sstevel@tonic-gate
1134*0Sstevel@tonic-gate$a will be "'never say never'", $b will be ', he never said'.
1135*0Sstevel@tonic-gate
1136*0Sstevel@tonic-gateIn addition to extract_delimited(), there are also extract_bracketed(),
1137*0Sstevel@tonic-gateextract_quotelike(), extract_codeblock(), extract_variable(),
1138*0Sstevel@tonic-gateextract_tagged(), extract_multiple(), gen_delimited_pat(), and
1139*0Sstevel@tonic-gategen_extract_tagged().  With these, you can implement rather advanced
1140*0Sstevel@tonic-gateparsing algorithms.  See L<Text::Balanced>.
1141*0Sstevel@tonic-gate
1142*0Sstevel@tonic-gate=item *
1143*0Sstevel@tonic-gate
1144*0Sstevel@tonic-gateC<threads>, by Arthur Bergman, is an interface to interpreter threads.
1145*0Sstevel@tonic-gateInterpreter threads (ithreads) is the new thread model introduced in
1146*0Sstevel@tonic-gatePerl 5.6 but only available as an internal interface for extension
1147*0Sstevel@tonic-gatewriters (and for Win32 Perl for C<fork()> emulation).  See L<threads>,
1148*0Sstevel@tonic-gateL<threads::shared>, and L<perlthrtut>.
1149*0Sstevel@tonic-gate
1150*0Sstevel@tonic-gate=item *
1151*0Sstevel@tonic-gate
1152*0Sstevel@tonic-gateC<threads::shared>, by Arthur Bergman, allows data sharing for
1153*0Sstevel@tonic-gateinterpreter threads.  See L<threads::shared>.
1154*0Sstevel@tonic-gate
1155*0Sstevel@tonic-gate=item *
1156*0Sstevel@tonic-gate
1157*0Sstevel@tonic-gateC<Tie::File>, by Mark-Jason Dominus, associates a Perl array with the
1158*0Sstevel@tonic-gatelines of a file.  See L<Tie::File>.
1159*0Sstevel@tonic-gate
1160*0Sstevel@tonic-gate=item *
1161*0Sstevel@tonic-gate
1162*0Sstevel@tonic-gateC<Tie::Memoize>, by Ilya Zakharevich, provides on-demand loaded hashes.
1163*0Sstevel@tonic-gateSee L<Tie::Memoize>.
1164*0Sstevel@tonic-gate
1165*0Sstevel@tonic-gate=item *
1166*0Sstevel@tonic-gate
1167*0Sstevel@tonic-gateC<Tie::RefHash::Nestable>, by Edward Avis, allows storing hash
1168*0Sstevel@tonic-gatereferences (unlike the standard Tie::RefHash)  The module is contained
1169*0Sstevel@tonic-gatewithin Tie::RefHash.  See L<Tie::RefHash>.
1170*0Sstevel@tonic-gate
1171*0Sstevel@tonic-gate=item *
1172*0Sstevel@tonic-gate
1173*0Sstevel@tonic-gateC<Time::HiRes>, by Douglas E. Wegscheid, provides high resolution
1174*0Sstevel@tonic-gatetiming (ualarm, usleep, and gettimeofday).  See L<Time::HiRes>.
1175*0Sstevel@tonic-gate
1176*0Sstevel@tonic-gate=item *
1177*0Sstevel@tonic-gate
1178*0Sstevel@tonic-gateC<Unicode::UCD> offers a querying interface to the Unicode Character
1179*0Sstevel@tonic-gateDatabase.  See L<Unicode::UCD>.
1180*0Sstevel@tonic-gate
1181*0Sstevel@tonic-gate=item *
1182*0Sstevel@tonic-gate
1183*0Sstevel@tonic-gateC<Unicode::Collate>, by SADAHIRO Tomoyuki, implements the UCA
1184*0Sstevel@tonic-gate(Unicode Collation Algorithm) for sorting Unicode strings.
1185*0Sstevel@tonic-gateSee L<Unicode::Collate>.
1186*0Sstevel@tonic-gate
1187*0Sstevel@tonic-gate=item *
1188*0Sstevel@tonic-gate
1189*0Sstevel@tonic-gateC<Unicode::Normalize>, by SADAHIRO Tomoyuki, implements the various
1190*0Sstevel@tonic-gateUnicode normalization forms.  See L<Unicode::Normalize>.
1191*0Sstevel@tonic-gate
1192*0Sstevel@tonic-gate=item *
1193*0Sstevel@tonic-gate
1194*0Sstevel@tonic-gateC<XS::APItest>, by Tim Jenness, is a test extension that exercises XS
1195*0Sstevel@tonic-gateAPIs.  Currently only C<printf()> is tested: how to output various
1196*0Sstevel@tonic-gatebasic data types from XS.
1197*0Sstevel@tonic-gate
1198*0Sstevel@tonic-gate=item *
1199*0Sstevel@tonic-gate
1200*0Sstevel@tonic-gateC<XS::Typemap>, by Tim Jenness, is a test extension that exercises
1201*0Sstevel@tonic-gateXS typemaps.  Nothing gets installed, but the code is worth studying
1202*0Sstevel@tonic-gatefor extension writers.
1203*0Sstevel@tonic-gate
1204*0Sstevel@tonic-gate=back
1205*0Sstevel@tonic-gate
1206*0Sstevel@tonic-gate=head2 Updated And Improved Modules and Pragmata
1207*0Sstevel@tonic-gate
1208*0Sstevel@tonic-gate=over 4
1209*0Sstevel@tonic-gate
1210*0Sstevel@tonic-gate=item *
1211*0Sstevel@tonic-gate
1212*0Sstevel@tonic-gateThe following independently supported modules have been updated to the
1213*0Sstevel@tonic-gatenewest versions from CPAN: CGI, CPAN, DB_File, File::Spec, File::Temp,
1214*0Sstevel@tonic-gateGetopt::Long, Math::BigFloat, Math::BigInt, the podlators bundle
1215*0Sstevel@tonic-gate(Pod::Man, Pod::Text), Pod::LaTeX [561+], Pod::Parser, Storable,
1216*0Sstevel@tonic-gateTerm::ANSIColor, Test, Text-Tabs+Wrap.
1217*0Sstevel@tonic-gate
1218*0Sstevel@tonic-gate=item *
1219*0Sstevel@tonic-gate
1220*0Sstevel@tonic-gateattributes::reftype() now works on tied arguments.
1221*0Sstevel@tonic-gate
1222*0Sstevel@tonic-gate=item *
1223*0Sstevel@tonic-gate
1224*0Sstevel@tonic-gateAutoLoader can now be disabled with C<no AutoLoader;>.
1225*0Sstevel@tonic-gate
1226*0Sstevel@tonic-gate=item *
1227*0Sstevel@tonic-gate
1228*0Sstevel@tonic-gateB::Deparse has been significantly enhanced by Robin Houston.  It can
1229*0Sstevel@tonic-gatenow deparse almost all of the standard test suite (so that the tests
1230*0Sstevel@tonic-gatestill succeed).  There is a make target "test.deparse" for trying this
1231*0Sstevel@tonic-gateout.
1232*0Sstevel@tonic-gate
1233*0Sstevel@tonic-gate=item *
1234*0Sstevel@tonic-gate
1235*0Sstevel@tonic-gateCarp now has better interface documentation, and the @CARP_NOT
1236*0Sstevel@tonic-gateinterface has been added to get optional control over where errors
1237*0Sstevel@tonic-gateare reported independently of @ISA, by Ben Tilly.
1238*0Sstevel@tonic-gate
1239*0Sstevel@tonic-gate=item *
1240*0Sstevel@tonic-gate
1241*0Sstevel@tonic-gateClass::Struct can now define the classes in compile time.
1242*0Sstevel@tonic-gate
1243*0Sstevel@tonic-gate=item *
1244*0Sstevel@tonic-gate
1245*0Sstevel@tonic-gateClass::Struct now assigns the array/hash element if the accessor
1246*0Sstevel@tonic-gateis called with an array/hash element as the B<sole> argument.
1247*0Sstevel@tonic-gate
1248*0Sstevel@tonic-gate=item *
1249*0Sstevel@tonic-gate
1250*0Sstevel@tonic-gateThe return value of Cwd::fastcwd() is now tainted.
1251*0Sstevel@tonic-gate
1252*0Sstevel@tonic-gate=item *
1253*0Sstevel@tonic-gate
1254*0Sstevel@tonic-gateData::Dumper now has an option to sort hashes.
1255*0Sstevel@tonic-gate
1256*0Sstevel@tonic-gate=item *
1257*0Sstevel@tonic-gate
1258*0Sstevel@tonic-gateData::Dumper now has an option to dump code references
1259*0Sstevel@tonic-gateusing B::Deparse.
1260*0Sstevel@tonic-gate
1261*0Sstevel@tonic-gate=item *
1262*0Sstevel@tonic-gate
1263*0Sstevel@tonic-gateDB_File now supports newer Berkeley DB versions, among
1264*0Sstevel@tonic-gateother improvements.
1265*0Sstevel@tonic-gate
1266*0Sstevel@tonic-gate=item *
1267*0Sstevel@tonic-gate
1268*0Sstevel@tonic-gateDevel::Peek now has an interface for the Perl memory statistics
1269*0Sstevel@tonic-gate(this works only if you are using perl's malloc, and if you have
1270*0Sstevel@tonic-gatecompiled with debugging).
1271*0Sstevel@tonic-gate
1272*0Sstevel@tonic-gate=item *
1273*0Sstevel@tonic-gate
1274*0Sstevel@tonic-gateThe English module can now be used without the infamous performance
1275*0Sstevel@tonic-gatehit by saying
1276*0Sstevel@tonic-gate
1277*0Sstevel@tonic-gate	use English '-no_match_vars';
1278*0Sstevel@tonic-gate
1279*0Sstevel@tonic-gate(Assuming, of course, that you don't need the troublesome variables
1280*0Sstevel@tonic-gateC<$`>, C<$&>, or C<$'>.)  Also, introduced C<@LAST_MATCH_START> and
1281*0Sstevel@tonic-gateC<@LAST_MATCH_END> English aliases for C<@-> and C<@+>.
1282*0Sstevel@tonic-gate
1283*0Sstevel@tonic-gate=item *
1284*0Sstevel@tonic-gate
1285*0Sstevel@tonic-gateExtUtils::MakeMaker has been significantly cleaned up and fixed.
1286*0Sstevel@tonic-gateThe enhanced version has also been backported to earlier releases
1287*0Sstevel@tonic-gateof Perl and submitted to CPAN so that the earlier releases can
1288*0Sstevel@tonic-gateenjoy the fixes.
1289*0Sstevel@tonic-gate
1290*0Sstevel@tonic-gate=item *
1291*0Sstevel@tonic-gate
1292*0Sstevel@tonic-gateThe arguments of WriteMakefile() in Makefile.PL are now checked
1293*0Sstevel@tonic-gatefor sanity much more carefully than before.  This may cause new
1294*0Sstevel@tonic-gatewarnings when modules are being installed.  See L<ExtUtils::MakeMaker>
1295*0Sstevel@tonic-gatefor more details.
1296*0Sstevel@tonic-gate
1297*0Sstevel@tonic-gate=item *
1298*0Sstevel@tonic-gate
1299*0Sstevel@tonic-gateExtUtils::MakeMaker now uses File::Spec internally, which hopefully
1300*0Sstevel@tonic-gateleads to better portability.
1301*0Sstevel@tonic-gate
1302*0Sstevel@tonic-gate=item *
1303*0Sstevel@tonic-gate
1304*0Sstevel@tonic-gateFcntl, Socket, and Sys::Syslog have been rewritten by Nicholas Clark
1305*0Sstevel@tonic-gateto use the new-style constant dispatch section (see L<ExtUtils::Constant>).
1306*0Sstevel@tonic-gateThis means that they will be more robust and hopefully faster.
1307*0Sstevel@tonic-gate
1308*0Sstevel@tonic-gate=item *
1309*0Sstevel@tonic-gate
1310*0Sstevel@tonic-gateFile::Find now chdir()s correctly when chasing symbolic links. [561]
1311*0Sstevel@tonic-gate
1312*0Sstevel@tonic-gate=item *
1313*0Sstevel@tonic-gate
1314*0Sstevel@tonic-gateFile::Find now has pre- and post-processing callbacks.  It also
1315*0Sstevel@tonic-gatecorrectly changes directories when chasing symbolic links.  Callbacks
1316*0Sstevel@tonic-gate(naughtily) exiting with "next;" instead of "return;" now work.
1317*0Sstevel@tonic-gate
1318*0Sstevel@tonic-gate=item *
1319*0Sstevel@tonic-gate
1320*0Sstevel@tonic-gateFile::Find is now (again) reentrant.  It also has been made
1321*0Sstevel@tonic-gatemore portable.
1322*0Sstevel@tonic-gate
1323*0Sstevel@tonic-gate=item *
1324*0Sstevel@tonic-gate
1325*0Sstevel@tonic-gateThe warnings issued by File::Find now belong to their own category.
1326*0Sstevel@tonic-gateYou can enable/disable them with C<use/no warnings 'File::Find';>.
1327*0Sstevel@tonic-gate
1328*0Sstevel@tonic-gate=item *
1329*0Sstevel@tonic-gate
1330*0Sstevel@tonic-gateFile::Glob::glob() has been renamed to File::Glob::bsd_glob()
1331*0Sstevel@tonic-gatebecause the name clashes with the builtin glob().  The older
1332*0Sstevel@tonic-gatename is still available for compatibility, but is deprecated. [561]
1333*0Sstevel@tonic-gate
1334*0Sstevel@tonic-gate=item *
1335*0Sstevel@tonic-gate
1336*0Sstevel@tonic-gateFile::Glob now supports C<GLOB_LIMIT> constant to limit the size of
1337*0Sstevel@tonic-gatethe returned list of filenames.
1338*0Sstevel@tonic-gate
1339*0Sstevel@tonic-gate=item *
1340*0Sstevel@tonic-gate
1341*0Sstevel@tonic-gateIPC::Open3 now allows the use of numeric file descriptors.
1342*0Sstevel@tonic-gate
1343*0Sstevel@tonic-gate=item *
1344*0Sstevel@tonic-gate
1345*0Sstevel@tonic-gateIO::Socket now has an atmark() method, which returns true if the socket
1346*0Sstevel@tonic-gateis positioned at the out-of-band mark.  The method is also exportable
1347*0Sstevel@tonic-gateas a sockatmark() function.
1348*0Sstevel@tonic-gate
1349*0Sstevel@tonic-gate=item *
1350*0Sstevel@tonic-gate
1351*0Sstevel@tonic-gateIO::Socket::INET failed to open the specified port if the service name
1352*0Sstevel@tonic-gatewas not known.  It now correctly uses the supplied port number as is. [561]
1353*0Sstevel@tonic-gate
1354*0Sstevel@tonic-gate=item *
1355*0Sstevel@tonic-gate
1356*0Sstevel@tonic-gateIO::Socket::INET has support for the ReusePort option (if your
1357*0Sstevel@tonic-gateplatform supports it).  The Reuse option now has an alias, ReuseAddr.
1358*0Sstevel@tonic-gateFor clarity, you may want to prefer ReuseAddr.
1359*0Sstevel@tonic-gate
1360*0Sstevel@tonic-gate=item *
1361*0Sstevel@tonic-gate
1362*0Sstevel@tonic-gateIO::Socket::INET now supports a value of zero for C<LocalPort>
1363*0Sstevel@tonic-gate(usually meaning that the operating system will make one up.)
1364*0Sstevel@tonic-gate
1365*0Sstevel@tonic-gate=item *
1366*0Sstevel@tonic-gate
1367*0Sstevel@tonic-gate'use lib' now works identically to @INC.  Removing directories
1368*0Sstevel@tonic-gatewith 'no lib' now works.
1369*0Sstevel@tonic-gate
1370*0Sstevel@tonic-gate=item *
1371*0Sstevel@tonic-gate
1372*0Sstevel@tonic-gateMath::BigFloat and Math::BigInt have undergone a full rewrite by Tels.
1373*0Sstevel@tonic-gateThey are now magnitudes faster, and they support various bignum
1374*0Sstevel@tonic-gatelibraries such as GMP and PARI as their backends.
1375*0Sstevel@tonic-gate
1376*0Sstevel@tonic-gate=item *
1377*0Sstevel@tonic-gate
1378*0Sstevel@tonic-gateMath::Complex handles inf, NaN etc., better.
1379*0Sstevel@tonic-gate
1380*0Sstevel@tonic-gate=item *
1381*0Sstevel@tonic-gate
1382*0Sstevel@tonic-gateNet::Ping has been considerably enhanced by Rob Brown: multihoming is
1383*0Sstevel@tonic-gatenow supported, Win32 functionality is better, there is now time
1384*0Sstevel@tonic-gatemeasuring functionality (optionally high-resolution using
1385*0Sstevel@tonic-gateTime::HiRes), and there is now "external" protocol which uses
1386*0Sstevel@tonic-gateNet::Ping::External module which runs your external ping utility and
1387*0Sstevel@tonic-gateparses the output.  A version of Net::Ping::External is available in
1388*0Sstevel@tonic-gateCPAN.
1389*0Sstevel@tonic-gate
1390*0Sstevel@tonic-gateNote that some of the Net::Ping tests are disabled when running
1391*0Sstevel@tonic-gateunder the Perl distribution since one cannot assume one or more
1392*0Sstevel@tonic-gateof the following: enabled echo port at localhost, full Internet
1393*0Sstevel@tonic-gateconnectivity, or sympathetic firewalls.  You can set the environment
1394*0Sstevel@tonic-gatevariable PERL_TEST_Net_Ping to "1" (one) before running the Perl test
1395*0Sstevel@tonic-gatesuite to enable all the Net::Ping tests.
1396*0Sstevel@tonic-gate
1397*0Sstevel@tonic-gate=item *
1398*0Sstevel@tonic-gate
1399*0Sstevel@tonic-gatePOSIX::sigaction() is now much more flexible and robust.
1400*0Sstevel@tonic-gateYou can now install coderef handlers, 'DEFAULT', and 'IGNORE'
1401*0Sstevel@tonic-gatehandlers, installing new handlers was not atomic.
1402*0Sstevel@tonic-gate
1403*0Sstevel@tonic-gate=item *
1404*0Sstevel@tonic-gate
1405*0Sstevel@tonic-gateIn Safe, C<%INC> is now localised in a Safe compartment so that
1406*0Sstevel@tonic-gateuse/require work.
1407*0Sstevel@tonic-gate
1408*0Sstevel@tonic-gate=item *
1409*0Sstevel@tonic-gate
1410*0Sstevel@tonic-gateIn SDBM_File on dosish platforms, some keys went missing because of
1411*0Sstevel@tonic-gatelack of support for files with "holes".  A workaround for the problem
1412*0Sstevel@tonic-gatehas been added.
1413*0Sstevel@tonic-gate
1414*0Sstevel@tonic-gate=item *
1415*0Sstevel@tonic-gate
1416*0Sstevel@tonic-gateIn Search::Dict one can now have a pre-processing hook for the
1417*0Sstevel@tonic-gatelines being searched.
1418*0Sstevel@tonic-gate
1419*0Sstevel@tonic-gate=item *
1420*0Sstevel@tonic-gate
1421*0Sstevel@tonic-gateThe Shell module now has an OO interface.
1422*0Sstevel@tonic-gate
1423*0Sstevel@tonic-gate=item *
1424*0Sstevel@tonic-gate
1425*0Sstevel@tonic-gateIn Sys::Syslog there is now a failover mechanism that will go
1426*0Sstevel@tonic-gatethrough alternative connection mechanisms until the message
1427*0Sstevel@tonic-gateis successfully logged.
1428*0Sstevel@tonic-gate
1429*0Sstevel@tonic-gate=item *
1430*0Sstevel@tonic-gate
1431*0Sstevel@tonic-gateThe Test module has been significantly enhanced.
1432*0Sstevel@tonic-gate
1433*0Sstevel@tonic-gate=item *
1434*0Sstevel@tonic-gate
1435*0Sstevel@tonic-gateTime::Local::timelocal() does not handle fractional seconds anymore.
1436*0Sstevel@tonic-gateThe rationale is that neither does localtime(), and timelocal() and
1437*0Sstevel@tonic-gatelocaltime() are supposed to be inverses of each other.
1438*0Sstevel@tonic-gate
1439*0Sstevel@tonic-gate=item *
1440*0Sstevel@tonic-gate
1441*0Sstevel@tonic-gateThe vars pragma now supports declaring fully qualified variables.
1442*0Sstevel@tonic-gate(Something that C<our()> does not and will not support.)
1443*0Sstevel@tonic-gate
1444*0Sstevel@tonic-gate=item *
1445*0Sstevel@tonic-gate
1446*0Sstevel@tonic-gateThe C<utf8::> name space (as in the pragma) provides various
1447*0Sstevel@tonic-gatePerl-callable functions to provide low level access to Perl's
1448*0Sstevel@tonic-gateinternal Unicode representation.  At the moment only length()
1449*0Sstevel@tonic-gatehas been implemented.
1450*0Sstevel@tonic-gate
1451*0Sstevel@tonic-gate=back
1452*0Sstevel@tonic-gate
1453*0Sstevel@tonic-gate=head1 Utility Changes
1454*0Sstevel@tonic-gate
1455*0Sstevel@tonic-gate=over 4
1456*0Sstevel@tonic-gate
1457*0Sstevel@tonic-gate=item *
1458*0Sstevel@tonic-gate
1459*0Sstevel@tonic-gateEmacs perl mode (emacs/cperl-mode.el) has been updated to version
1460*0Sstevel@tonic-gate4.31.
1461*0Sstevel@tonic-gate
1462*0Sstevel@tonic-gate=item *
1463*0Sstevel@tonic-gate
1464*0Sstevel@tonic-gateF<emacs/e2ctags.pl> is now much faster.
1465*0Sstevel@tonic-gate
1466*0Sstevel@tonic-gate=item *
1467*0Sstevel@tonic-gate
1468*0Sstevel@tonic-gateC<enc2xs> is a tool for people adding their own encodings to the
1469*0Sstevel@tonic-gateEncode module.
1470*0Sstevel@tonic-gate
1471*0Sstevel@tonic-gate=item *
1472*0Sstevel@tonic-gate
1473*0Sstevel@tonic-gateC<h2ph> now supports C trigraphs.
1474*0Sstevel@tonic-gate
1475*0Sstevel@tonic-gate=item *
1476*0Sstevel@tonic-gate
1477*0Sstevel@tonic-gateC<h2xs> now produces a template README.
1478*0Sstevel@tonic-gate
1479*0Sstevel@tonic-gate=item *
1480*0Sstevel@tonic-gate
1481*0Sstevel@tonic-gateC<h2xs> now uses C<Devel::PPPort> for better portability between
1482*0Sstevel@tonic-gatedifferent versions of Perl.
1483*0Sstevel@tonic-gate
1484*0Sstevel@tonic-gate=item *
1485*0Sstevel@tonic-gate
1486*0Sstevel@tonic-gateC<h2xs> uses the new L<ExtUtils::Constant|ExtUtils::Constant> module
1487*0Sstevel@tonic-gatewhich will affect newly created extensions that define constants.
1488*0Sstevel@tonic-gateSince the new code is more correct (if you have two constants where the
1489*0Sstevel@tonic-gatefirst one is a prefix of the second one, the first constant B<never>
1490*0Sstevel@tonic-gategot defined), less lossy (it uses integers for integer constant,
1491*0Sstevel@tonic-gateas opposed to the old code that used floating point numbers even for
1492*0Sstevel@tonic-gateinteger constants), and slightly faster, you might want to consider
1493*0Sstevel@tonic-gateregenerating your extension code (the new scheme makes regenerating
1494*0Sstevel@tonic-gateeasy).  L<h2xs> now also supports C trigraphs.
1495*0Sstevel@tonic-gate
1496*0Sstevel@tonic-gate=item *
1497*0Sstevel@tonic-gate
1498*0Sstevel@tonic-gateC<libnetcfg> has been added to configure libnet.
1499*0Sstevel@tonic-gate
1500*0Sstevel@tonic-gate=item *
1501*0Sstevel@tonic-gate
1502*0Sstevel@tonic-gateC<perlbug> is now much more robust.  It also sends the bug report to
1503*0Sstevel@tonic-gateperl.org, not perl.com.
1504*0Sstevel@tonic-gate
1505*0Sstevel@tonic-gate=item *
1506*0Sstevel@tonic-gate
1507*0Sstevel@tonic-gateC<perlcc> has been rewritten and its user interface (that is,
1508*0Sstevel@tonic-gatecommand line) is much more like that of the UNIX C compiler, cc.
1509*0Sstevel@tonic-gate(The perlbc tools has been removed.  Use C<perlcc -B> instead.)
1510*0Sstevel@tonic-gateB<Note that perlcc is still considered very experimental and
1511*0Sstevel@tonic-gateunsupported.> [561]
1512*0Sstevel@tonic-gate
1513*0Sstevel@tonic-gate=item *
1514*0Sstevel@tonic-gate
1515*0Sstevel@tonic-gateC<perlivp> is a new Installation Verification Procedure utility
1516*0Sstevel@tonic-gatefor running any time after installing Perl.
1517*0Sstevel@tonic-gate
1518*0Sstevel@tonic-gate=item *
1519*0Sstevel@tonic-gate
1520*0Sstevel@tonic-gateC<piconv> is an implementation of the character conversion utility
1521*0Sstevel@tonic-gateC<iconv>, demonstrating the new Encode module.
1522*0Sstevel@tonic-gate
1523*0Sstevel@tonic-gate=item *
1524*0Sstevel@tonic-gate
1525*0Sstevel@tonic-gateC<pod2html> now allows specifying a cache directory.
1526*0Sstevel@tonic-gate
1527*0Sstevel@tonic-gate=item *
1528*0Sstevel@tonic-gate
1529*0Sstevel@tonic-gateC<pod2html> now produces XHTML 1.0.
1530*0Sstevel@tonic-gate
1531*0Sstevel@tonic-gate=item *
1532*0Sstevel@tonic-gate
1533*0Sstevel@tonic-gateC<pod2html> now understands POD written using different line endings
1534*0Sstevel@tonic-gate(PC-like CRLF versus UNIX-like LF versus MacClassic-like CR).
1535*0Sstevel@tonic-gate
1536*0Sstevel@tonic-gate=item *
1537*0Sstevel@tonic-gate
1538*0Sstevel@tonic-gateC<s2p> has been completely rewritten in Perl.  (It is in fact a full
1539*0Sstevel@tonic-gateimplementation of sed in Perl: you can use the sed functionality by
1540*0Sstevel@tonic-gateusing the C<psed> utility.)
1541*0Sstevel@tonic-gate
1542*0Sstevel@tonic-gate=item *
1543*0Sstevel@tonic-gate
1544*0Sstevel@tonic-gateC<xsubpp> now understands POD documentation embedded in the *.xs
1545*0Sstevel@tonic-gatefiles. [561]
1546*0Sstevel@tonic-gate
1547*0Sstevel@tonic-gate=item *
1548*0Sstevel@tonic-gate
1549*0Sstevel@tonic-gateC<xsubpp> now supports the OUT keyword.
1550*0Sstevel@tonic-gate
1551*0Sstevel@tonic-gate=back
1552*0Sstevel@tonic-gate
1553*0Sstevel@tonic-gate=head1 New Documentation
1554*0Sstevel@tonic-gate
1555*0Sstevel@tonic-gate=over 4
1556*0Sstevel@tonic-gate
1557*0Sstevel@tonic-gate=item *
1558*0Sstevel@tonic-gate
1559*0Sstevel@tonic-gateperl56delta details the changes between the 5.005 release and the
1560*0Sstevel@tonic-gate5.6.0 release.
1561*0Sstevel@tonic-gate
1562*0Sstevel@tonic-gate=item *
1563*0Sstevel@tonic-gate
1564*0Sstevel@tonic-gateperlclib documents the internal replacements for standard C library
1565*0Sstevel@tonic-gatefunctions.  (Interesting only for extension writers and Perl core
1566*0Sstevel@tonic-gatehackers.) [561+]
1567*0Sstevel@tonic-gate
1568*0Sstevel@tonic-gate=item *
1569*0Sstevel@tonic-gate
1570*0Sstevel@tonic-gateperldebtut is a Perl debugging tutorial. [561+]
1571*0Sstevel@tonic-gate
1572*0Sstevel@tonic-gate=item *
1573*0Sstevel@tonic-gate
1574*0Sstevel@tonic-gateperlebcdic contains considerations for running Perl on EBCDIC
1575*0Sstevel@tonic-gateplatforms. [561+]
1576*0Sstevel@tonic-gate
1577*0Sstevel@tonic-gate=item *
1578*0Sstevel@tonic-gate
1579*0Sstevel@tonic-gateperlintro is a gentle introduction to Perl.
1580*0Sstevel@tonic-gate
1581*0Sstevel@tonic-gate=item *
1582*0Sstevel@tonic-gate
1583*0Sstevel@tonic-gateperliol documents the internals of PerlIO with layers.
1584*0Sstevel@tonic-gate
1585*0Sstevel@tonic-gate=item *
1586*0Sstevel@tonic-gate
1587*0Sstevel@tonic-gateperlmodstyle is a style guide for writing modules.
1588*0Sstevel@tonic-gate
1589*0Sstevel@tonic-gate=item *
1590*0Sstevel@tonic-gate
1591*0Sstevel@tonic-gateperlnewmod tells about writing and submitting a new module. [561+]
1592*0Sstevel@tonic-gate
1593*0Sstevel@tonic-gate=item *
1594*0Sstevel@tonic-gate
1595*0Sstevel@tonic-gateperlpacktut is a pack() tutorial.
1596*0Sstevel@tonic-gate
1597*0Sstevel@tonic-gate=item *
1598*0Sstevel@tonic-gate
1599*0Sstevel@tonic-gateperlpod has been rewritten to be clearer and to record the best
1600*0Sstevel@tonic-gatepractices gathered over the years.
1601*0Sstevel@tonic-gate
1602*0Sstevel@tonic-gate=item *
1603*0Sstevel@tonic-gate
1604*0Sstevel@tonic-gateperlpodspec is a more formal specification of the pod format,
1605*0Sstevel@tonic-gatemainly of interest for writers of pod applications, not to
1606*0Sstevel@tonic-gatepeople writing in pod.
1607*0Sstevel@tonic-gate
1608*0Sstevel@tonic-gate=item *
1609*0Sstevel@tonic-gate
1610*0Sstevel@tonic-gateperlretut is a regular expression tutorial. [561+]
1611*0Sstevel@tonic-gate
1612*0Sstevel@tonic-gate=item *
1613*0Sstevel@tonic-gate
1614*0Sstevel@tonic-gateperlrequick is a regular expressions quick-start guide.
1615*0Sstevel@tonic-gateYes, much quicker than perlretut. [561]
1616*0Sstevel@tonic-gate
1617*0Sstevel@tonic-gate=item *
1618*0Sstevel@tonic-gate
1619*0Sstevel@tonic-gateperltodo has been updated.
1620*0Sstevel@tonic-gate
1621*0Sstevel@tonic-gate=item *
1622*0Sstevel@tonic-gate
1623*0Sstevel@tonic-gateperltootc has been renamed as perltooc (to not to conflict
1624*0Sstevel@tonic-gatewith perltoot in filesystems restricted to "8.3" names).
1625*0Sstevel@tonic-gate
1626*0Sstevel@tonic-gate=item *
1627*0Sstevel@tonic-gate
1628*0Sstevel@tonic-gateperluniintro is an introduction to using Unicode in Perl.
1629*0Sstevel@tonic-gate(perlunicode is more of a detailed reference and background
1630*0Sstevel@tonic-gateinformation)
1631*0Sstevel@tonic-gate
1632*0Sstevel@tonic-gate=item *
1633*0Sstevel@tonic-gate
1634*0Sstevel@tonic-gateperlutil explains the command line utilities packaged with the Perl
1635*0Sstevel@tonic-gatedistribution. [561+]
1636*0Sstevel@tonic-gate
1637*0Sstevel@tonic-gate=back
1638*0Sstevel@tonic-gate
1639*0Sstevel@tonic-gateThe following platform-specific documents are available before
1640*0Sstevel@tonic-gatethe installation as README.I<platform>, and after the installation
1641*0Sstevel@tonic-gateas perlI<platform>:
1642*0Sstevel@tonic-gate
1643*0Sstevel@tonic-gate    perlaix perlamiga perlapollo perlbeos perlbs2000
1644*0Sstevel@tonic-gate    perlce perlcygwin perldgux perldos perlepoc perlfreebsd perlhpux
1645*0Sstevel@tonic-gate    perlhurd perlirix perlmachten perlmacos perlmint perlmpeix
1646*0Sstevel@tonic-gate    perlnetware perlos2 perlos390 perlplan9 perlqnx perlsolaris
1647*0Sstevel@tonic-gate    perltru64 perluts perlvmesa perlvms perlvos perlwin32
1648*0Sstevel@tonic-gate
1649*0Sstevel@tonic-gateThese documents usually detail one or more of the following subjects:
1650*0Sstevel@tonic-gateconfiguring, building, testing, installing, and sometimes also using
1651*0Sstevel@tonic-gatePerl on the said platform.
1652*0Sstevel@tonic-gate
1653*0Sstevel@tonic-gateEastern Asian Perl users are now welcomed in their own languages:
1654*0Sstevel@tonic-gateREADME.jp (Japanese), README.ko (Korean), README.cn (simplified
1655*0Sstevel@tonic-gateChinese) and README.tw (traditional Chinese), which are written in
1656*0Sstevel@tonic-gatenormal pod but encoded in EUC-JP, EUC-KR, EUC-CN and Big5.  These
1657*0Sstevel@tonic-gatewill get installed as
1658*0Sstevel@tonic-gate
1659*0Sstevel@tonic-gate   perljp perlko perlcn perltw
1660*0Sstevel@tonic-gate
1661*0Sstevel@tonic-gate=over 4
1662*0Sstevel@tonic-gate
1663*0Sstevel@tonic-gate=item *
1664*0Sstevel@tonic-gate
1665*0Sstevel@tonic-gateThe documentation for the POSIX-BC platform is called "BS2000", to avoid
1666*0Sstevel@tonic-gateconfusion with the Perl POSIX module.
1667*0Sstevel@tonic-gate
1668*0Sstevel@tonic-gate=item *
1669*0Sstevel@tonic-gate
1670*0Sstevel@tonic-gateThe documentation for the WinCE platform is called perlce (README.ce
1671*0Sstevel@tonic-gatein the source code kit), to avoid confusion with the perlwin32
1672*0Sstevel@tonic-gatedocumentation on 8.3-restricted filesystems.
1673*0Sstevel@tonic-gate
1674*0Sstevel@tonic-gate=back
1675*0Sstevel@tonic-gate
1676*0Sstevel@tonic-gate=head1 Performance Enhancements
1677*0Sstevel@tonic-gate
1678*0Sstevel@tonic-gate=over 4
1679*0Sstevel@tonic-gate
1680*0Sstevel@tonic-gate=item *
1681*0Sstevel@tonic-gate
1682*0Sstevel@tonic-gatemap() could get pathologically slow when the result list it generates
1683*0Sstevel@tonic-gateis larger than the source list.  The performance has been improved for
1684*0Sstevel@tonic-gatecommon scenarios. [561]
1685*0Sstevel@tonic-gate
1686*0Sstevel@tonic-gate=item *
1687*0Sstevel@tonic-gate
1688*0Sstevel@tonic-gatesort() is also fully reentrant, in the sense that the sort function
1689*0Sstevel@tonic-gatecan itself call sort().  This did not work reliably in previous
1690*0Sstevel@tonic-gatereleases. [561]
1691*0Sstevel@tonic-gate
1692*0Sstevel@tonic-gate=item *
1693*0Sstevel@tonic-gate
1694*0Sstevel@tonic-gatesort() has been changed to use primarily mergesort internally as
1695*0Sstevel@tonic-gateopposed to the earlier quicksort.  For very small lists this may
1696*0Sstevel@tonic-gateresult in slightly slower sorting times, but in general the speedup
1697*0Sstevel@tonic-gateshould be at least 20%.  Additional bonuses are that the worst case
1698*0Sstevel@tonic-gatebehaviour of sort() is now better (in computer science terms it now
1699*0Sstevel@tonic-gateruns in time O(N log N), as opposed to quicksort's Theta(N**2)
1700*0Sstevel@tonic-gateworst-case run time behaviour), and that sort() is now stable
1701*0Sstevel@tonic-gate(meaning that elements with identical keys will stay ordered as they
1702*0Sstevel@tonic-gatewere before the sort).  See the C<sort> pragma for information.
1703*0Sstevel@tonic-gate
1704*0Sstevel@tonic-gateThe story in more detail: suppose you want to serve yourself a little
1705*0Sstevel@tonic-gateslice of Pi.
1706*0Sstevel@tonic-gate
1707*0Sstevel@tonic-gate    @digits = ( 3,1,4,1,5,9 );
1708*0Sstevel@tonic-gate
1709*0Sstevel@tonic-gateA numerical sort of the digits will yield (1,1,3,4,5,9), as expected.
1710*0Sstevel@tonic-gateWhich C<1> comes first is hard to know, since one C<1> looks pretty
1711*0Sstevel@tonic-gatemuch like any other.  You can regard this as totally trivial,
1712*0Sstevel@tonic-gateor somewhat profound.  However, if you just want to sort the even
1713*0Sstevel@tonic-gatedigits ahead of the odd ones, then what will
1714*0Sstevel@tonic-gate
1715*0Sstevel@tonic-gate    sort { ($a % 2) <=> ($b % 2) } @digits;
1716*0Sstevel@tonic-gate
1717*0Sstevel@tonic-gateyield?  The only even digit, C<4>, will come first.  But how about
1718*0Sstevel@tonic-gatethe odd numbers, which all compare equal?  With the quicksort algorithm
1719*0Sstevel@tonic-gateused to implement Perl 5.6 and earlier, the order of ties is left up
1720*0Sstevel@tonic-gateto the sort.  So, as you add more and more digits of Pi, the order
1721*0Sstevel@tonic-gatein which the sorted even and odd digits appear will change.
1722*0Sstevel@tonic-gateand, for sufficiently large slices of Pi, the quicksort algorithm
1723*0Sstevel@tonic-gatein Perl 5.8 won't return the same results even if reinvoked with the
1724*0Sstevel@tonic-gatesame input.  The justification for this rests with quicksort's
1725*0Sstevel@tonic-gateworst case behavior.  If you run
1726*0Sstevel@tonic-gate
1727*0Sstevel@tonic-gate   sort { $a <=> $b } ( 1 .. $N , 1 .. $N );
1728*0Sstevel@tonic-gate
1729*0Sstevel@tonic-gate(something you might approximate if you wanted to merge two sorted
1730*0Sstevel@tonic-gatearrays using sort), doubling $N doesn't just double the quicksort time,
1731*0Sstevel@tonic-gateit I<quadruples> it.  Quicksort has a worst case run time that can
1732*0Sstevel@tonic-gategrow like N**2, so-called I<quadratic> behaviour, and it can happen
1733*0Sstevel@tonic-gateon patterns that may well arise in normal use.  You won't notice this
1734*0Sstevel@tonic-gatefor small arrays, but you I<will> notice it with larger arrays,
1735*0Sstevel@tonic-gateand you may not live long enough for the sort to complete on arrays
1736*0Sstevel@tonic-gateof a million elements.  So the 5.8 quicksort scrambles large arrays
1737*0Sstevel@tonic-gatebefore sorting them, as a statistical defence against quadratic behaviour.
1738*0Sstevel@tonic-gateBut that means if you sort the same large array twice, ties may be
1739*0Sstevel@tonic-gatebroken in different ways.
1740*0Sstevel@tonic-gate
1741*0Sstevel@tonic-gateBecause of the unpredictability of tie-breaking order, and the quadratic
1742*0Sstevel@tonic-gateworst-case behaviour, quicksort was I<almost> replaced completely with
1743*0Sstevel@tonic-gatea stable mergesort.  I<Stable> means that ties are broken to preserve
1744*0Sstevel@tonic-gatethe original order of appearance in the input array.  So
1745*0Sstevel@tonic-gate
1746*0Sstevel@tonic-gate    sort { ($a % 2) <=> ($b % 2) } (3,1,4,1,5,9);
1747*0Sstevel@tonic-gate
1748*0Sstevel@tonic-gatewill yield (4,3,1,1,5,9), guaranteed.  The even and odd numbers
1749*0Sstevel@tonic-gateappear in the output in the same order they appeared in the input.
1750*0Sstevel@tonic-gateMergesort has worst case O(N log N) behaviour, the best value
1751*0Sstevel@tonic-gateattainable.  And, ironically, this mergesort does particularly
1752*0Sstevel@tonic-gatewell where quicksort goes quadratic:  mergesort sorts (1..$N, 1..$N)
1753*0Sstevel@tonic-gatein O(N) time.  But quicksort was rescued at the last moment because
1754*0Sstevel@tonic-gateit is faster than mergesort on certain inputs and platforms.
1755*0Sstevel@tonic-gateFor example, if you really I<don't> care about the order of even
1756*0Sstevel@tonic-gateand odd digits, quicksort will run in O(N) time; it's very good
1757*0Sstevel@tonic-gateat sorting many repetitions of a small number of distinct elements.
1758*0Sstevel@tonic-gateThe quicksort divide and conquer strategy works well on platforms
1759*0Sstevel@tonic-gatewith relatively small, very fast, caches.  Eventually, the problem gets
1760*0Sstevel@tonic-gatewhittled down to one that fits in the cache, from which point it
1761*0Sstevel@tonic-gatebenefits from the increased memory speed.
1762*0Sstevel@tonic-gate
1763*0Sstevel@tonic-gateQuicksort was rescued by implementing a sort pragma to control aspects
1764*0Sstevel@tonic-gateof the sort.  The B<stable> subpragma forces stable behaviour,
1765*0Sstevel@tonic-gateregardless of algorithm.  The B<_quicksort> and B<_mergesort>
1766*0Sstevel@tonic-gatesubpragmas are heavy-handed ways to select the underlying implementation.
1767*0Sstevel@tonic-gateThe leading C<_> is a reminder that these subpragmas may not survive
1768*0Sstevel@tonic-gatebeyond 5.8.  More appropriate mechanisms for selecting the implementation
1769*0Sstevel@tonic-gateexist, but they wouldn't have arrived in time to save quicksort.
1770*0Sstevel@tonic-gate
1771*0Sstevel@tonic-gate=item *
1772*0Sstevel@tonic-gate
1773*0Sstevel@tonic-gateHashes now use Bob Jenkins "One-at-a-Time" hashing key algorithm
1774*0Sstevel@tonic-gate( http://burtleburtle.net/bob/hash/doobs.html ).  This algorithm is
1775*0Sstevel@tonic-gatereasonably fast while producing a much better spread of values than
1776*0Sstevel@tonic-gatethe old hashing algorithm (originally by Chris Torek, later tweaked by
1777*0Sstevel@tonic-gateIlya Zakharevich).  Hash values output from the algorithm on a hash of
1778*0Sstevel@tonic-gateall 3-char printable ASCII keys comes much closer to passing the
1779*0Sstevel@tonic-gateDIEHARD random number generation tests.  According to perlbench, this
1780*0Sstevel@tonic-gatechange has not affected the overall speed of Perl.
1781*0Sstevel@tonic-gate
1782*0Sstevel@tonic-gate=item *
1783*0Sstevel@tonic-gate
1784*0Sstevel@tonic-gateunshift() should now be noticeably faster.
1785*0Sstevel@tonic-gate
1786*0Sstevel@tonic-gate=back
1787*0Sstevel@tonic-gate
1788*0Sstevel@tonic-gate=head1 Installation and Configuration Improvements
1789*0Sstevel@tonic-gate
1790*0Sstevel@tonic-gate=head2 Generic Improvements
1791*0Sstevel@tonic-gate
1792*0Sstevel@tonic-gate=over 4
1793*0Sstevel@tonic-gate
1794*0Sstevel@tonic-gate=item *
1795*0Sstevel@tonic-gate
1796*0Sstevel@tonic-gateINSTALL now explains how you can configure Perl to use 64-bit
1797*0Sstevel@tonic-gateintegers even on non-64-bit platforms.
1798*0Sstevel@tonic-gate
1799*0Sstevel@tonic-gate=item *
1800*0Sstevel@tonic-gate
1801*0Sstevel@tonic-gatePolicy.sh policy change: if you are reusing a Policy.sh file
1802*0Sstevel@tonic-gate(see INSTALL) and you use Configure -Dprefix=/foo/bar and in the old
1803*0Sstevel@tonic-gatePolicy $prefix eq $siteprefix and $prefix eq $vendorprefix, all of
1804*0Sstevel@tonic-gatethem will now be changed to the new prefix, /foo/bar.  (Previously
1805*0Sstevel@tonic-gateonly $prefix changed.)  If you do not like this new behaviour,
1806*0Sstevel@tonic-gatespecify prefix, siteprefix, and vendorprefix explicitly.
1807*0Sstevel@tonic-gate
1808*0Sstevel@tonic-gate=item *
1809*0Sstevel@tonic-gate
1810*0Sstevel@tonic-gateA new optional location for Perl libraries, otherlibdirs, is available.
1811*0Sstevel@tonic-gateIt can be used for example for vendor add-ons without disturbing Perl's
1812*0Sstevel@tonic-gateown library directories.
1813*0Sstevel@tonic-gate
1814*0Sstevel@tonic-gate=item *
1815*0Sstevel@tonic-gate
1816*0Sstevel@tonic-gateIn many platforms, the vendor-supplied 'cc' is too stripped-down to
1817*0Sstevel@tonic-gatebuild Perl (basically, 'cc' doesn't do ANSI C).  If this seems
1818*0Sstevel@tonic-gateto be the case and 'cc' does not seem to be the GNU C compiler
1819*0Sstevel@tonic-gate'gcc', an automatic attempt is made to find and use 'gcc' instead.
1820*0Sstevel@tonic-gate
1821*0Sstevel@tonic-gate=item *
1822*0Sstevel@tonic-gate
1823*0Sstevel@tonic-gategcc needs to closely track the operating system release to avoid
1824*0Sstevel@tonic-gatebuild problems. If Configure finds that gcc was built for a different
1825*0Sstevel@tonic-gateoperating system release than is running, it now gives a clearly visible
1826*0Sstevel@tonic-gatewarning that there may be trouble ahead.
1827*0Sstevel@tonic-gate
1828*0Sstevel@tonic-gate=item *
1829*0Sstevel@tonic-gate
1830*0Sstevel@tonic-gateSince Perl 5.8 is not binary-compatible with previous releases
1831*0Sstevel@tonic-gateof Perl, Configure no longer suggests including the 5.005
1832*0Sstevel@tonic-gatemodules in @INC.
1833*0Sstevel@tonic-gate
1834*0Sstevel@tonic-gate=item *
1835*0Sstevel@tonic-gate
1836*0Sstevel@tonic-gateConfigure C<-S> can now run non-interactively. [561]
1837*0Sstevel@tonic-gate
1838*0Sstevel@tonic-gate=item *
1839*0Sstevel@tonic-gate
1840*0Sstevel@tonic-gateConfigure support for pdp11-style memory models has been removed due
1841*0Sstevel@tonic-gateto obsolescence. [561]
1842*0Sstevel@tonic-gate
1843*0Sstevel@tonic-gate=item *
1844*0Sstevel@tonic-gate
1845*0Sstevel@tonic-gateconfigure.gnu now works with options with whitespace in them.
1846*0Sstevel@tonic-gate
1847*0Sstevel@tonic-gate=item *
1848*0Sstevel@tonic-gate
1849*0Sstevel@tonic-gateinstallperl now outputs everything to STDERR.
1850*0Sstevel@tonic-gate
1851*0Sstevel@tonic-gate=item *
1852*0Sstevel@tonic-gate
1853*0Sstevel@tonic-gateBecause PerlIO is now the default on most platforms, "-perlio" doesn't
1854*0Sstevel@tonic-gateget appended to the $Config{archname} (also known as $^O) anymore.
1855*0Sstevel@tonic-gateInstead, if you explicitly choose not to use perlio (Configure command
1856*0Sstevel@tonic-gateline option -Uuseperlio), you will get "-stdio" appended.
1857*0Sstevel@tonic-gate
1858*0Sstevel@tonic-gate=item *
1859*0Sstevel@tonic-gate
1860*0Sstevel@tonic-gateAnother change related to the architecture name is that "-64all"
1861*0Sstevel@tonic-gate(-Duse64bitall, or "maximally 64-bit") is appended only if your
1862*0Sstevel@tonic-gatepointers are 64 bits wide.  (To be exact, the use64bitall is ignored.)
1863*0Sstevel@tonic-gate
1864*0Sstevel@tonic-gate=item *
1865*0Sstevel@tonic-gate
1866*0Sstevel@tonic-gateIn AFS installations, one can configure the root of the AFS to be
1867*0Sstevel@tonic-gatesomewhere else than the default F</afs> by using the Configure
1868*0Sstevel@tonic-gateparameter C<-Dafsroot=/some/where/else>.
1869*0Sstevel@tonic-gate
1870*0Sstevel@tonic-gate=item *
1871*0Sstevel@tonic-gate
1872*0Sstevel@tonic-gateAPPLLIB_EXP, a lesser-known configuration-time definition, has been
1873*0Sstevel@tonic-gatedocumented.  It can be used to prepend site-specific directories
1874*0Sstevel@tonic-gateto Perl's default search path (@INC); see INSTALL for information.
1875*0Sstevel@tonic-gate
1876*0Sstevel@tonic-gate=item *
1877*0Sstevel@tonic-gate
1878*0Sstevel@tonic-gateThe version of Berkeley DB used when the Perl (and, presumably, the
1879*0Sstevel@tonic-gateDB_File extension) was built is now available as
1880*0Sstevel@tonic-gateC<@Config{qw(db_version_major db_version_minor db_version_patch)}>
1881*0Sstevel@tonic-gatefrom Perl and as C<DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
1882*0Sstevel@tonic-gateDB_VERSION_PATCH_CFG> from C.
1883*0Sstevel@tonic-gate
1884*0Sstevel@tonic-gate=item *
1885*0Sstevel@tonic-gate
1886*0Sstevel@tonic-gateBuilding Berkeley DB3 for compatibility modes for DB, NDBM, and ODBM
1887*0Sstevel@tonic-gatehas been documented in INSTALL.
1888*0Sstevel@tonic-gate
1889*0Sstevel@tonic-gate=item *
1890*0Sstevel@tonic-gate
1891*0Sstevel@tonic-gateIf you have CPAN access (either network or a local copy such as a
1892*0Sstevel@tonic-gateCD-ROM) you can during specify extra modules to Configure to build and
1893*0Sstevel@tonic-gateinstall with Perl using the -Dextras=...  option.  See INSTALL for
1894*0Sstevel@tonic-gatemore details.
1895*0Sstevel@tonic-gate
1896*0Sstevel@tonic-gate=item *
1897*0Sstevel@tonic-gate
1898*0Sstevel@tonic-gateIn addition to config.over, a new override file, config.arch, is
1899*0Sstevel@tonic-gateavailable.  This file is supposed to be used by hints file writers
1900*0Sstevel@tonic-gatefor architecture-wide changes (as opposed to config.over which is
1901*0Sstevel@tonic-gatefor site-wide changes).
1902*0Sstevel@tonic-gate
1903*0Sstevel@tonic-gate=item *
1904*0Sstevel@tonic-gate
1905*0Sstevel@tonic-gateIf your file system supports symbolic links, you can build Perl outside
1906*0Sstevel@tonic-gateof the source directory by
1907*0Sstevel@tonic-gate
1908*0Sstevel@tonic-gate	mkdir perl/build/directory
1909*0Sstevel@tonic-gate	cd perl/build/directory
1910*0Sstevel@tonic-gate	sh /path/to/perl/source/Configure -Dmksymlinks ...
1911*0Sstevel@tonic-gate
1912*0Sstevel@tonic-gateThis will create in perl/build/directory a tree of symbolic links
1913*0Sstevel@tonic-gatepointing to files in /path/to/perl/source.  The original files are left
1914*0Sstevel@tonic-gateunaffected.  After Configure has finished, you can just say
1915*0Sstevel@tonic-gate
1916*0Sstevel@tonic-gate	make all test
1917*0Sstevel@tonic-gate
1918*0Sstevel@tonic-gateand Perl will be built and tested, all in perl/build/directory.
1919*0Sstevel@tonic-gate[561]
1920*0Sstevel@tonic-gate
1921*0Sstevel@tonic-gate=item *
1922*0Sstevel@tonic-gate
1923*0Sstevel@tonic-gateFor Perl developers, several new make targets for profiling
1924*0Sstevel@tonic-gateand debugging have been added; see L<perlhack>.
1925*0Sstevel@tonic-gate
1926*0Sstevel@tonic-gate=over 8
1927*0Sstevel@tonic-gate
1928*0Sstevel@tonic-gate=item *
1929*0Sstevel@tonic-gate
1930*0Sstevel@tonic-gateUse of the F<gprof> tool to profile Perl has been documented in
1931*0Sstevel@tonic-gateL<perlhack>.  There is a make target called "perl.gprof" for
1932*0Sstevel@tonic-gategenerating a gprofiled Perl executable.
1933*0Sstevel@tonic-gate
1934*0Sstevel@tonic-gate=item *
1935*0Sstevel@tonic-gate
1936*0Sstevel@tonic-gateIf you have GCC 3, there is a make target called "perl.gcov" for
1937*0Sstevel@tonic-gatecreating a gcoved Perl executable for coverage analysis.  See
1938*0Sstevel@tonic-gateL<perlhack>.
1939*0Sstevel@tonic-gate
1940*0Sstevel@tonic-gate=item *
1941*0Sstevel@tonic-gate
1942*0Sstevel@tonic-gateIf you are on IRIX or Tru64 platforms, new profiling/debugging options
1943*0Sstevel@tonic-gatehave been added; see L<perlhack> for more information about pixie and
1944*0Sstevel@tonic-gateThird Degree.
1945*0Sstevel@tonic-gate
1946*0Sstevel@tonic-gate=back
1947*0Sstevel@tonic-gate
1948*0Sstevel@tonic-gate=item *
1949*0Sstevel@tonic-gate
1950*0Sstevel@tonic-gateGuidelines of how to construct minimal Perl installations have
1951*0Sstevel@tonic-gatebeen added to INSTALL.
1952*0Sstevel@tonic-gate
1953*0Sstevel@tonic-gate=item *
1954*0Sstevel@tonic-gate
1955*0Sstevel@tonic-gateThe Thread extension is now not built at all under ithreads
1956*0Sstevel@tonic-gate(C<Configure -Duseithreads>) because it wouldn't work anyway (the
1957*0Sstevel@tonic-gateThread extension requires being Configured with C<-Duse5005threads>).
1958*0Sstevel@tonic-gate
1959*0Sstevel@tonic-gateB<Note that the 5.005 threads are unsupported and deprecated: if you
1960*0Sstevel@tonic-gatehave code written for the old threads you should migrate it to the
1961*0Sstevel@tonic-gatenew ithreads model.>
1962*0Sstevel@tonic-gate
1963*0Sstevel@tonic-gate=item *
1964*0Sstevel@tonic-gate
1965*0Sstevel@tonic-gateThe Gconvert macro ($Config{d_Gconvert}) used by perl for stringifying
1966*0Sstevel@tonic-gatefloating-point numbers is now more picky about using sprintf %.*g
1967*0Sstevel@tonic-gaterules for the conversion.  Some platforms that used to use gcvt may
1968*0Sstevel@tonic-gatenow resort to the slower sprintf.
1969*0Sstevel@tonic-gate
1970*0Sstevel@tonic-gate=item *
1971*0Sstevel@tonic-gate
1972*0Sstevel@tonic-gateThe obsolete method of making a special (e.g., debugging) flavor
1973*0Sstevel@tonic-gateof perl by saying
1974*0Sstevel@tonic-gate
1975*0Sstevel@tonic-gate	make LIBPERL=libperld.a
1976*0Sstevel@tonic-gate
1977*0Sstevel@tonic-gatehas been removed. Use -DDEBUGGING instead.
1978*0Sstevel@tonic-gate
1979*0Sstevel@tonic-gate=back
1980*0Sstevel@tonic-gate
1981*0Sstevel@tonic-gate=head2 New Or Improved Platforms
1982*0Sstevel@tonic-gate
1983*0Sstevel@tonic-gateFor the list of platforms known to support Perl,
1984*0Sstevel@tonic-gatesee L<perlport/"Supported Platforms">.
1985*0Sstevel@tonic-gate
1986*0Sstevel@tonic-gate=over 4
1987*0Sstevel@tonic-gate
1988*0Sstevel@tonic-gate=item *
1989*0Sstevel@tonic-gate
1990*0Sstevel@tonic-gateAIX dynamic loading should be now better supported.
1991*0Sstevel@tonic-gate
1992*0Sstevel@tonic-gate=item *
1993*0Sstevel@tonic-gate
1994*0Sstevel@tonic-gateAIX should now work better with gcc, threads, and 64-bitness.  Also the
1995*0Sstevel@tonic-gatelong doubles support in AIX should be better now.  See L<perlaix>.
1996*0Sstevel@tonic-gate
1997*0Sstevel@tonic-gate=item *
1998*0Sstevel@tonic-gate
1999*0Sstevel@tonic-gateAtheOS ( http://www.atheos.cx/ ) is a new platform.
2000*0Sstevel@tonic-gate
2001*0Sstevel@tonic-gate=item *
2002*0Sstevel@tonic-gate
2003*0Sstevel@tonic-gateBeOS has been reclaimed.
2004*0Sstevel@tonic-gate
2005*0Sstevel@tonic-gate=item *
2006*0Sstevel@tonic-gate
2007*0Sstevel@tonic-gateThe DG/UX platform now supports 5.005-style threads.
2008*0Sstevel@tonic-gateSee L<perldgux>.
2009*0Sstevel@tonic-gate
2010*0Sstevel@tonic-gate=item *
2011*0Sstevel@tonic-gate
2012*0Sstevel@tonic-gateThe DYNIX/ptx platform (also known as dynixptx) is supported at or
2013*0Sstevel@tonic-gatenear osvers 4.5.2.
2014*0Sstevel@tonic-gate
2015*0Sstevel@tonic-gate=item *
2016*0Sstevel@tonic-gate
2017*0Sstevel@tonic-gateEBCDIC platforms (z/OS (also known as OS/390), POSIX-BC, and VM/ESA)
2018*0Sstevel@tonic-gatehave been regained.  Many test suite tests still fail and the
2019*0Sstevel@tonic-gateco-existence of Unicode and EBCDIC isn't quite settled, but the
2020*0Sstevel@tonic-gatesituation is much better than with Perl 5.6.  See L<perlos390>,
2021*0Sstevel@tonic-gateL<perlbs2000> (for POSIX-BC), and L<perlvmesa> for more information.
2022*0Sstevel@tonic-gate
2023*0Sstevel@tonic-gate=item *
2024*0Sstevel@tonic-gate
2025*0Sstevel@tonic-gateBuilding perl with -Duseithreads or -Duse5005threads now works under
2026*0Sstevel@tonic-gateHP-UX 10.20 (previously it only worked under 10.30 or later). You will
2027*0Sstevel@tonic-gateneed a thread library package installed. See README.hpux. [561]
2028*0Sstevel@tonic-gate
2029*0Sstevel@tonic-gate=item *
2030*0Sstevel@tonic-gate
2031*0Sstevel@tonic-gateMac OS Classic is now supported in the mainstream source package
2032*0Sstevel@tonic-gate(MacPerl has of course been available since perl 5.004 but now the
2033*0Sstevel@tonic-gatesource code bases of standard Perl and MacPerl have been synchronised)
2034*0Sstevel@tonic-gate[561]
2035*0Sstevel@tonic-gate
2036*0Sstevel@tonic-gate=item *
2037*0Sstevel@tonic-gate
2038*0Sstevel@tonic-gateMac OS X (or Darwin) should now be able to build Perl even on HFS+
2039*0Sstevel@tonic-gatefilesystems.  (The case-insensitivity used to confuse the Perl build
2040*0Sstevel@tonic-gateprocess.)
2041*0Sstevel@tonic-gate
2042*0Sstevel@tonic-gate=item *
2043*0Sstevel@tonic-gate
2044*0Sstevel@tonic-gateNCR MP-RAS is now supported. [561]
2045*0Sstevel@tonic-gate
2046*0Sstevel@tonic-gate=item *
2047*0Sstevel@tonic-gate
2048*0Sstevel@tonic-gateAll the NetBSD specific patches (except for the installation
2049*0Sstevel@tonic-gatespecific ones) have been merged back to the main distribution.
2050*0Sstevel@tonic-gate
2051*0Sstevel@tonic-gate=item *
2052*0Sstevel@tonic-gate
2053*0Sstevel@tonic-gateNetWare from Novell is now supported.  See L<perlnetware>.
2054*0Sstevel@tonic-gate
2055*0Sstevel@tonic-gate=item *
2056*0Sstevel@tonic-gate
2057*0Sstevel@tonic-gateNonStop-UX is now supported. [561]
2058*0Sstevel@tonic-gate
2059*0Sstevel@tonic-gate=item *
2060*0Sstevel@tonic-gate
2061*0Sstevel@tonic-gateNEC SUPER-UX is now supported.
2062*0Sstevel@tonic-gate
2063*0Sstevel@tonic-gate=item *
2064*0Sstevel@tonic-gate
2065*0Sstevel@tonic-gateAll the OpenBSD specific patches (except for the installation
2066*0Sstevel@tonic-gatespecific ones) have been merged back to the main distribution.
2067*0Sstevel@tonic-gate
2068*0Sstevel@tonic-gate=item *
2069*0Sstevel@tonic-gate
2070*0Sstevel@tonic-gatePerl has been tested with the GNU pth userlevel thread package
2071*0Sstevel@tonic-gate( http://www.gnu.org/software/pth/pth.html ).  All thread tests
2072*0Sstevel@tonic-gateof Perl now work, but not without adding some yield()s to the tests,
2073*0Sstevel@tonic-gateso while pth (and other userlevel thread implementations) can be
2074*0Sstevel@tonic-gateconsidered to be "working" with Perl ithreads, keep in mind the
2075*0Sstevel@tonic-gatepossible non-preemptability of the underlying thread implementation.
2076*0Sstevel@tonic-gate
2077*0Sstevel@tonic-gate=item *
2078*0Sstevel@tonic-gate
2079*0Sstevel@tonic-gateStratus VOS is now supported using Perl's native build method
2080*0Sstevel@tonic-gate(Configure).  This is the recommended method to build Perl on
2081*0Sstevel@tonic-gateVOS.  The older methods, which build miniperl, are still
2082*0Sstevel@tonic-gateavailable.  See L<perlvos>. [561+]
2083*0Sstevel@tonic-gate
2084*0Sstevel@tonic-gate=item *
2085*0Sstevel@tonic-gate
2086*0Sstevel@tonic-gateThe Amdahl UTS UNIX mainframe platform is now supported. [561]
2087*0Sstevel@tonic-gate
2088*0Sstevel@tonic-gate=item *
2089*0Sstevel@tonic-gate
2090*0Sstevel@tonic-gateWinCE is now supported.  See L<perlce>.
2091*0Sstevel@tonic-gate
2092*0Sstevel@tonic-gate=item *
2093*0Sstevel@tonic-gate
2094*0Sstevel@tonic-gatez/OS (formerly known as OS/390, formerly known as MVS OE) now has
2095*0Sstevel@tonic-gatesupport for dynamic loading.  This is not selected by default,
2096*0Sstevel@tonic-gatehowever, you must specify -Dusedl in the arguments of Configure. [561]
2097*0Sstevel@tonic-gate
2098*0Sstevel@tonic-gate=back
2099*0Sstevel@tonic-gate
2100*0Sstevel@tonic-gate=head1 Selected Bug Fixes
2101*0Sstevel@tonic-gate
2102*0Sstevel@tonic-gateNumerous memory leaks and uninitialized memory accesses have been
2103*0Sstevel@tonic-gatehunted down.  Most importantly, anonymous subs used to leak quite
2104*0Sstevel@tonic-gatea bit. [561]
2105*0Sstevel@tonic-gate
2106*0Sstevel@tonic-gate=over 4
2107*0Sstevel@tonic-gate
2108*0Sstevel@tonic-gate=item *
2109*0Sstevel@tonic-gate
2110*0Sstevel@tonic-gateThe autouse pragma didn't work for Multi::Part::Function::Names.
2111*0Sstevel@tonic-gate
2112*0Sstevel@tonic-gate=item *
2113*0Sstevel@tonic-gate
2114*0Sstevel@tonic-gatecaller() could cause core dumps in certain situations.  Carp was
2115*0Sstevel@tonic-gatesometimes affected by this problem.  In particular, caller() now
2116*0Sstevel@tonic-gatereturns a subroutine name of C<(unknown)> for subroutines that have
2117*0Sstevel@tonic-gatebeen removed from the symbol table.
2118*0Sstevel@tonic-gate
2119*0Sstevel@tonic-gate=item *
2120*0Sstevel@tonic-gate
2121*0Sstevel@tonic-gatechop(@list) in list context returned the characters chopped in
2122*0Sstevel@tonic-gatereverse order.  This has been reversed to be in the right order. [561]
2123*0Sstevel@tonic-gate
2124*0Sstevel@tonic-gate=item *
2125*0Sstevel@tonic-gate
2126*0Sstevel@tonic-gateConfigure no longer includes the DBM libraries (dbm, gdbm, db, ndbm)
2127*0Sstevel@tonic-gatewhen building the Perl binary.  The only exception to this is SunOS 4.x,
2128*0Sstevel@tonic-gatewhich needs them. [561]
2129*0Sstevel@tonic-gate
2130*0Sstevel@tonic-gate=item *
2131*0Sstevel@tonic-gate
2132*0Sstevel@tonic-gateThe behaviour of non-decimal but numeric string constants such as
2133*0Sstevel@tonic-gate"0x23" was platform-dependent: in some platforms that was seen as 35,
2134*0Sstevel@tonic-gatein some as 0, in some as a floating point number (don't ask).  This
2135*0Sstevel@tonic-gatewas caused by Perl's using the operating system libraries in a situation
2136*0Sstevel@tonic-gatewhere the result of the string to number conversion is undefined: now
2137*0Sstevel@tonic-gatePerl consistently handles such strings as zero in numeric contexts.
2138*0Sstevel@tonic-gate
2139*0Sstevel@tonic-gate=item *
2140*0Sstevel@tonic-gate
2141*0Sstevel@tonic-gateSeveral debugger fixes: exit code now reflects the script exit code,
2142*0Sstevel@tonic-gatecondition C<"0"> now treated correctly, the C<d> command now checks
2143*0Sstevel@tonic-gateline number, C<$.> no longer gets corrupted, and all debugger output
2144*0Sstevel@tonic-gatenow goes correctly to the socket if RemotePort is set. [561]
2145*0Sstevel@tonic-gate
2146*0Sstevel@tonic-gate=item *
2147*0Sstevel@tonic-gate
2148*0Sstevel@tonic-gateThe debugger (perl5db.pl) has been modified to present a more
2149*0Sstevel@tonic-gateconsistent commands interface, via (CommandSet=580).  perl5db.t was
2150*0Sstevel@tonic-gatealso added to test the changes, and as a placeholder for further tests.
2151*0Sstevel@tonic-gate
2152*0Sstevel@tonic-gateSee L<perldebug>.
2153*0Sstevel@tonic-gate
2154*0Sstevel@tonic-gate=item *
2155*0Sstevel@tonic-gate
2156*0Sstevel@tonic-gateThe debugger has a new C<dumpDepth> option to control the maximum
2157*0Sstevel@tonic-gatedepth to which nested structures are dumped.  The C<x> command has
2158*0Sstevel@tonic-gatebeen extended so that C<x N EXPR> dumps out the value of I<EXPR> to a
2159*0Sstevel@tonic-gatedepth of at most I<N> levels.
2160*0Sstevel@tonic-gate
2161*0Sstevel@tonic-gate=item *
2162*0Sstevel@tonic-gate
2163*0Sstevel@tonic-gateThe debugger can now show lexical variables if you have the CPAN
2164*0Sstevel@tonic-gatemodule PadWalker installed.
2165*0Sstevel@tonic-gate
2166*0Sstevel@tonic-gate=item *
2167*0Sstevel@tonic-gate
2168*0Sstevel@tonic-gateThe order of DESTROYs has been made more predictable.
2169*0Sstevel@tonic-gate
2170*0Sstevel@tonic-gate=item *
2171*0Sstevel@tonic-gate
2172*0Sstevel@tonic-gatePerl 5.6.0 could emit spurious warnings about redefinition of
2173*0Sstevel@tonic-gatedl_error() when statically building extensions into perl.
2174*0Sstevel@tonic-gateThis has been corrected. [561]
2175*0Sstevel@tonic-gate
2176*0Sstevel@tonic-gate=item *
2177*0Sstevel@tonic-gate
2178*0Sstevel@tonic-gateL<dprofpp> -R didn't work.
2179*0Sstevel@tonic-gate
2180*0Sstevel@tonic-gate=item *
2181*0Sstevel@tonic-gate
2182*0Sstevel@tonic-gateC<*foo{FORMAT}> now works.
2183*0Sstevel@tonic-gate
2184*0Sstevel@tonic-gate=item *
2185*0Sstevel@tonic-gate
2186*0Sstevel@tonic-gateInfinity is now recognized as a number.
2187*0Sstevel@tonic-gate
2188*0Sstevel@tonic-gate=item *
2189*0Sstevel@tonic-gate
2190*0Sstevel@tonic-gateUNIVERSAL::isa no longer caches methods incorrectly.  (This broke
2191*0Sstevel@tonic-gatethe Tk extension with 5.6.0.) [561]
2192*0Sstevel@tonic-gate
2193*0Sstevel@tonic-gate=item *
2194*0Sstevel@tonic-gate
2195*0Sstevel@tonic-gateLexicals I: lexicals outside an eval "" weren't resolved
2196*0Sstevel@tonic-gatecorrectly inside a subroutine definition inside the eval "" if they
2197*0Sstevel@tonic-gatewere not already referenced in the top level of the eval""ed code.
2198*0Sstevel@tonic-gate
2199*0Sstevel@tonic-gate=item *
2200*0Sstevel@tonic-gate
2201*0Sstevel@tonic-gateLexicals II: lexicals leaked at file scope into subroutines that
2202*0Sstevel@tonic-gatewere declared before the lexicals.
2203*0Sstevel@tonic-gate
2204*0Sstevel@tonic-gate=item *
2205*0Sstevel@tonic-gate
2206*0Sstevel@tonic-gateLexical warnings now propagating correctly between scopes
2207*0Sstevel@tonic-gateand into C<eval "...">.
2208*0Sstevel@tonic-gate
2209*0Sstevel@tonic-gate=item *
2210*0Sstevel@tonic-gate
2211*0Sstevel@tonic-gateC<use warnings qw(FATAL all)> did not work as intended.  This has been
2212*0Sstevel@tonic-gatecorrected. [561]
2213*0Sstevel@tonic-gate
2214*0Sstevel@tonic-gate=item *
2215*0Sstevel@tonic-gate
2216*0Sstevel@tonic-gatewarnings::enabled() now reports the state of $^W correctly if the caller
2217*0Sstevel@tonic-gateisn't using lexical warnings. [561]
2218*0Sstevel@tonic-gate
2219*0Sstevel@tonic-gate=item *
2220*0Sstevel@tonic-gate
2221*0Sstevel@tonic-gateLine renumbering with eval and C<#line> now works. [561]
2222*0Sstevel@tonic-gate
2223*0Sstevel@tonic-gate=item *
2224*0Sstevel@tonic-gate
2225*0Sstevel@tonic-gateFixed numerous memory leaks, especially in eval "".
2226*0Sstevel@tonic-gate
2227*0Sstevel@tonic-gate=item *
2228*0Sstevel@tonic-gate
2229*0Sstevel@tonic-gateLocalised tied variables no longer leak memory
2230*0Sstevel@tonic-gate
2231*0Sstevel@tonic-gate    use Tie::Hash;
2232*0Sstevel@tonic-gate    tie my %tied_hash => 'Tie::StdHash';
2233*0Sstevel@tonic-gate
2234*0Sstevel@tonic-gate    ...
2235*0Sstevel@tonic-gate
2236*0Sstevel@tonic-gate    # Used to leak memory every time local() was called;
2237*0Sstevel@tonic-gate    # in a loop, this added up.
2238*0Sstevel@tonic-gate    local($tied_hash{Foo}) = 1;
2239*0Sstevel@tonic-gate
2240*0Sstevel@tonic-gate=item *
2241*0Sstevel@tonic-gate
2242*0Sstevel@tonic-gateLocalised hash elements (and %ENV) are correctly unlocalised to not
2243*0Sstevel@tonic-gateexist, if they didn't before they were localised.
2244*0Sstevel@tonic-gate
2245*0Sstevel@tonic-gate
2246*0Sstevel@tonic-gate    use Tie::Hash;
2247*0Sstevel@tonic-gate    tie my %tied_hash => 'Tie::StdHash';
2248*0Sstevel@tonic-gate
2249*0Sstevel@tonic-gate    ...
2250*0Sstevel@tonic-gate
2251*0Sstevel@tonic-gate    # Nothing has set the FOO element so far
2252*0Sstevel@tonic-gate
2253*0Sstevel@tonic-gate    { local $tied_hash{FOO} = 'Bar' }
2254*0Sstevel@tonic-gate
2255*0Sstevel@tonic-gate    # This used to print, but not now.
2256*0Sstevel@tonic-gate    print "exists!\n" if exists $tied_hash{FOO};
2257*0Sstevel@tonic-gate
2258*0Sstevel@tonic-gateAs a side effect of this fix, tied hash interfaces B<must> define
2259*0Sstevel@tonic-gatethe EXISTS and DELETE methods.
2260*0Sstevel@tonic-gate
2261*0Sstevel@tonic-gate=item *
2262*0Sstevel@tonic-gate
2263*0Sstevel@tonic-gatemkdir() now ignores trailing slashes in the directory name,
2264*0Sstevel@tonic-gateas mandated by POSIX.
2265*0Sstevel@tonic-gate
2266*0Sstevel@tonic-gate=item *
2267*0Sstevel@tonic-gate
2268*0Sstevel@tonic-gateSome versions of glibc have a broken modfl().  This affects builds
2269*0Sstevel@tonic-gatewith C<-Duselongdouble>.  This version of Perl detects this brokenness
2270*0Sstevel@tonic-gateand has a workaround for it.  The glibc release 2.2.2 is known to have
2271*0Sstevel@tonic-gatefixed the modfl() bug.
2272*0Sstevel@tonic-gate
2273*0Sstevel@tonic-gate=item *
2274*0Sstevel@tonic-gate
2275*0Sstevel@tonic-gateModulus of unsigned numbers now works (4063328477 % 65535 used to
2276*0Sstevel@tonic-gatereturn 27406, instead of 27047). [561]
2277*0Sstevel@tonic-gate
2278*0Sstevel@tonic-gate=item *
2279*0Sstevel@tonic-gate
2280*0Sstevel@tonic-gateSome "not a number" warnings introduced in 5.6.0 eliminated to be
2281*0Sstevel@tonic-gatemore compatible with 5.005.  Infinity is now recognised as a number. [561]
2282*0Sstevel@tonic-gate
2283*0Sstevel@tonic-gate=item *
2284*0Sstevel@tonic-gate
2285*0Sstevel@tonic-gateNumeric conversions did not recognize changes in the string value
2286*0Sstevel@tonic-gateproperly in certain circumstances. [561]
2287*0Sstevel@tonic-gate
2288*0Sstevel@tonic-gate=item *
2289*0Sstevel@tonic-gate
2290*0Sstevel@tonic-gateAttributes (such as :shared) didn't work with our().
2291*0Sstevel@tonic-gate
2292*0Sstevel@tonic-gate=item *
2293*0Sstevel@tonic-gate
2294*0Sstevel@tonic-gateour() variables will not cause bogus "Variable will not stay shared"
2295*0Sstevel@tonic-gatewarnings. [561]
2296*0Sstevel@tonic-gate
2297*0Sstevel@tonic-gate=item *
2298*0Sstevel@tonic-gate
2299*0Sstevel@tonic-gate"our" variables of the same name declared in two sibling blocks
2300*0Sstevel@tonic-gateresulted in bogus warnings about "redeclaration" of the variables.
2301*0Sstevel@tonic-gateThe problem has been corrected. [561]
2302*0Sstevel@tonic-gate
2303*0Sstevel@tonic-gate=item *
2304*0Sstevel@tonic-gate
2305*0Sstevel@tonic-gatepack "Z" now correctly terminates the string with "\0".
2306*0Sstevel@tonic-gate
2307*0Sstevel@tonic-gate=item *
2308*0Sstevel@tonic-gate
2309*0Sstevel@tonic-gateFix password routines which in some shadow password platforms
2310*0Sstevel@tonic-gate(e.g. HP-UX) caused getpwent() to return every other entry.
2311*0Sstevel@tonic-gate
2312*0Sstevel@tonic-gate=item *
2313*0Sstevel@tonic-gate
2314*0Sstevel@tonic-gateThe PERL5OPT environment variable (for passing command line arguments
2315*0Sstevel@tonic-gateto Perl) didn't work for more than a single group of options. [561]
2316*0Sstevel@tonic-gate
2317*0Sstevel@tonic-gate=item *
2318*0Sstevel@tonic-gate
2319*0Sstevel@tonic-gatePERL5OPT with embedded spaces didn't work.
2320*0Sstevel@tonic-gate
2321*0Sstevel@tonic-gate=item *
2322*0Sstevel@tonic-gate
2323*0Sstevel@tonic-gateprintf() no longer resets the numeric locale to "C".
2324*0Sstevel@tonic-gate
2325*0Sstevel@tonic-gate=item *
2326*0Sstevel@tonic-gate
2327*0Sstevel@tonic-gateC<qw(a\\b)> now parses correctly as C<'a\\b'>: that is, as three
2328*0Sstevel@tonic-gatecharacters, not four. [561]
2329*0Sstevel@tonic-gate
2330*0Sstevel@tonic-gate=item *
2331*0Sstevel@tonic-gate
2332*0Sstevel@tonic-gatepos() did not return the correct value within s///ge in earlier
2333*0Sstevel@tonic-gateversions.  This is now handled correctly. [561]
2334*0Sstevel@tonic-gate
2335*0Sstevel@tonic-gate=item *
2336*0Sstevel@tonic-gate
2337*0Sstevel@tonic-gatePrinting quads (64-bit integers) with printf/sprintf now works
2338*0Sstevel@tonic-gatewithout the q L ll prefixes (assuming you are on a quad-capable platform).
2339*0Sstevel@tonic-gate
2340*0Sstevel@tonic-gate=item *
2341*0Sstevel@tonic-gate
2342*0Sstevel@tonic-gateRegular expressions on references and overloaded scalars now work. [561+]
2343*0Sstevel@tonic-gate
2344*0Sstevel@tonic-gate=item *
2345*0Sstevel@tonic-gate
2346*0Sstevel@tonic-gateRight-hand side magic (GMAGIC) could in many cases such as string
2347*0Sstevel@tonic-gateconcatenation be invoked too many times.
2348*0Sstevel@tonic-gate
2349*0Sstevel@tonic-gate=item *
2350*0Sstevel@tonic-gate
2351*0Sstevel@tonic-gatescalar() now forces scalar context even when used in void context.
2352*0Sstevel@tonic-gate
2353*0Sstevel@tonic-gate=item *
2354*0Sstevel@tonic-gate
2355*0Sstevel@tonic-gateSOCKS support is now much more robust.
2356*0Sstevel@tonic-gate
2357*0Sstevel@tonic-gate=item *
2358*0Sstevel@tonic-gate
2359*0Sstevel@tonic-gatesort() arguments are now compiled in the right wantarray context
2360*0Sstevel@tonic-gate(they were accidentally using the context of the sort() itself).
2361*0Sstevel@tonic-gateThe comparison block is now run in scalar context, and the arguments
2362*0Sstevel@tonic-gateto be sorted are always provided list context. [561]
2363*0Sstevel@tonic-gate
2364*0Sstevel@tonic-gate=item *
2365*0Sstevel@tonic-gate
2366*0Sstevel@tonic-gateChanged the POSIX character class C<[[:space:]]> to include the (very
2367*0Sstevel@tonic-gaterarely used) vertical tab character.  Added a new POSIX-ish character
2368*0Sstevel@tonic-gateclass C<[[:blank:]]> which stands for horizontal whitespace
2369*0Sstevel@tonic-gate(currently, the space and the tab).
2370*0Sstevel@tonic-gate
2371*0Sstevel@tonic-gate=item *
2372*0Sstevel@tonic-gate
2373*0Sstevel@tonic-gateThe tainting behaviour of sprintf() has been rationalized.  It does
2374*0Sstevel@tonic-gatenot taint the result of floating point formats anymore, making the
2375*0Sstevel@tonic-gatebehaviour consistent with that of string interpolation. [561]
2376*0Sstevel@tonic-gate
2377*0Sstevel@tonic-gate=item *
2378*0Sstevel@tonic-gate
2379*0Sstevel@tonic-gateSome cases of inconsistent taint propagation (such as within hash
2380*0Sstevel@tonic-gatevalues) have been fixed.
2381*0Sstevel@tonic-gate
2382*0Sstevel@tonic-gate=item *
2383*0Sstevel@tonic-gate
2384*0Sstevel@tonic-gateThe RE engine found in Perl 5.6.0 accidentally pessimised certain kinds
2385*0Sstevel@tonic-gateof simple pattern matches.  These are now handled better. [561]
2386*0Sstevel@tonic-gate
2387*0Sstevel@tonic-gate=item *
2388*0Sstevel@tonic-gate
2389*0Sstevel@tonic-gateRegular expression debug output (whether through C<use re 'debug'>
2390*0Sstevel@tonic-gateor via C<-Dr>) now looks better. [561]
2391*0Sstevel@tonic-gate
2392*0Sstevel@tonic-gate=item *
2393*0Sstevel@tonic-gate
2394*0Sstevel@tonic-gateMulti-line matches like C<"a\nxb\n" =~ /(?!\A)x/m> were flawed.  The
2395*0Sstevel@tonic-gatebug has been fixed. [561]
2396*0Sstevel@tonic-gate
2397*0Sstevel@tonic-gate=item *
2398*0Sstevel@tonic-gate
2399*0Sstevel@tonic-gateUse of $& could trigger a core dump under some situations.  This
2400*0Sstevel@tonic-gateis now avoided. [561]
2401*0Sstevel@tonic-gate
2402*0Sstevel@tonic-gate=item *
2403*0Sstevel@tonic-gate
2404*0Sstevel@tonic-gateThe regular expression captured submatches ($1, $2, ...) are now
2405*0Sstevel@tonic-gatemore consistently unset if the match fails, instead of leaving false
2406*0Sstevel@tonic-gatedata lying around in them. [561]
2407*0Sstevel@tonic-gate
2408*0Sstevel@tonic-gate=item *
2409*0Sstevel@tonic-gate
2410*0Sstevel@tonic-gatereadline() on files opened in "slurp" mode could return an extra
2411*0Sstevel@tonic-gate"" (blank line) at the end in certain situations.  This has been
2412*0Sstevel@tonic-gatecorrected. [561]
2413*0Sstevel@tonic-gate
2414*0Sstevel@tonic-gate=item *
2415*0Sstevel@tonic-gate
2416*0Sstevel@tonic-gateAutovivification of symbolic references of special variables described
2417*0Sstevel@tonic-gatein L<perlvar> (as in C<${$num}>) was accidentally disabled.  This works
2418*0Sstevel@tonic-gateagain now. [561]
2419*0Sstevel@tonic-gate
2420*0Sstevel@tonic-gate=item *
2421*0Sstevel@tonic-gate
2422*0Sstevel@tonic-gateSys::Syslog ignored the C<LOG_AUTH> constant.
2423*0Sstevel@tonic-gate
2424*0Sstevel@tonic-gate=item *
2425*0Sstevel@tonic-gate
2426*0Sstevel@tonic-gate$AUTOLOAD, sort(), lock(), and spawning subprocesses
2427*0Sstevel@tonic-gatein multiple threads simultaneously are now thread-safe.
2428*0Sstevel@tonic-gate
2429*0Sstevel@tonic-gate=item *
2430*0Sstevel@tonic-gate
2431*0Sstevel@tonic-gateTie::Array's SPLICE method was broken.
2432*0Sstevel@tonic-gate
2433*0Sstevel@tonic-gate=item *
2434*0Sstevel@tonic-gate
2435*0Sstevel@tonic-gateAllow a read-only string on the left-hand side of a non-modifying tr///.
2436*0Sstevel@tonic-gate
2437*0Sstevel@tonic-gate=item *
2438*0Sstevel@tonic-gate
2439*0Sstevel@tonic-gateIf C<STDERR> is tied, warnings caused by C<warn> and C<die> now
2440*0Sstevel@tonic-gatecorrectly pass to it.
2441*0Sstevel@tonic-gate
2442*0Sstevel@tonic-gate=item *
2443*0Sstevel@tonic-gate
2444*0Sstevel@tonic-gateSeveral Unicode fixes.
2445*0Sstevel@tonic-gate
2446*0Sstevel@tonic-gate=over 8
2447*0Sstevel@tonic-gate
2448*0Sstevel@tonic-gate=item *
2449*0Sstevel@tonic-gate
2450*0Sstevel@tonic-gateBOMs (byte order marks) at the beginning of Perl files
2451*0Sstevel@tonic-gate(scripts, modules) should now be transparently skipped.
2452*0Sstevel@tonic-gateUTF-16 and UCS-2 encoded Perl files should now be read correctly.
2453*0Sstevel@tonic-gate
2454*0Sstevel@tonic-gate=item *
2455*0Sstevel@tonic-gate
2456*0Sstevel@tonic-gateThe character tables have been updated to Unicode 3.2.0.
2457*0Sstevel@tonic-gate
2458*0Sstevel@tonic-gate=item *
2459*0Sstevel@tonic-gate
2460*0Sstevel@tonic-gateComparing with utf8 data does not magically upgrade non-utf8 data
2461*0Sstevel@tonic-gateinto utf8.  (This was a problem for example if you were mixing data
2462*0Sstevel@tonic-gatefrom I/O and Unicode data: your output might have got magically encoded
2463*0Sstevel@tonic-gateas UTF-8.)
2464*0Sstevel@tonic-gate
2465*0Sstevel@tonic-gate=item *
2466*0Sstevel@tonic-gate
2467*0Sstevel@tonic-gateGenerating illegal Unicode code points such as U+FFFE, or the UTF-16
2468*0Sstevel@tonic-gatesurrogates, now also generates an optional warning.
2469*0Sstevel@tonic-gate
2470*0Sstevel@tonic-gate=item *
2471*0Sstevel@tonic-gate
2472*0Sstevel@tonic-gateC<IsAlnum>, C<IsAlpha>, and C<IsWord> now match titlecase.
2473*0Sstevel@tonic-gate
2474*0Sstevel@tonic-gate=item *
2475*0Sstevel@tonic-gate
2476*0Sstevel@tonic-gateConcatenation with the C<.> operator or via variable interpolation,
2477*0Sstevel@tonic-gateC<eq>, C<substr>, C<reverse>, C<quotemeta>, the C<x> operator,
2478*0Sstevel@tonic-gatesubstitution with C<s///>, single-quoted UTF-8, should now work.
2479*0Sstevel@tonic-gate
2480*0Sstevel@tonic-gate=item *
2481*0Sstevel@tonic-gate
2482*0Sstevel@tonic-gateThe C<tr///> operator now works.  Note that the C<tr///CU>
2483*0Sstevel@tonic-gatefunctionality has been removed (but see pack('U0', ...)).
2484*0Sstevel@tonic-gate
2485*0Sstevel@tonic-gate=item *
2486*0Sstevel@tonic-gate
2487*0Sstevel@tonic-gateC<eval "v200"> now works.
2488*0Sstevel@tonic-gate
2489*0Sstevel@tonic-gate=item *
2490*0Sstevel@tonic-gate
2491*0Sstevel@tonic-gatePerl 5.6.0 parsed m/\x{ab}/ incorrectly, leading to spurious warnings.
2492*0Sstevel@tonic-gateThis has been corrected. [561]
2493*0Sstevel@tonic-gate
2494*0Sstevel@tonic-gate=item *
2495*0Sstevel@tonic-gate
2496*0Sstevel@tonic-gateZero entries were missing from the Unicode classes such as C<IsDigit>.
2497*0Sstevel@tonic-gate
2498*0Sstevel@tonic-gate=back
2499*0Sstevel@tonic-gate
2500*0Sstevel@tonic-gate=item *
2501*0Sstevel@tonic-gate
2502*0Sstevel@tonic-gateLarge unsigned numbers (those above 2**31) could sometimes lose their
2503*0Sstevel@tonic-gateunsignedness, causing bogus results in arithmetic operations. [561]
2504*0Sstevel@tonic-gate
2505*0Sstevel@tonic-gate=item *
2506*0Sstevel@tonic-gate
2507*0Sstevel@tonic-gateThe Perl parser has been stress tested using both random input and
2508*0Sstevel@tonic-gateMarkov chain input and the few found crashes and lockups have been
2509*0Sstevel@tonic-gatefixed.
2510*0Sstevel@tonic-gate
2511*0Sstevel@tonic-gate=back
2512*0Sstevel@tonic-gate
2513*0Sstevel@tonic-gate=head2 Platform Specific Changes and Fixes
2514*0Sstevel@tonic-gate
2515*0Sstevel@tonic-gate=over 4
2516*0Sstevel@tonic-gate
2517*0Sstevel@tonic-gate=item *
2518*0Sstevel@tonic-gate
2519*0Sstevel@tonic-gateBSDI 4.*
2520*0Sstevel@tonic-gate
2521*0Sstevel@tonic-gatePerl now works on post-4.0 BSD/OSes.
2522*0Sstevel@tonic-gate
2523*0Sstevel@tonic-gate=item *
2524*0Sstevel@tonic-gate
2525*0Sstevel@tonic-gateAll BSDs
2526*0Sstevel@tonic-gate
2527*0Sstevel@tonic-gateSetting C<$0> now works (as much as possible; see L<perlvar> for details).
2528*0Sstevel@tonic-gate
2529*0Sstevel@tonic-gate=item *
2530*0Sstevel@tonic-gate
2531*0Sstevel@tonic-gateCygwin
2532*0Sstevel@tonic-gate
2533*0Sstevel@tonic-gateNumerous updates; currently synchronised with Cygwin 1.3.10.
2534*0Sstevel@tonic-gate
2535*0Sstevel@tonic-gate=item *
2536*0Sstevel@tonic-gate
2537*0Sstevel@tonic-gatePreviously DYNIX/ptx had problems in its Configure probe for non-blocking I/O.
2538*0Sstevel@tonic-gate
2539*0Sstevel@tonic-gate=item *
2540*0Sstevel@tonic-gate
2541*0Sstevel@tonic-gateEPOC
2542*0Sstevel@tonic-gate
2543*0Sstevel@tonic-gateEPOC now better supported.  See README.epoc. [561]
2544*0Sstevel@tonic-gate
2545*0Sstevel@tonic-gate=item *
2546*0Sstevel@tonic-gate
2547*0Sstevel@tonic-gateFreeBSD 3.*
2548*0Sstevel@tonic-gate
2549*0Sstevel@tonic-gatePerl now works on post-3.0 FreeBSDs.
2550*0Sstevel@tonic-gate
2551*0Sstevel@tonic-gate=item *
2552*0Sstevel@tonic-gate
2553*0Sstevel@tonic-gateHP-UX
2554*0Sstevel@tonic-gate
2555*0Sstevel@tonic-gateREADME.hpux updated; C<Configure -Duse64bitall> now works;
2556*0Sstevel@tonic-gatenow uses HP-UX malloc instead of Perl malloc.
2557*0Sstevel@tonic-gate
2558*0Sstevel@tonic-gate=item *
2559*0Sstevel@tonic-gate
2560*0Sstevel@tonic-gateIRIX
2561*0Sstevel@tonic-gate
2562*0Sstevel@tonic-gateNumerous compilation flag and hint enhancements; accidental mixing
2563*0Sstevel@tonic-gateof 32-bit and 64-bit libraries (a doomed attempt) made much harder.
2564*0Sstevel@tonic-gate
2565*0Sstevel@tonic-gate=item *
2566*0Sstevel@tonic-gate
2567*0Sstevel@tonic-gateLinux
2568*0Sstevel@tonic-gate
2569*0Sstevel@tonic-gate=over 8
2570*0Sstevel@tonic-gate
2571*0Sstevel@tonic-gate=item *
2572*0Sstevel@tonic-gate
2573*0Sstevel@tonic-gateLong doubles should now work (see INSTALL). [561]
2574*0Sstevel@tonic-gate
2575*0Sstevel@tonic-gate=item *
2576*0Sstevel@tonic-gate
2577*0Sstevel@tonic-gateLinux previously had problems related to sockaddrlen when using
2578*0Sstevel@tonic-gateaccept(), recvfrom() (in Perl: recv()), getpeername(), and
2579*0Sstevel@tonic-gategetsockname().
2580*0Sstevel@tonic-gate
2581*0Sstevel@tonic-gate=back
2582*0Sstevel@tonic-gate
2583*0Sstevel@tonic-gate=item *
2584*0Sstevel@tonic-gate
2585*0Sstevel@tonic-gateMac OS Classic
2586*0Sstevel@tonic-gate
2587*0Sstevel@tonic-gateCompilation of the standard Perl distribution in Mac OS Classic should
2588*0Sstevel@tonic-gatenow work if you have the Metrowerks development environment and the
2589*0Sstevel@tonic-gatemissing Mac-specific toolkit bits.  Contact the macperl mailing list
2590*0Sstevel@tonic-gatefor details.
2591*0Sstevel@tonic-gate
2592*0Sstevel@tonic-gate=item *
2593*0Sstevel@tonic-gate
2594*0Sstevel@tonic-gateMPE/iX
2595*0Sstevel@tonic-gate
2596*0Sstevel@tonic-gateMPE/iX update after Perl 5.6.0.  See README.mpeix. [561]
2597*0Sstevel@tonic-gate
2598*0Sstevel@tonic-gate=item *
2599*0Sstevel@tonic-gate
2600*0Sstevel@tonic-gateNetBSD/threads: try installing the GNU pth (should be in the
2601*0Sstevel@tonic-gatepackages collection, or http://www.gnu.org/software/pth/),
2602*0Sstevel@tonic-gateand Configure with -Duseithreads.
2603*0Sstevel@tonic-gate
2604*0Sstevel@tonic-gate=item *
2605*0Sstevel@tonic-gate
2606*0Sstevel@tonic-gateNetBSD/sparc
2607*0Sstevel@tonic-gate
2608*0Sstevel@tonic-gatePerl now works on NetBSD/sparc.
2609*0Sstevel@tonic-gate
2610*0Sstevel@tonic-gate=item *
2611*0Sstevel@tonic-gate
2612*0Sstevel@tonic-gateOS/2
2613*0Sstevel@tonic-gate
2614*0Sstevel@tonic-gateNow works with usethreads (see INSTALL). [561]
2615*0Sstevel@tonic-gate
2616*0Sstevel@tonic-gate=item *
2617*0Sstevel@tonic-gate
2618*0Sstevel@tonic-gateSolaris
2619*0Sstevel@tonic-gate
2620*0Sstevel@tonic-gate64-bitness using the Sun Workshop compiler now works.
2621*0Sstevel@tonic-gate
2622*0Sstevel@tonic-gate=item *
2623*0Sstevel@tonic-gate
2624*0Sstevel@tonic-gateStratus VOS
2625*0Sstevel@tonic-gate
2626*0Sstevel@tonic-gateThe native build method requires at least VOS Release 14.5.0
2627*0Sstevel@tonic-gateand GNU C++/GNU Tools 2.0.1 or later.  The Perl pack function
2628*0Sstevel@tonic-gatenow maps overflowed values to +infinity and underflowed values
2629*0Sstevel@tonic-gateto -infinity.
2630*0Sstevel@tonic-gate
2631*0Sstevel@tonic-gate=item *
2632*0Sstevel@tonic-gate
2633*0Sstevel@tonic-gateTru64 (aka Digital UNIX, aka DEC OSF/1)
2634*0Sstevel@tonic-gate
2635*0Sstevel@tonic-gateThe operating system version letter now recorded in $Config{osvers}.
2636*0Sstevel@tonic-gateAllow compiling with gcc (previously explicitly forbidden).  Compiling
2637*0Sstevel@tonic-gatewith gcc still not recommended because buggy code results, even with
2638*0Sstevel@tonic-gategcc 2.95.2.
2639*0Sstevel@tonic-gate
2640*0Sstevel@tonic-gate=item *
2641*0Sstevel@tonic-gate
2642*0Sstevel@tonic-gateUnicos
2643*0Sstevel@tonic-gate
2644*0Sstevel@tonic-gateFixed various alignment problems that lead into core dumps either
2645*0Sstevel@tonic-gateduring build or later; no longer dies on math errors at runtime;
2646*0Sstevel@tonic-gatenow using full quad integers (64 bits), previously was using
2647*0Sstevel@tonic-gateonly 46 bit integers for speed.
2648*0Sstevel@tonic-gate
2649*0Sstevel@tonic-gate=item *
2650*0Sstevel@tonic-gate
2651*0Sstevel@tonic-gateVMS
2652*0Sstevel@tonic-gate
2653*0Sstevel@tonic-gateSee L</"Socket Extension Dynamic in VMS"> and L</"IEEE-format Floating Point
2654*0Sstevel@tonic-gateDefault on OpenVMS Alpha"> for important changes not otherwise listed here.
2655*0Sstevel@tonic-gate
2656*0Sstevel@tonic-gatechdir() now works better despite a CRT bug; now works with MULTIPLICITY
2657*0Sstevel@tonic-gate(see INSTALL); now works with Perl's malloc.
2658*0Sstevel@tonic-gate
2659*0Sstevel@tonic-gateThe tainting of C<%ENV> elements via C<keys> or C<values> was previously
2660*0Sstevel@tonic-gateunimplemented.  It now works as documented.
2661*0Sstevel@tonic-gate
2662*0Sstevel@tonic-gateThe C<waitpid> emulation has been improved.  The worst bug (now fixed)
2663*0Sstevel@tonic-gatewas that a pid of -1 would cause a wildcard search of all processes on
2664*0Sstevel@tonic-gatethe system.
2665*0Sstevel@tonic-gate
2666*0Sstevel@tonic-gatePOSIX-style signals are now emulated much better on VMS versions prior
2667*0Sstevel@tonic-gateto 7.0.
2668*0Sstevel@tonic-gate
2669*0Sstevel@tonic-gateThe C<system> function and backticks operator have improved
2670*0Sstevel@tonic-gatefunctionality and better error handling. [561]
2671*0Sstevel@tonic-gate
2672*0Sstevel@tonic-gateFile access tests now use current process privileges rather than the
2673*0Sstevel@tonic-gateuser's default privileges, which could sometimes result in a mismatch
2674*0Sstevel@tonic-gatebetween reported access and actual access.  This improvement is only
2675*0Sstevel@tonic-gateavailable on VMS v6.0 and later.
2676*0Sstevel@tonic-gate
2677*0Sstevel@tonic-gateThere is a new C<kill> implementation based on C<sys$sigprc> that allows
2678*0Sstevel@tonic-gateolder VMS systems (pre-7.0) to use C<kill> to send signals rather than
2679*0Sstevel@tonic-gatesimply force exit.  This implementation also allows later systems to
2680*0Sstevel@tonic-gatecall C<kill> from within a signal handler.
2681*0Sstevel@tonic-gate
2682*0Sstevel@tonic-gateIterative logical name translations are now limited to 10 iterations in
2683*0Sstevel@tonic-gateimitation of SHOW LOGICAL and other OpenVMS facilities.
2684*0Sstevel@tonic-gate
2685*0Sstevel@tonic-gate=item *
2686*0Sstevel@tonic-gate
2687*0Sstevel@tonic-gateWindows
2688*0Sstevel@tonic-gate
2689*0Sstevel@tonic-gate=over 8
2690*0Sstevel@tonic-gate
2691*0Sstevel@tonic-gate=item *
2692*0Sstevel@tonic-gate
2693*0Sstevel@tonic-gateSignal handling now works better than it used to.  It is now implemented
2694*0Sstevel@tonic-gateusing a Windows message loop, and is therefore less prone to random
2695*0Sstevel@tonic-gatecrashes.
2696*0Sstevel@tonic-gate
2697*0Sstevel@tonic-gate=item *
2698*0Sstevel@tonic-gate
2699*0Sstevel@tonic-gatefork() emulation is now more robust, but still continues to have a few
2700*0Sstevel@tonic-gateesoteric bugs and caveats.  See L<perlfork> for details. [561+]
2701*0Sstevel@tonic-gate
2702*0Sstevel@tonic-gate=item *
2703*0Sstevel@tonic-gate
2704*0Sstevel@tonic-gateA failed (pseudo)fork now returns undef and sets errno to EAGAIN. [561]
2705*0Sstevel@tonic-gate
2706*0Sstevel@tonic-gate=item *
2707*0Sstevel@tonic-gate
2708*0Sstevel@tonic-gateThe following modules now work on Windows:
2709*0Sstevel@tonic-gate
2710*0Sstevel@tonic-gate    ExtUtils::Embed         [561]
2711*0Sstevel@tonic-gate    IO::Pipe
2712*0Sstevel@tonic-gate    IO::Poll
2713*0Sstevel@tonic-gate    Net::Ping
2714*0Sstevel@tonic-gate
2715*0Sstevel@tonic-gate=item *
2716*0Sstevel@tonic-gate
2717*0Sstevel@tonic-gateIO::File::new_tmpfile() is no longer limited to 32767 invocations
2718*0Sstevel@tonic-gateper-process.
2719*0Sstevel@tonic-gate
2720*0Sstevel@tonic-gate=item *
2721*0Sstevel@tonic-gate
2722*0Sstevel@tonic-gateBetter chdir() return value for a non-existent directory.
2723*0Sstevel@tonic-gate
2724*0Sstevel@tonic-gate=item *
2725*0Sstevel@tonic-gate
2726*0Sstevel@tonic-gateCompiling perl using the 64-bit Platform SDK tools is now supported.
2727*0Sstevel@tonic-gate
2728*0Sstevel@tonic-gate=item *
2729*0Sstevel@tonic-gate
2730*0Sstevel@tonic-gateThe Win32::SetChildShowWindow() builtin can be used to control the
2731*0Sstevel@tonic-gatevisibility of windows created by child processes.  See L<Win32> for
2732*0Sstevel@tonic-gatedetails.
2733*0Sstevel@tonic-gate
2734*0Sstevel@tonic-gate=item *
2735*0Sstevel@tonic-gate
2736*0Sstevel@tonic-gateNon-blocking waits for child processes (or pseudo-processes) are
2737*0Sstevel@tonic-gatesupported via C<waitpid($pid, &POSIX::WNOHANG)>.
2738*0Sstevel@tonic-gate
2739*0Sstevel@tonic-gate=item *
2740*0Sstevel@tonic-gate
2741*0Sstevel@tonic-gateThe behavior of system() with multiple arguments has been rationalized.
2742*0Sstevel@tonic-gateEach unquoted argument will be automatically quoted to protect whitespace,
2743*0Sstevel@tonic-gateand any existing whitespace in the arguments will be preserved.  This
2744*0Sstevel@tonic-gateimproves the portability of system(@args) by avoiding the need for
2745*0Sstevel@tonic-gateWindows C<cmd> shell specific quoting in perl programs.
2746*0Sstevel@tonic-gate
2747*0Sstevel@tonic-gateNote that this means that some scripts that may have relied on earlier
2748*0Sstevel@tonic-gatebuggy behavior may no longer work correctly.  For example,
2749*0Sstevel@tonic-gateC<system("nmake /nologo", @args)> will now attempt to run the file
2750*0Sstevel@tonic-gateC<nmake /nologo> and will fail when such a file isn't found.
2751*0Sstevel@tonic-gateOn the other hand, perl will now execute code such as
2752*0Sstevel@tonic-gateC<system("c:/Program Files/MyApp/foo.exe", @args)> correctly.
2753*0Sstevel@tonic-gate
2754*0Sstevel@tonic-gate=item *
2755*0Sstevel@tonic-gate
2756*0Sstevel@tonic-gateThe perl header files no longer suppress common warnings from the
2757*0Sstevel@tonic-gateMicrosoft Visual C++ compiler.  This means that additional warnings may
2758*0Sstevel@tonic-gatenow show up when compiling XS code.
2759*0Sstevel@tonic-gate
2760*0Sstevel@tonic-gate=item *
2761*0Sstevel@tonic-gate
2762*0Sstevel@tonic-gateBorland C++ v5.5 is now a supported compiler that can build Perl.
2763*0Sstevel@tonic-gateHowever, the generated binaries continue to be incompatible with those
2764*0Sstevel@tonic-gategenerated by the other supported compilers (GCC and Visual C++). [561]
2765*0Sstevel@tonic-gate
2766*0Sstevel@tonic-gate=item *
2767*0Sstevel@tonic-gate
2768*0Sstevel@tonic-gateDuping socket handles with open(F, ">&MYSOCK") now works under Windows 9x.
2769*0Sstevel@tonic-gate[561]
2770*0Sstevel@tonic-gate
2771*0Sstevel@tonic-gate=item *
2772*0Sstevel@tonic-gate
2773*0Sstevel@tonic-gateCurrent directory entries in %ENV are now correctly propagated to child
2774*0Sstevel@tonic-gateprocesses. [561]
2775*0Sstevel@tonic-gate
2776*0Sstevel@tonic-gate=item *
2777*0Sstevel@tonic-gate
2778*0Sstevel@tonic-gateNew %ENV entries now propagate to subprocesses. [561]
2779*0Sstevel@tonic-gate
2780*0Sstevel@tonic-gate=item *
2781*0Sstevel@tonic-gate
2782*0Sstevel@tonic-gateWin32::GetCwd() correctly returns C:\ instead of C: when at the drive root.
2783*0Sstevel@tonic-gateOther bugs in chdir() and Cwd::cwd() have also been fixed. [561]
2784*0Sstevel@tonic-gate
2785*0Sstevel@tonic-gate=item *
2786*0Sstevel@tonic-gate
2787*0Sstevel@tonic-gateThe makefiles now default to the features enabled in ActiveState ActivePerl
2788*0Sstevel@tonic-gate(a popular Win32 binary distribution). [561]
2789*0Sstevel@tonic-gate
2790*0Sstevel@tonic-gate=item *
2791*0Sstevel@tonic-gate
2792*0Sstevel@tonic-gateHTML files will now be installed in c:\perl\html instead of
2793*0Sstevel@tonic-gatec:\perl\lib\pod\html
2794*0Sstevel@tonic-gate
2795*0Sstevel@tonic-gate=item *
2796*0Sstevel@tonic-gate
2797*0Sstevel@tonic-gateREG_EXPAND_SZ keys are now allowed in registry settings used by perl. [561]
2798*0Sstevel@tonic-gate
2799*0Sstevel@tonic-gate=item *
2800*0Sstevel@tonic-gate
2801*0Sstevel@tonic-gateCan now send() from all threads, not just the first one. [561]
2802*0Sstevel@tonic-gate
2803*0Sstevel@tonic-gate=item *
2804*0Sstevel@tonic-gate
2805*0Sstevel@tonic-gateExtUtils::MakeMaker now uses $ENV{LIB} to search for libraries. [561]
2806*0Sstevel@tonic-gate
2807*0Sstevel@tonic-gate=item *
2808*0Sstevel@tonic-gate
2809*0Sstevel@tonic-gateLess stack reserved per thread so that more threads can run
2810*0Sstevel@tonic-gateconcurrently. (Still 16M per thread.) [561]
2811*0Sstevel@tonic-gate
2812*0Sstevel@tonic-gate=item *
2813*0Sstevel@tonic-gate
2814*0Sstevel@tonic-gateC<< File::Spec->tmpdir() >> now prefers C:/temp over /tmp
2815*0Sstevel@tonic-gate(works better when perl is running as service).
2816*0Sstevel@tonic-gate
2817*0Sstevel@tonic-gate=item *
2818*0Sstevel@tonic-gate
2819*0Sstevel@tonic-gateBetter UNC path handling under ithreads. [561]
2820*0Sstevel@tonic-gate
2821*0Sstevel@tonic-gate=item *
2822*0Sstevel@tonic-gate
2823*0Sstevel@tonic-gatewait(), waitpid(), and backticks now return the correct exit status
2824*0Sstevel@tonic-gateunder Windows 9x. [561]
2825*0Sstevel@tonic-gate
2826*0Sstevel@tonic-gate=item *
2827*0Sstevel@tonic-gate
2828*0Sstevel@tonic-gateA socket handle leak in accept() has been fixed. [561]
2829*0Sstevel@tonic-gate
2830*0Sstevel@tonic-gate=back
2831*0Sstevel@tonic-gate
2832*0Sstevel@tonic-gate=back
2833*0Sstevel@tonic-gate
2834*0Sstevel@tonic-gate=head1 New or Changed Diagnostics
2835*0Sstevel@tonic-gate
2836*0Sstevel@tonic-gatePlease see L<perldiag> for more details.
2837*0Sstevel@tonic-gate
2838*0Sstevel@tonic-gate=over 4
2839*0Sstevel@tonic-gate
2840*0Sstevel@tonic-gate=item *
2841*0Sstevel@tonic-gate
2842*0Sstevel@tonic-gateAmbiguous range in the transliteration operator (like a-z-9) now
2843*0Sstevel@tonic-gategives a warning.
2844*0Sstevel@tonic-gate
2845*0Sstevel@tonic-gate=item *
2846*0Sstevel@tonic-gate
2847*0Sstevel@tonic-gatechdir("") and chdir(undef) now give a deprecation warning because they
2848*0Sstevel@tonic-gatecause a possible unintentional chdir to the home directory.
2849*0Sstevel@tonic-gateSay chdir() if you really mean that.
2850*0Sstevel@tonic-gate
2851*0Sstevel@tonic-gate=item *
2852*0Sstevel@tonic-gate
2853*0Sstevel@tonic-gateTwo new debugging options have been added: if you have compiled your
2854*0Sstevel@tonic-gatePerl with debugging, you can use the -DT [561] and -DR options to trace
2855*0Sstevel@tonic-gatetokenising and to add reference counts to displaying variables,
2856*0Sstevel@tonic-gaterespectively.
2857*0Sstevel@tonic-gate
2858*0Sstevel@tonic-gate=item *
2859*0Sstevel@tonic-gate
2860*0Sstevel@tonic-gateThe lexical warnings category "deprecated" is no longer a sub-category
2861*0Sstevel@tonic-gateof the "syntax" category. It is now a top-level category in its own
2862*0Sstevel@tonic-gateright.
2863*0Sstevel@tonic-gate
2864*0Sstevel@tonic-gate=item *
2865*0Sstevel@tonic-gate
2866*0Sstevel@tonic-gateUnadorned dump() will now give a warning suggesting to
2867*0Sstevel@tonic-gateuse explicit CORE::dump() if that's what really is meant.
2868*0Sstevel@tonic-gate
2869*0Sstevel@tonic-gate=item *
2870*0Sstevel@tonic-gate
2871*0Sstevel@tonic-gateThe "Unrecognized escape" warning has been extended to include C<\8>,
2872*0Sstevel@tonic-gateC<\9>, and C<\_>.  There is no need to escape any of the C<\w> characters.
2873*0Sstevel@tonic-gate
2874*0Sstevel@tonic-gate=item *
2875*0Sstevel@tonic-gate
2876*0Sstevel@tonic-gateAll regular expression compilation error messages are now hopefully
2877*0Sstevel@tonic-gateeasier to understand both because the error message now comes before
2878*0Sstevel@tonic-gatethe failed regex and because the point of failure is now clearly
2879*0Sstevel@tonic-gatemarked by a C<E<lt>-- HERE> marker.
2880*0Sstevel@tonic-gate
2881*0Sstevel@tonic-gate=item *
2882*0Sstevel@tonic-gate
2883*0Sstevel@tonic-gateVarious I/O (and socket) functions like binmode(), close(), and so
2884*0Sstevel@tonic-gateforth now more consistently warn if they are used illogically either
2885*0Sstevel@tonic-gateon a yet unopened or on an already closed filehandle (or socket).
2886*0Sstevel@tonic-gate
2887*0Sstevel@tonic-gate=item *
2888*0Sstevel@tonic-gate
2889*0Sstevel@tonic-gateUsing lstat() on a filehandle now gives a warning.  (It's a non-sensical
2890*0Sstevel@tonic-gatething to do.)
2891*0Sstevel@tonic-gate
2892*0Sstevel@tonic-gate=item *
2893*0Sstevel@tonic-gate
2894*0Sstevel@tonic-gateThe C<-M> and C<-m> options now warn if you didn't supply the module name.
2895*0Sstevel@tonic-gate
2896*0Sstevel@tonic-gate=item *
2897*0Sstevel@tonic-gate
2898*0Sstevel@tonic-gateIf you in C<use> specify a required minimum version, modules matching
2899*0Sstevel@tonic-gatethe name and but not defining a $VERSION will cause a fatal failure.
2900*0Sstevel@tonic-gate
2901*0Sstevel@tonic-gate=item *
2902*0Sstevel@tonic-gate
2903*0Sstevel@tonic-gateUsing negative offset for vec() in lvalue context is now a warnable offense.
2904*0Sstevel@tonic-gate
2905*0Sstevel@tonic-gate=item *
2906*0Sstevel@tonic-gate
2907*0Sstevel@tonic-gateOdd number of arguments to overload::constant now elicits a warning.
2908*0Sstevel@tonic-gate
2909*0Sstevel@tonic-gate=item *
2910*0Sstevel@tonic-gate
2911*0Sstevel@tonic-gateOdd number of elements in anonymous hash now elicits a warning.
2912*0Sstevel@tonic-gate
2913*0Sstevel@tonic-gate=item *
2914*0Sstevel@tonic-gate
2915*0Sstevel@tonic-gateThe various "opened only for", "on closed", "never opened" warnings
2916*0Sstevel@tonic-gatedrop the C<main::> prefix for filehandles in the C<main> package,
2917*0Sstevel@tonic-gatefor example C<STDIN> instead of C<main::STDIN>.
2918*0Sstevel@tonic-gate
2919*0Sstevel@tonic-gate=item *
2920*0Sstevel@tonic-gate
2921*0Sstevel@tonic-gateSubroutine prototypes are now checked more carefully, you may
2922*0Sstevel@tonic-gateget warnings for example if you have used non-prototype characters.
2923*0Sstevel@tonic-gate
2924*0Sstevel@tonic-gate=item *
2925*0Sstevel@tonic-gate
2926*0Sstevel@tonic-gateIf an attempt to use a (non-blessed) reference as an array index
2927*0Sstevel@tonic-gateis made, a warning is given.
2928*0Sstevel@tonic-gate
2929*0Sstevel@tonic-gate=item *
2930*0Sstevel@tonic-gate
2931*0Sstevel@tonic-gateC<push @a;> and C<unshift @a;> (with no values to push or unshift)
2932*0Sstevel@tonic-gatenow give a warning.  This may be a problem for generated and evaled
2933*0Sstevel@tonic-gatecode.
2934*0Sstevel@tonic-gate
2935*0Sstevel@tonic-gate=item *
2936*0Sstevel@tonic-gate
2937*0Sstevel@tonic-gateIf you try to L<perlfunc/pack> a number less than 0 or larger than 255
2938*0Sstevel@tonic-gateusing the C<"C"> format you will get an optional warning.  Similarly
2939*0Sstevel@tonic-gatefor the C<"c"> format and a number less than -128 or more than 127.
2940*0Sstevel@tonic-gate
2941*0Sstevel@tonic-gate=item *
2942*0Sstevel@tonic-gate
2943*0Sstevel@tonic-gatepack C<P> format now demands an explicit size.
2944*0Sstevel@tonic-gate
2945*0Sstevel@tonic-gate=item *
2946*0Sstevel@tonic-gate
2947*0Sstevel@tonic-gateunpack C<w> now warns of unterminated compressed integers.
2948*0Sstevel@tonic-gate
2949*0Sstevel@tonic-gate=item *
2950*0Sstevel@tonic-gate
2951*0Sstevel@tonic-gateWarnings relating to the use of PerlIO have been added.
2952*0Sstevel@tonic-gate
2953*0Sstevel@tonic-gate=item *
2954*0Sstevel@tonic-gate
2955*0Sstevel@tonic-gateCertain regex modifiers such as C<(?o)> make sense only if applied to
2956*0Sstevel@tonic-gatethe entire regex.  You will get an optional warning if you try to do
2957*0Sstevel@tonic-gateotherwise.
2958*0Sstevel@tonic-gate
2959*0Sstevel@tonic-gate=item *
2960*0Sstevel@tonic-gate
2961*0Sstevel@tonic-gateVariable length lookbehind has not yet been implemented, trying to
2962*0Sstevel@tonic-gateuse it will tell that.
2963*0Sstevel@tonic-gate
2964*0Sstevel@tonic-gate=item *
2965*0Sstevel@tonic-gate
2966*0Sstevel@tonic-gateUsing arrays or hashes as references (e.g. C<< %foo->{bar} >>
2967*0Sstevel@tonic-gatehas been deprecated for a while.  Now you will get an optional warning.
2968*0Sstevel@tonic-gate
2969*0Sstevel@tonic-gate=item *
2970*0Sstevel@tonic-gate
2971*0Sstevel@tonic-gateWarnings relating to the use of the new restricted hashes feature
2972*0Sstevel@tonic-gatehave been added.
2973*0Sstevel@tonic-gate
2974*0Sstevel@tonic-gate=item *
2975*0Sstevel@tonic-gate
2976*0Sstevel@tonic-gateSelf-ties of arrays and hashes are not supported and fatal errors
2977*0Sstevel@tonic-gatewill happen even at an attempt to do so.
2978*0Sstevel@tonic-gate
2979*0Sstevel@tonic-gate=item *
2980*0Sstevel@tonic-gate
2981*0Sstevel@tonic-gateUsing C<sort> in scalar context now issues an optional warning.
2982*0Sstevel@tonic-gateThis didn't do anything useful, as the sort was not performed.
2983*0Sstevel@tonic-gate
2984*0Sstevel@tonic-gate=item *
2985*0Sstevel@tonic-gate
2986*0Sstevel@tonic-gateUsing the /g modifier in split() is meaningless and will cause a warning.
2987*0Sstevel@tonic-gate
2988*0Sstevel@tonic-gate=item *
2989*0Sstevel@tonic-gate
2990*0Sstevel@tonic-gateUsing splice() past the end of an array now causes a warning.
2991*0Sstevel@tonic-gate
2992*0Sstevel@tonic-gate=item *
2993*0Sstevel@tonic-gate
2994*0Sstevel@tonic-gateMalformed Unicode encodings (UTF-8 and UTF-16) cause a lot of warnings,
2995*0Sstevel@tonic-gatead doestrying to use UTF-16 surrogates (which are unimplemented).
2996*0Sstevel@tonic-gate
2997*0Sstevel@tonic-gate=item *
2998*0Sstevel@tonic-gate
2999*0Sstevel@tonic-gateTrying to use Unicode characters on an I/O stream without marking the
3000*0Sstevel@tonic-gatestream's encoding (using open() or binmode()) will cause "Wide character"
3001*0Sstevel@tonic-gatewarnings.
3002*0Sstevel@tonic-gate
3003*0Sstevel@tonic-gate=item *
3004*0Sstevel@tonic-gate
3005*0Sstevel@tonic-gateUse of v-strings in use/require causes a (backward) portability warning.
3006*0Sstevel@tonic-gate
3007*0Sstevel@tonic-gate=item *
3008*0Sstevel@tonic-gate
3009*0Sstevel@tonic-gateWarnings relating to the use interpreter threads and their shared data
3010*0Sstevel@tonic-gatehave been added.
3011*0Sstevel@tonic-gate
3012*0Sstevel@tonic-gate=back
3013*0Sstevel@tonic-gate
3014*0Sstevel@tonic-gate=head1 Changed Internals
3015*0Sstevel@tonic-gate
3016*0Sstevel@tonic-gate=over 4
3017*0Sstevel@tonic-gate
3018*0Sstevel@tonic-gate=item *
3019*0Sstevel@tonic-gate
3020*0Sstevel@tonic-gatePerlIO is now the default.
3021*0Sstevel@tonic-gate
3022*0Sstevel@tonic-gate=item *
3023*0Sstevel@tonic-gate
3024*0Sstevel@tonic-gateperlapi.pod (a companion to perlguts) now attempts to document the
3025*0Sstevel@tonic-gateinternal API.
3026*0Sstevel@tonic-gate
3027*0Sstevel@tonic-gate=item *
3028*0Sstevel@tonic-gate
3029*0Sstevel@tonic-gateYou can now build a really minimal perl called microperl.
3030*0Sstevel@tonic-gateBuilding microperl does not require even running Configure;
3031*0Sstevel@tonic-gateC<make -f Makefile.micro> should be enough.  Beware: microperl makes
3032*0Sstevel@tonic-gatemany assumptions, some of which may be too bold; the resulting
3033*0Sstevel@tonic-gateexecutable may crash or otherwise misbehave in wondrous ways.
3034*0Sstevel@tonic-gateFor careful hackers only.
3035*0Sstevel@tonic-gate
3036*0Sstevel@tonic-gate=item *
3037*0Sstevel@tonic-gate
3038*0Sstevel@tonic-gateAdded rsignal(), whichsig(), do_join(), op_clear, op_null,
3039*0Sstevel@tonic-gateptr_table_clear(), ptr_table_free(), sv_setref_uv(), and several UTF-8
3040*0Sstevel@tonic-gateinterfaces to the publicised API.  For the full list of the available
3041*0Sstevel@tonic-gateAPIs see L<perlapi>.
3042*0Sstevel@tonic-gate
3043*0Sstevel@tonic-gate=item *
3044*0Sstevel@tonic-gate
3045*0Sstevel@tonic-gateMade possible to propagate customised exceptions via croak()ing.
3046*0Sstevel@tonic-gate
3047*0Sstevel@tonic-gate=item *
3048*0Sstevel@tonic-gate
3049*0Sstevel@tonic-gateNow xsubs can have attributes just like subs.  (Well, at least the
3050*0Sstevel@tonic-gatebuilt-in attributes.)
3051*0Sstevel@tonic-gate
3052*0Sstevel@tonic-gate=item *
3053*0Sstevel@tonic-gate
3054*0Sstevel@tonic-gatedTHR and djSP have been obsoleted; the former removed (because it's
3055*0Sstevel@tonic-gatea no-op) and the latter replaced with dSP.
3056*0Sstevel@tonic-gate
3057*0Sstevel@tonic-gate=item *
3058*0Sstevel@tonic-gate
3059*0Sstevel@tonic-gatePERL_OBJECT has been completely removed.
3060*0Sstevel@tonic-gate
3061*0Sstevel@tonic-gate=item *
3062*0Sstevel@tonic-gate
3063*0Sstevel@tonic-gateThe MAGIC constants (e.g. C<'P'>) have been macrofied
3064*0Sstevel@tonic-gate(e.g. C<PERL_MAGIC_TIED>) for better source code readability
3065*0Sstevel@tonic-gateand maintainability.
3066*0Sstevel@tonic-gate
3067*0Sstevel@tonic-gate=item *
3068*0Sstevel@tonic-gate
3069*0Sstevel@tonic-gateThe regex compiler now maintains a structure that identifies nodes in
3070*0Sstevel@tonic-gatethe compiled bytecode with the corresponding syntactic features of the
3071*0Sstevel@tonic-gateoriginal regex expression.  The information is attached to the new
3072*0Sstevel@tonic-gateC<offsets> member of the C<struct regexp>. See L<perldebguts> for more
3073*0Sstevel@tonic-gatecomplete information.
3074*0Sstevel@tonic-gate
3075*0Sstevel@tonic-gate=item *
3076*0Sstevel@tonic-gate
3077*0Sstevel@tonic-gateThe C code has been made much more C<gcc -Wall> clean.  Some warning
3078*0Sstevel@tonic-gatemessages still remain in some platforms, so if you are compiling with
3079*0Sstevel@tonic-gategcc you may see some warnings about dubious practices.  The warnings
3080*0Sstevel@tonic-gateare being worked on.
3081*0Sstevel@tonic-gate
3082*0Sstevel@tonic-gate=item *
3083*0Sstevel@tonic-gate
3084*0Sstevel@tonic-gateF<perly.c>, F<sv.c>, and F<sv.h> have now been extensively commented.
3085*0Sstevel@tonic-gate
3086*0Sstevel@tonic-gate=item *
3087*0Sstevel@tonic-gate
3088*0Sstevel@tonic-gateDocumentation on how to use the Perl source repository has been added
3089*0Sstevel@tonic-gateto F<Porting/repository.pod>.
3090*0Sstevel@tonic-gate
3091*0Sstevel@tonic-gate=item *
3092*0Sstevel@tonic-gate
3093*0Sstevel@tonic-gateThere are now several profiling make targets.
3094*0Sstevel@tonic-gate
3095*0Sstevel@tonic-gate=back
3096*0Sstevel@tonic-gate
3097*0Sstevel@tonic-gate=head1 Security Vulnerability Closed [561]
3098*0Sstevel@tonic-gate
3099*0Sstevel@tonic-gate(This change was already made in 5.7.0 but bears repeating here.)
3100*0Sstevel@tonic-gate(5.7.0 came out before 5.6.1: the development branch 5.7 released
3101*0Sstevel@tonic-gateearlier than the maintenance branch 5.6)
3102*0Sstevel@tonic-gate
3103*0Sstevel@tonic-gateA potential security vulnerability in the optional suidperl component
3104*0Sstevel@tonic-gateof Perl was identified in August 2000.  suidperl is neither built nor
3105*0Sstevel@tonic-gateinstalled by default.  As of November 2001 the only known vulnerable
3106*0Sstevel@tonic-gateplatform is Linux, most likely all Linux distributions.  CERT and
3107*0Sstevel@tonic-gatevarious vendors and distributors have been alerted about the vulnerability.
3108*0Sstevel@tonic-gateSee http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt
3109*0Sstevel@tonic-gatefor more information.
3110*0Sstevel@tonic-gate
3111*0Sstevel@tonic-gateThe problem was caused by Perl trying to report a suspected security
3112*0Sstevel@tonic-gateexploit attempt using an external program, /bin/mail.  On Linux
3113*0Sstevel@tonic-gateplatforms the /bin/mail program had an undocumented feature which
3114*0Sstevel@tonic-gatewhen combined with suidperl gave access to a root shell, resulting in
3115*0Sstevel@tonic-gatea serious compromise instead of reporting the exploit attempt.  If you
3116*0Sstevel@tonic-gatedon't have /bin/mail, or if you have 'safe setuid scripts', or if
3117*0Sstevel@tonic-gatesuidperl is not installed, you are safe.
3118*0Sstevel@tonic-gate
3119*0Sstevel@tonic-gateThe exploit attempt reporting feature has been completely removed from
3120*0Sstevel@tonic-gatePerl 5.8.0 (and the maintenance release 5.6.1, and it was removed also
3121*0Sstevel@tonic-gatefrom all the Perl 5.7 releases), so that particular vulnerability
3122*0Sstevel@tonic-gateisn't there anymore.  However, further security vulnerabilities are,
3123*0Sstevel@tonic-gateunfortunately, always possible.  The suidperl functionality is most
3124*0Sstevel@tonic-gateprobably going to be removed in Perl 5.10.  In any case, suidperl
3125*0Sstevel@tonic-gateshould only be used by security experts who know exactly what they are
3126*0Sstevel@tonic-gatedoing and why they are using suidperl instead of some other solution
3127*0Sstevel@tonic-gatesuch as sudo ( see http://www.courtesan.com/sudo/ ).
3128*0Sstevel@tonic-gate
3129*0Sstevel@tonic-gate=head1 New Tests
3130*0Sstevel@tonic-gate
3131*0Sstevel@tonic-gateSeveral new tests have been added, especially for the F<lib> and
3132*0Sstevel@tonic-gateF<ext> subsections.  There are now about 69 000 individual tests
3133*0Sstevel@tonic-gate(spread over about 700 test scripts), in the regression suite (5.6.1
3134*0Sstevel@tonic-gatehas about 11 700 tests, in 258 test scripts)  The exact numbers depend
3135*0Sstevel@tonic-gateon the platform and Perl configuration used.  Many of the new tests
3136*0Sstevel@tonic-gateare of course introduced by the new modules, but still in general Perl
3137*0Sstevel@tonic-gateis now more thoroughly tested.
3138*0Sstevel@tonic-gate
3139*0Sstevel@tonic-gateBecause of the large number of tests, running the regression suite
3140*0Sstevel@tonic-gatewill take considerably longer time than it used to: expect the suite
3141*0Sstevel@tonic-gateto take up to 4-5 times longer to run than in perl 5.6.  On a really
3142*0Sstevel@tonic-gatefast machine you can hope to finish the suite in about 6-8 minutes
3143*0Sstevel@tonic-gate(wallclock time).
3144*0Sstevel@tonic-gate
3145*0Sstevel@tonic-gateThe tests are now reported in a different order than in earlier Perls.
3146*0Sstevel@tonic-gate(This happens because the test scripts from under t/lib have been moved
3147*0Sstevel@tonic-gateto be closer to the library/extension they are testing.)
3148*0Sstevel@tonic-gate
3149*0Sstevel@tonic-gate=head1 Known Problems
3150*0Sstevel@tonic-gate
3151*0Sstevel@tonic-gate=head2 The Compiler Suite Is Still Very Experimental
3152*0Sstevel@tonic-gate
3153*0Sstevel@tonic-gateThe compiler suite is slowly getting better but it continues to be
3154*0Sstevel@tonic-gatehighly experimental.  Use in production environments is discouraged.
3155*0Sstevel@tonic-gate
3156*0Sstevel@tonic-gate=head2 Localising Tied Arrays and Hashes Is Broken
3157*0Sstevel@tonic-gate
3158*0Sstevel@tonic-gate    local %tied_array;
3159*0Sstevel@tonic-gate
3160*0Sstevel@tonic-gatedoesn't work as one would expect: the old value is restored
3161*0Sstevel@tonic-gateincorrectly.  This will be changed in a future release, but we don't
3162*0Sstevel@tonic-gateknow yet what the new semantics will exactly be.  In any case, the
3163*0Sstevel@tonic-gatechange will break existing code that relies on the current
3164*0Sstevel@tonic-gate(ill-defined) semantics, so just avoid doing this in general.
3165*0Sstevel@tonic-gate
3166*0Sstevel@tonic-gate=head2 Building Extensions Can Fail Because Of Largefiles
3167*0Sstevel@tonic-gate
3168*0Sstevel@tonic-gateSome extensions like mod_perl are known to have issues with
3169*0Sstevel@tonic-gate`largefiles', a change brought by Perl 5.6.0 in which file offsets
3170*0Sstevel@tonic-gatedefault to 64 bits wide, where supported.  Modules may fail to compile
3171*0Sstevel@tonic-gateat all, or they may compile and work incorrectly.  Currently, there
3172*0Sstevel@tonic-gateis no good solution for the problem, but Configure now provides
3173*0Sstevel@tonic-gateappropriate non-largefile ccflags, ldflags, libswanted, and libs
3174*0Sstevel@tonic-gatein the %Config hash (e.g., $Config{ccflags_nolargefiles}) so the
3175*0Sstevel@tonic-gateextensions that are having problems can try configuring themselves
3176*0Sstevel@tonic-gatewithout the largefileness.  This is admittedly not a clean solution,
3177*0Sstevel@tonic-gateand the solution may not even work at all.  One potential failure is
3178*0Sstevel@tonic-gatewhether one can (or, if one can, whether it's a good idea to) link
3179*0Sstevel@tonic-gatetogether at all binaries with different ideas about file offsets;
3180*0Sstevel@tonic-gateall this is platform-dependent.
3181*0Sstevel@tonic-gate
3182*0Sstevel@tonic-gate=head2 Modifying $_ Inside for(..)
3183*0Sstevel@tonic-gate
3184*0Sstevel@tonic-gate   for (1..5) { $_++ }
3185*0Sstevel@tonic-gate
3186*0Sstevel@tonic-gateworks without complaint.  It shouldn't.  (You should be able to
3187*0Sstevel@tonic-gatemodify only lvalue elements inside the loops.)  You can see the
3188*0Sstevel@tonic-gatecorrect behaviour by replacing the 1..5 with 1, 2, 3, 4, 5.
3189*0Sstevel@tonic-gate
3190*0Sstevel@tonic-gate=head2 mod_perl 1.26 Doesn't Build With Threaded Perl
3191*0Sstevel@tonic-gate
3192*0Sstevel@tonic-gateUse mod_perl 1.27 or higher.
3193*0Sstevel@tonic-gate
3194*0Sstevel@tonic-gate=head2 lib/ftmp-security tests warn 'system possibly insecure'
3195*0Sstevel@tonic-gate
3196*0Sstevel@tonic-gateDon't panic.  Read the 'make test' section of INSTALL instead.
3197*0Sstevel@tonic-gate
3198*0Sstevel@tonic-gate=head2 libwww-perl (LWP) fails base/date #51
3199*0Sstevel@tonic-gate
3200*0Sstevel@tonic-gateUse libwww-perl 5.65 or later.
3201*0Sstevel@tonic-gate
3202*0Sstevel@tonic-gate=head2 PDL failing some tests
3203*0Sstevel@tonic-gate
3204*0Sstevel@tonic-gateUse PDL 2.3.4 or later.
3205*0Sstevel@tonic-gate
3206*0Sstevel@tonic-gate=head2 Perl_get_sv
3207*0Sstevel@tonic-gate
3208*0Sstevel@tonic-gateYou may get errors like 'Undefined symbol "Perl_get_sv"' or "can't
3209*0Sstevel@tonic-gateresolve symbol 'Perl_get_sv'", or the symbol may be "Perl_sv_2pv".
3210*0Sstevel@tonic-gateThis probably means that you are trying to use an older shared Perl
3211*0Sstevel@tonic-gatelibrary (or extensions linked with such) with Perl 5.8.0 executable.
3212*0Sstevel@tonic-gatePerl used to have such a subroutine, but that is no more the case.
3213*0Sstevel@tonic-gateCheck your shared library path, and any shared Perl libraries in those
3214*0Sstevel@tonic-gatedirectories.
3215*0Sstevel@tonic-gate
3216*0Sstevel@tonic-gateSometimes this problem may also indicate a partial Perl 5.8.0
3217*0Sstevel@tonic-gateinstallation, see L</"Mac OS X dyld undefined symbols"> for an
3218*0Sstevel@tonic-gateexample and how to deal with it.
3219*0Sstevel@tonic-gate
3220*0Sstevel@tonic-gate=head2 Self-tying Problems
3221*0Sstevel@tonic-gate
3222*0Sstevel@tonic-gateSelf-tying of arrays and hashes is broken in rather deep and
3223*0Sstevel@tonic-gatehard-to-fix ways.  As a stop-gap measure to avoid people from getting
3224*0Sstevel@tonic-gatefrustrated at the mysterious results (core dumps, most often), it is
3225*0Sstevel@tonic-gateforbidden for now (you will get a fatal error even from an attempt).
3226*0Sstevel@tonic-gate
3227*0Sstevel@tonic-gateA change to self-tying of globs has caused them to be recursively
3228*0Sstevel@tonic-gatereferenced (see: L<perlobj/"Two-Phased Garbage Collection">).  You
3229*0Sstevel@tonic-gatewill now need an explicit untie to destroy a self-tied glob.  This
3230*0Sstevel@tonic-gatebehaviour may be fixed at a later date.
3231*0Sstevel@tonic-gate
3232*0Sstevel@tonic-gateSelf-tying of scalars and IO thingies works.
3233*0Sstevel@tonic-gate
3234*0Sstevel@tonic-gate=head2 ext/threads/t/libc
3235*0Sstevel@tonic-gate
3236*0Sstevel@tonic-gateIf this test fails, it indicates that your libc (C library) is not
3237*0Sstevel@tonic-gatethreadsafe.  This particular test stress tests the localtime() call to
3238*0Sstevel@tonic-gatefind out whether it is threadsafe.  See L<perlthrtut> for more information.
3239*0Sstevel@tonic-gate
3240*0Sstevel@tonic-gate=head2 Failure of Thread (5.005-style) tests
3241*0Sstevel@tonic-gate
3242*0Sstevel@tonic-gateB<Note that support for 5.005-style threading is deprecated,
3243*0Sstevel@tonic-gateexperimental and practically unsupported.  In 5.10, it is expected
3244*0Sstevel@tonic-gateto be removed.  You should migrate your code to ithreads.>
3245*0Sstevel@tonic-gate
3246*0Sstevel@tonic-gateThe following tests are known to fail due to fundamental problems in
3247*0Sstevel@tonic-gatethe 5.005 threading implementation. These are not new failures--Perl
3248*0Sstevel@tonic-gate5.005_0x has the same bugs, but didn't have these tests.
3249*0Sstevel@tonic-gate
3250*0Sstevel@tonic-gate ../ext/B/t/xref.t                    255 65280    14   12  85.71%  3-14
3251*0Sstevel@tonic-gate ../ext/List/Util/t/first.t           255 65280     7    4  57.14%  2 5-7
3252*0Sstevel@tonic-gate ../lib/English.t                       2   512    54    2   3.70%  2-3
3253*0Sstevel@tonic-gate ../lib/FileCache.t                                 5    1  20.00%  5
3254*0Sstevel@tonic-gate ../lib/Filter/Simple/t/data.t                      6    3  50.00%  1-3
3255*0Sstevel@tonic-gate ../lib/Filter/Simple/t/filter_only.                9    3  33.33%  1-2 5
3256*0Sstevel@tonic-gate ../lib/Math/BigInt/t/bare_mbf.t                 1627    4   0.25%  8 11 1626-1627
3257*0Sstevel@tonic-gate ../lib/Math/BigInt/t/bigfltpm.t                 1629    4   0.25%  10 13 1628-
3258*0Sstevel@tonic-gate                                                                    1629
3259*0Sstevel@tonic-gate ../lib/Math/BigInt/t/sub_mbf.t                  1633    4   0.24%  8 11 1632-1633
3260*0Sstevel@tonic-gate ../lib/Math/BigInt/t/with_sub.t                 1628    4   0.25%  9 12 1627-1628
3261*0Sstevel@tonic-gate ../lib/Tie/File/t/31_autodefer.t     255 65280    65   32  49.23%  34-65
3262*0Sstevel@tonic-gate ../lib/autouse.t                                  10    1  10.00%  4
3263*0Sstevel@tonic-gate op/flip.t                                         15    1   6.67%  15
3264*0Sstevel@tonic-gate
3265*0Sstevel@tonic-gateThese failures are unlikely to get fixed as 5.005-style threads
3266*0Sstevel@tonic-gateare considered fundamentally broken.  (Basically what happens is that
3267*0Sstevel@tonic-gatecompeting threads can corrupt shared global state, one good example
3268*0Sstevel@tonic-gatebeing regular expression engine's state.)
3269*0Sstevel@tonic-gate
3270*0Sstevel@tonic-gate=head2 Timing problems
3271*0Sstevel@tonic-gate
3272*0Sstevel@tonic-gateThe following tests may fail intermittently because of timing
3273*0Sstevel@tonic-gateproblems, for example if the system is heavily loaded.
3274*0Sstevel@tonic-gate
3275*0Sstevel@tonic-gate    t/op/alarm.t
3276*0Sstevel@tonic-gate    ext/Time/HiRes/HiRes.t
3277*0Sstevel@tonic-gate    lib/Benchmark.t
3278*0Sstevel@tonic-gate    lib/Memoize/t/expmod_t.t
3279*0Sstevel@tonic-gate    lib/Memoize/t/speed.t
3280*0Sstevel@tonic-gate
3281*0Sstevel@tonic-gateIn case of failure please try running them manually, for example
3282*0Sstevel@tonic-gate
3283*0Sstevel@tonic-gate    ./perl -Ilib ext/Time/HiRes/HiRes.t
3284*0Sstevel@tonic-gate
3285*0Sstevel@tonic-gate=head2 Tied/Magical Array/Hash Elements Do Not Autovivify
3286*0Sstevel@tonic-gate
3287*0Sstevel@tonic-gateFor normal arrays C<$foo = \$bar[1]> will assign C<undef> to
3288*0Sstevel@tonic-gateC<$bar[1]> (assuming that it didn't exist before), but for
3289*0Sstevel@tonic-gatetied/magical arrays and hashes such autovivification does not happen
3290*0Sstevel@tonic-gatebecause there is currently no way to catch the reference creation.
3291*0Sstevel@tonic-gateThe same problem affects slicing over non-existent indices/keys of
3292*0Sstevel@tonic-gatea tied/magical array/hash.
3293*0Sstevel@tonic-gate
3294*0Sstevel@tonic-gate=head2 Unicode in package/class and subroutine names does not work
3295*0Sstevel@tonic-gate
3296*0Sstevel@tonic-gateOne can have Unicode in identifier names, but not in package/class or
3297*0Sstevel@tonic-gatesubroutine names.  While some limited functionality towards this does
3298*0Sstevel@tonic-gateexist as of Perl 5.8.0, that is more accidental than designed; use of
3299*0Sstevel@tonic-gateUnicode for the said purposes is unsupported.
3300*0Sstevel@tonic-gate
3301*0Sstevel@tonic-gateOne reason of this unfinishedness is its (currently) inherent
3302*0Sstevel@tonic-gateunportability: since both package names and subroutine names may
3303*0Sstevel@tonic-gateneed to be mapped to file and directory names, the Unicode capability
3304*0Sstevel@tonic-gateof the filesystem becomes important-- and there unfortunately aren't
3305*0Sstevel@tonic-gateportable answers.
3306*0Sstevel@tonic-gate
3307*0Sstevel@tonic-gate=head1 Platform Specific Problems
3308*0Sstevel@tonic-gate
3309*0Sstevel@tonic-gate=head2 AIX
3310*0Sstevel@tonic-gate
3311*0Sstevel@tonic-gate=over 4
3312*0Sstevel@tonic-gate
3313*0Sstevel@tonic-gate=item *
3314*0Sstevel@tonic-gate
3315*0Sstevel@tonic-gateIf using the AIX native make command, instead of just "make" issue
3316*0Sstevel@tonic-gate"make all".  In some setups the former has been known to spuriously
3317*0Sstevel@tonic-gatealso try to run "make install".  Alternatively, you may want to use
3318*0Sstevel@tonic-gateGNU make.
3319*0Sstevel@tonic-gate
3320*0Sstevel@tonic-gate=item *
3321*0Sstevel@tonic-gate
3322*0Sstevel@tonic-gateIn AIX 4.2, Perl extensions that use C++ functions that use statics
3323*0Sstevel@tonic-gatemay have problems in that the statics are not getting initialized.
3324*0Sstevel@tonic-gateIn newer AIX releases, this has been solved by linking Perl with
3325*0Sstevel@tonic-gatethe libC_r library, but unfortunately in AIX 4.2 the said library
3326*0Sstevel@tonic-gatehas an obscure bug where the various functions related to time
3327*0Sstevel@tonic-gate(such as time() and gettimeofday()) return broken values, and
3328*0Sstevel@tonic-gatetherefore in AIX 4.2 Perl is not linked against libC_r.
3329*0Sstevel@tonic-gate
3330*0Sstevel@tonic-gate=item *
3331*0Sstevel@tonic-gate
3332*0Sstevel@tonic-gatevac 5.0.0.0 May Produce Buggy Code For Perl
3333*0Sstevel@tonic-gate
3334*0Sstevel@tonic-gateThe AIX C compiler vac version 5.0.0.0 may produce buggy code,
3335*0Sstevel@tonic-gateresulting in a few random tests failing when run as part of "make
3336*0Sstevel@tonic-gatetest", but when the failing tests are run by hand, they succeed.
3337*0Sstevel@tonic-gateWe suggest upgrading to at least vac version 5.0.1.0, that has been
3338*0Sstevel@tonic-gateknown to compile Perl correctly.  "lslpp -L|grep vac.C" will tell
3339*0Sstevel@tonic-gateyou the vac version.  See README.aix.
3340*0Sstevel@tonic-gate
3341*0Sstevel@tonic-gate=item *
3342*0Sstevel@tonic-gate
3343*0Sstevel@tonic-gateIf building threaded Perl, you may get compilation warning from pp_sys.c:
3344*0Sstevel@tonic-gate
3345*0Sstevel@tonic-gate  "pp_sys.c", line 4651.39: 1506-280 (W) Function argument assignment between types "unsigned char*" and "const void*" is not allowed.
3346*0Sstevel@tonic-gate
3347*0Sstevel@tonic-gateThis is harmless; it is caused by the getnetbyaddr() and getnetbyaddr_r()
3348*0Sstevel@tonic-gatehaving slightly different types for their first argument.
3349*0Sstevel@tonic-gate
3350*0Sstevel@tonic-gate=back
3351*0Sstevel@tonic-gate
3352*0Sstevel@tonic-gate=head2 Alpha systems with old gccs fail several tests
3353*0Sstevel@tonic-gate
3354*0Sstevel@tonic-gateIf you see op/pack, op/pat, op/regexp, or ext/Storable tests failing
3355*0Sstevel@tonic-gatein a Linux/alpha or *BSD/Alpha, it's probably time to upgrade your gcc.
3356*0Sstevel@tonic-gategccs prior to 2.95.3 are definitely not good enough, and gcc 3.1 may
3357*0Sstevel@tonic-gatebe even better.  (RedHat Linux/alpha with gcc 3.1 reported no problems,
3358*0Sstevel@tonic-gateas did Linux 2.4.18 with gcc 2.95.4.)  (In Tru64, it is preferable to
3359*0Sstevel@tonic-gateuse the bundled C compiler.)
3360*0Sstevel@tonic-gate
3361*0Sstevel@tonic-gate=head2 AmigaOS
3362*0Sstevel@tonic-gate
3363*0Sstevel@tonic-gatePerl 5.8.0 doesn't build in AmigaOS.  It broke at some point during
3364*0Sstevel@tonic-gatethe ithreads work and we could not find Amiga experts to unbreak the
3365*0Sstevel@tonic-gateproblems.  Perl 5.6.1 still works for AmigaOS (as does the the 5.7.2
3366*0Sstevel@tonic-gatedevelopment release).
3367*0Sstevel@tonic-gate
3368*0Sstevel@tonic-gate=head2 BeOS
3369*0Sstevel@tonic-gate
3370*0Sstevel@tonic-gateThe following tests fail on 5.8.0 Perl in BeOS Personal 5.03:
3371*0Sstevel@tonic-gate
3372*0Sstevel@tonic-gate t/op/lfs............................FAILED at test 17
3373*0Sstevel@tonic-gate t/op/magic..........................FAILED at test 24
3374*0Sstevel@tonic-gate ext/Fcntl/t/syslfs..................FAILED at test 17
3375*0Sstevel@tonic-gate ext/File/Glob/t/basic...............FAILED at test 3
3376*0Sstevel@tonic-gate ext/POSIX/t/sigaction...............FAILED at test 13
3377*0Sstevel@tonic-gate ext/POSIX/t/waitpid.................FAILED at test 1
3378*0Sstevel@tonic-gate
3379*0Sstevel@tonic-gateSee L<perlbeos> (README.beos) for more details.
3380*0Sstevel@tonic-gate
3381*0Sstevel@tonic-gate=head2 Cygwin "unable to remap"
3382*0Sstevel@tonic-gate
3383*0Sstevel@tonic-gateFor example when building the Tk extension for Cygwin,
3384*0Sstevel@tonic-gateyou may get an error message saying "unable to remap".
3385*0Sstevel@tonic-gateThis is known problem with Cygwin, and a workaround is
3386*0Sstevel@tonic-gatedetailed in here: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html
3387*0Sstevel@tonic-gate
3388*0Sstevel@tonic-gate=head2 Cygwin ndbm tests fail on FAT
3389*0Sstevel@tonic-gate
3390*0Sstevel@tonic-gateOne can build but not install (or test the build of) the NDBM_File
3391*0Sstevel@tonic-gateon FAT filesystems.  Installation (or build) on NTFS works fine.
3392*0Sstevel@tonic-gateIf one attempts the test on a FAT install (or build) the following
3393*0Sstevel@tonic-gatefailures are expected:
3394*0Sstevel@tonic-gate
3395*0Sstevel@tonic-gate ../ext/NDBM_File/ndbm.t       13  3328    71   59  83.10%  1-2 4 16-71
3396*0Sstevel@tonic-gate ../ext/ODBM_File/odbm.t      255 65280    ??   ??       %  ??
3397*0Sstevel@tonic-gate ../lib/AnyDBM_File.t           2   512    12    2  16.67%  1 4
3398*0Sstevel@tonic-gate ../lib/Memoize/t/errors.t      0   139    11    5  45.45%  7-11
3399*0Sstevel@tonic-gate ../lib/Memoize/t/tie_ndbm.t   13  3328     4    4 100.00%  1-4
3400*0Sstevel@tonic-gate run/fresh_perl.t                          97    1   1.03%  91
3401*0Sstevel@tonic-gate
3402*0Sstevel@tonic-gateNDBM_File fails and ODBM_File just coredumps.
3403*0Sstevel@tonic-gate
3404*0Sstevel@tonic-gateIf you intend to run only on FAT (or if using AnyDBM_File on FAT),
3405*0Sstevel@tonic-gaterun Configure with the -Ui_ndbm and -Ui_dbm options to prevent
3406*0Sstevel@tonic-gateNDBM_File and ODBM_File being built.
3407*0Sstevel@tonic-gate
3408*0Sstevel@tonic-gate=head2 DJGPP Failures
3409*0Sstevel@tonic-gate
3410*0Sstevel@tonic-gate t/op/stat............................FAILED at test 29
3411*0Sstevel@tonic-gate lib/File/Find/t/find.................FAILED at test 1
3412*0Sstevel@tonic-gate lib/File/Find/t/taint................FAILED at test 1
3413*0Sstevel@tonic-gate lib/h2xs.............................FAILED at test 15
3414*0Sstevel@tonic-gate lib/Pod/t/eol........................FAILED at test 1
3415*0Sstevel@tonic-gate lib/Test/Harness/t/strap-analyze.....FAILED at test 8
3416*0Sstevel@tonic-gate lib/Test/Harness/t/test-harness......FAILED at test 23
3417*0Sstevel@tonic-gate lib/Test/Simple/t/exit...............FAILED at test 1
3418*0Sstevel@tonic-gate
3419*0Sstevel@tonic-gateThe above failures are known as of 5.8.0 with native builds with long
3420*0Sstevel@tonic-gatefilenames, but there are a few more if running under dosemu because of
3421*0Sstevel@tonic-gatelimitations (and maybe bugs) of dosemu:
3422*0Sstevel@tonic-gate
3423*0Sstevel@tonic-gate t/comp/cpp...........................FAILED at test 3
3424*0Sstevel@tonic-gate t/op/inccode.........................(crash)
3425*0Sstevel@tonic-gate
3426*0Sstevel@tonic-gateand a few lib/ExtUtils tests, and several hundred Encode/t/Aliases.t
3427*0Sstevel@tonic-gatefailures that work fine with long filenames.  So you really might
3428*0Sstevel@tonic-gateprefer native builds and long filenames.
3429*0Sstevel@tonic-gate
3430*0Sstevel@tonic-gate=head2 FreeBSD built with ithreads coredumps reading large directories
3431*0Sstevel@tonic-gate
3432*0Sstevel@tonic-gateThis is a known bug in FreeBSD 4.5's readdir_r(), it has been fixed in
3433*0Sstevel@tonic-gateFreeBSD 4.6 (see L<perlfreebsd> (README.freebsd)).
3434*0Sstevel@tonic-gate
3435*0Sstevel@tonic-gate=head2 FreeBSD Failing locale Test 117 For ISO 8859-15 Locales
3436*0Sstevel@tonic-gate
3437*0Sstevel@tonic-gateThe ISO 8859-15 locales may fail the locale test 117 in FreeBSD.
3438*0Sstevel@tonic-gateThis is caused by the characters \xFF (y with diaeresis) and \xBE
3439*0Sstevel@tonic-gate(Y with diaeresis) not behaving correctly when being matched
3440*0Sstevel@tonic-gatecase-insensitively.  Apparently this problem has been fixed in
3441*0Sstevel@tonic-gatethe latest FreeBSD releases.
3442*0Sstevel@tonic-gate( http://www.freebsd.org/cgi/query-pr.cgi?pr=34308 )
3443*0Sstevel@tonic-gate
3444*0Sstevel@tonic-gate=head2 IRIX fails ext/List/Util/t/shuffle.t or Digest::MD5
3445*0Sstevel@tonic-gate
3446*0Sstevel@tonic-gateIRIX with MIPSpro 7.3.1.2m or 7.3.1.3m compiler may fail the List::Util
3447*0Sstevel@tonic-gatetest ext/List/Util/t/shuffle.t by dumping core.  This seems to be
3448*0Sstevel@tonic-gatea compiler error since if compiled with gcc no core dump ensues, and
3449*0Sstevel@tonic-gateno failures have been seen on the said test on any other platform.
3450*0Sstevel@tonic-gate
3451*0Sstevel@tonic-gateSimilarly, building the Digest::MD5 extension has been
3452*0Sstevel@tonic-gateknown to fail with "*** Termination code 139 (bu21)".
3453*0Sstevel@tonic-gate
3454*0Sstevel@tonic-gateThe cure is to drop optimization level (Configure -Doptimize=-O2).
3455*0Sstevel@tonic-gate
3456*0Sstevel@tonic-gate=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured
3457*0Sstevel@tonic-gate
3458*0Sstevel@tonic-gateIf perl is configured with -Duse64bitall, the successful result of the
3459*0Sstevel@tonic-gatesubtest 10 of lib/posix may arrive before the successful result of the
3460*0Sstevel@tonic-gatesubtest 9, which confuses the test harness so much that it thinks the
3461*0Sstevel@tonic-gatesubtest 9 failed.
3462*0Sstevel@tonic-gate
3463*0Sstevel@tonic-gate=head2 Linux with glibc 2.2.5 fails t/op/int subtest #6 with -Duse64bitint
3464*0Sstevel@tonic-gate
3465*0Sstevel@tonic-gateThis is a known bug in the glibc 2.2.5 with long long integers.
3466*0Sstevel@tonic-gate( http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612 )
3467*0Sstevel@tonic-gate
3468*0Sstevel@tonic-gate=head2 Linux With Sfio Fails op/misc Test 48
3469*0Sstevel@tonic-gate
3470*0Sstevel@tonic-gateNo known fix.
3471*0Sstevel@tonic-gate
3472*0Sstevel@tonic-gate=head2 Mac OS X
3473*0Sstevel@tonic-gate
3474*0Sstevel@tonic-gatePlease remember to set your environment variable LC_ALL to "C"
3475*0Sstevel@tonic-gate(setenv LC_ALL C) before running "make test" to avoid a lot of
3476*0Sstevel@tonic-gatewarnings about the broken locales of Mac OS X.
3477*0Sstevel@tonic-gate
3478*0Sstevel@tonic-gateThe following tests are known to fail in Mac OS X 10.1.5 because of
3479*0Sstevel@tonic-gatebuggy (old) implementations of Berkeley DB included in Mac OS X:
3480*0Sstevel@tonic-gate
3481*0Sstevel@tonic-gate Failed Test                 Stat Wstat Total Fail  Failed  List of Failed
3482*0Sstevel@tonic-gate -------------------------------------------------------------------------
3483*0Sstevel@tonic-gate ../ext/DB_File/t/db-btree.t    0    11    ??   ??       %  ??
3484*0Sstevel@tonic-gate ../ext/DB_File/t/db-recno.t              149    3   2.01%  61 63 65
3485*0Sstevel@tonic-gate
3486*0Sstevel@tonic-gateIf you are building on a UFS partition, you will also probably see
3487*0Sstevel@tonic-gatet/op/stat.t subtest #9 fail.  This is caused by Darwin's UFS not
3488*0Sstevel@tonic-gatesupporting inode change time.
3489*0Sstevel@tonic-gate
3490*0Sstevel@tonic-gateAlso the ext/POSIX/t/posix.t subtest #10 fails but it is skipped for
3491*0Sstevel@tonic-gatenow because the failure is Apple's fault, not Perl's (blocked signals
3492*0Sstevel@tonic-gateare lost).
3493*0Sstevel@tonic-gate
3494*0Sstevel@tonic-gateIf you Configure with ithreads, ext/threads/t/libc.t will fail. Again,
3495*0Sstevel@tonic-gatethis is not Perl's fault-- the libc of Mac OS X is not threadsafe
3496*0Sstevel@tonic-gate(in this particular test, the localtime() call is found to be
3497*0Sstevel@tonic-gatethreadunsafe.)
3498*0Sstevel@tonic-gate
3499*0Sstevel@tonic-gate=head2 Mac OS X dyld undefined symbols
3500*0Sstevel@tonic-gate
3501*0Sstevel@tonic-gateIf after installing Perl 5.8.0 you are getting warnings about missing
3502*0Sstevel@tonic-gatesymbols, for example
3503*0Sstevel@tonic-gate
3504*0Sstevel@tonic-gate    dyld: perl Undefined symbols
3505*0Sstevel@tonic-gate    _perl_sv_2pv
3506*0Sstevel@tonic-gate    _perl_get_sv
3507*0Sstevel@tonic-gate
3508*0Sstevel@tonic-gateyou probably have an old pre-Perl-5.8.0 installation (or parts of one)
3509*0Sstevel@tonic-gatein /Library/Perl (the undefined symbols used to exist in pre-5.8.0 Perls).
3510*0Sstevel@tonic-gateIt seems that for some reason "make install" doesn't always completely
3511*0Sstevel@tonic-gateoverwrite the files in /Library/Perl.  You can move the old Perl
3512*0Sstevel@tonic-gateshared library out of the way like this:
3513*0Sstevel@tonic-gate
3514*0Sstevel@tonic-gate    cd /Library/Perl/darwin/CORE
3515*0Sstevel@tonic-gate    mv libperl.dylib libperlold.dylib
3516*0Sstevel@tonic-gate
3517*0Sstevel@tonic-gateand then reissue "make install".  Note that the above of course is
3518*0Sstevel@tonic-gateextremely disruptive for anything using the /usr/local/bin/perl.
3519*0Sstevel@tonic-gateIf that doesn't help, you may have to try removing all the .bundle
3520*0Sstevel@tonic-gatefiles from beneath /Library/Perl, and again "make install"-ing.
3521*0Sstevel@tonic-gate
3522*0Sstevel@tonic-gate=head2 OS/2 Test Failures
3523*0Sstevel@tonic-gate
3524*0Sstevel@tonic-gateThe following tests are known to fail on OS/2 (for clarity
3525*0Sstevel@tonic-gateonly the failures are shown, not the full error messages):
3526*0Sstevel@tonic-gate
3527*0Sstevel@tonic-gate ../lib/ExtUtils/t/Mkbootstrap.t    1   256    18    1   5.56%  8
3528*0Sstevel@tonic-gate ../lib/ExtUtils/t/Packlist.t       1   256    34    1   2.94%  17
3529*0Sstevel@tonic-gate ../lib/ExtUtils/t/basic.t          1   256    17    1   5.88%  14
3530*0Sstevel@tonic-gate lib/os2_process.t                  2   512   227    2   0.88%  174 209
3531*0Sstevel@tonic-gate lib/os2_process_kid.t                        227    2   0.88%  174 209
3532*0Sstevel@tonic-gate lib/rx_cmprt.t                   255 65280    18    3  16.67%  16-18
3533*0Sstevel@tonic-gate
3534*0Sstevel@tonic-gate=head2 op/sprintf tests 91, 129, and 130
3535*0Sstevel@tonic-gate
3536*0Sstevel@tonic-gateThe op/sprintf tests 91, 129, and 130 are known to fail on some platforms.
3537*0Sstevel@tonic-gateExamples include any platform using sfio, and Compaq/Tandem's NonStop-UX.
3538*0Sstevel@tonic-gate
3539*0Sstevel@tonic-gateTest 91 is known to fail on QNX6 (nto), because C<sprintf '%e',0>
3540*0Sstevel@tonic-gateincorrectly produces C<0.000000e+0> instead of C<0.000000e+00>.
3541*0Sstevel@tonic-gate
3542*0Sstevel@tonic-gateFor tests 129 and 130, the failing platforms do not comply with
3543*0Sstevel@tonic-gatethe ANSI C Standard: lines 19ff on page 134 of ANSI X3.159 1989, to
3544*0Sstevel@tonic-gatebe exact.  (They produce something other than "1" and "-1" when
3545*0Sstevel@tonic-gateformatting 0.6 and -0.6 using the printf format "%.0f"; most often,
3546*0Sstevel@tonic-gatethey produce "0" and "-0".)
3547*0Sstevel@tonic-gate
3548*0Sstevel@tonic-gate=head2 SCO
3549*0Sstevel@tonic-gate
3550*0Sstevel@tonic-gateThe socketpair tests are known to be unhappy in SCO 3.2v5.0.4:
3551*0Sstevel@tonic-gate
3552*0Sstevel@tonic-gate ext/Socket/socketpair.t...............FAILED tests 15-45
3553*0Sstevel@tonic-gate
3554*0Sstevel@tonic-gate=head2 Solaris 2.5
3555*0Sstevel@tonic-gate
3556*0Sstevel@tonic-gateIn case you are still using Solaris 2.5 (aka SunOS 5.5), you may
3557*0Sstevel@tonic-gateexperience failures (the test core dumping) in lib/locale.t.
3558*0Sstevel@tonic-gateThe suggested cure is to upgrade your Solaris.
3559*0Sstevel@tonic-gate
3560*0Sstevel@tonic-gate=head2 Solaris x86 Fails Tests With -Duse64bitint
3561*0Sstevel@tonic-gate
3562*0Sstevel@tonic-gateThe following tests are known to fail in Solaris x86 with Perl
3563*0Sstevel@tonic-gateconfigured to use 64 bit integers:
3564*0Sstevel@tonic-gate
3565*0Sstevel@tonic-gate ext/Data/Dumper/t/dumper.............FAILED at test 268
3566*0Sstevel@tonic-gate ext/Devel/Peek/Peek..................FAILED at test 7
3567*0Sstevel@tonic-gate
3568*0Sstevel@tonic-gate=head2 SUPER-UX (NEC SX)
3569*0Sstevel@tonic-gate
3570*0Sstevel@tonic-gateThe following tests are known to fail on SUPER-UX:
3571*0Sstevel@tonic-gate
3572*0Sstevel@tonic-gate op/64bitint...........................FAILED tests 29-30, 32-33, 35-36
3573*0Sstevel@tonic-gate op/arith..............................FAILED tests 128-130
3574*0Sstevel@tonic-gate op/pack...............................FAILED tests 25-5625
3575*0Sstevel@tonic-gate op/pow................................
3576*0Sstevel@tonic-gate op/taint..............................# msgsnd failed
3577*0Sstevel@tonic-gate ../ext/IO/lib/IO/t/io_poll............FAILED tests 3-4
3578*0Sstevel@tonic-gate ../ext/IPC/SysV/ipcsysv...............FAILED tests 2, 5-6
3579*0Sstevel@tonic-gate ../ext/IPC/SysV/t/msg.................FAILED tests 2, 4-6
3580*0Sstevel@tonic-gate ../ext/Socket/socketpair..............FAILED tests 12
3581*0Sstevel@tonic-gate ../lib/IPC/SysV.......................FAILED tests 2, 5-6
3582*0Sstevel@tonic-gate ../lib/warnings.......................FAILED tests 115-116, 118-119
3583*0Sstevel@tonic-gate
3584*0Sstevel@tonic-gateThe op/pack failure ("Cannot compress negative numbers at op/pack.t line 126")
3585*0Sstevel@tonic-gateis serious but as of yet unsolved.  It points at some problems with the
3586*0Sstevel@tonic-gatesignedness handling of the C compiler, as do the 64bitint, arith, and pow
3587*0Sstevel@tonic-gatefailures.  Most of the rest point at problems with SysV IPC.
3588*0Sstevel@tonic-gate
3589*0Sstevel@tonic-gate=head2 Term::ReadKey not working on Win32
3590*0Sstevel@tonic-gate
3591*0Sstevel@tonic-gateUse Term::ReadKey 2.20 or later.
3592*0Sstevel@tonic-gate
3593*0Sstevel@tonic-gate=head2 UNICOS/mk
3594*0Sstevel@tonic-gate
3595*0Sstevel@tonic-gate=over 4
3596*0Sstevel@tonic-gate
3597*0Sstevel@tonic-gate=item *
3598*0Sstevel@tonic-gate
3599*0Sstevel@tonic-gateDuring Configure, the test
3600*0Sstevel@tonic-gate
3601*0Sstevel@tonic-gate    Guessing which symbols your C compiler and preprocessor define...
3602*0Sstevel@tonic-gate
3603*0Sstevel@tonic-gatewill probably fail with error messages like
3604*0Sstevel@tonic-gate
3605*0Sstevel@tonic-gate    CC-20 cc: ERROR File = try.c, Line = 3
3606*0Sstevel@tonic-gate      The identifier "bad" is undefined.
3607*0Sstevel@tonic-gate
3608*0Sstevel@tonic-gate      bad switch yylook 79bad switch yylook 79bad switch yylook 79bad switch yylook 79#ifdef A29K
3609*0Sstevel@tonic-gate      ^
3610*0Sstevel@tonic-gate
3611*0Sstevel@tonic-gate    CC-65 cc: ERROR File = try.c, Line = 3
3612*0Sstevel@tonic-gate      A semicolon is expected at this point.
3613*0Sstevel@tonic-gate
3614*0Sstevel@tonic-gateThis is caused by a bug in the awk utility of UNICOS/mk.  You can ignore
3615*0Sstevel@tonic-gatethe error, but it does cause a slight problem: you cannot fully
3616*0Sstevel@tonic-gatebenefit from the h2ph utility (see L<h2ph>) that can be used to
3617*0Sstevel@tonic-gateconvert C headers to Perl libraries, mainly used to be able to access
3618*0Sstevel@tonic-gatefrom Perl the constants defined using C preprocessor, cpp.  Because of
3619*0Sstevel@tonic-gatethe above error, parts of the converted headers will be invisible.
3620*0Sstevel@tonic-gateLuckily, these days the need for h2ph is rare.
3621*0Sstevel@tonic-gate
3622*0Sstevel@tonic-gate=item *
3623*0Sstevel@tonic-gate
3624*0Sstevel@tonic-gateIf building Perl with interpreter threads (ithreads), the
3625*0Sstevel@tonic-gategetgrent(), getgrnam(), and getgrgid() functions cannot return the
3626*0Sstevel@tonic-gatelist of the group members due to a bug in the multithreaded support of
3627*0Sstevel@tonic-gateUNICOS/mk.  What this means is that in list context the functions will
3628*0Sstevel@tonic-gatereturn only three values, not four.
3629*0Sstevel@tonic-gate
3630*0Sstevel@tonic-gate=back
3631*0Sstevel@tonic-gate
3632*0Sstevel@tonic-gate=head2 UTS
3633*0Sstevel@tonic-gate
3634*0Sstevel@tonic-gateThere are a few known test failures, see L<perluts> (README.uts).
3635*0Sstevel@tonic-gate
3636*0Sstevel@tonic-gate=head2 VOS (Stratus)
3637*0Sstevel@tonic-gate
3638*0Sstevel@tonic-gateWhen Perl is built using the native build process on VOS Release
3639*0Sstevel@tonic-gate14.5.0 and GNU C++/GNU Tools 2.0.1, all attempted tests either
3640*0Sstevel@tonic-gatepass or result in TODO (ignored) failures.
3641*0Sstevel@tonic-gate
3642*0Sstevel@tonic-gate=head2 VMS
3643*0Sstevel@tonic-gate
3644*0Sstevel@tonic-gateThere should be no reported test failures with a default configuration,
3645*0Sstevel@tonic-gatethough there are a number of tests marked TODO that point to areas
3646*0Sstevel@tonic-gateneeding further debugging and/or porting work.
3647*0Sstevel@tonic-gate
3648*0Sstevel@tonic-gate=head2 Win32
3649*0Sstevel@tonic-gate
3650*0Sstevel@tonic-gateIn multi-CPU boxes, there are some problems with the I/O buffering:
3651*0Sstevel@tonic-gatesome output may appear twice.
3652*0Sstevel@tonic-gate
3653*0Sstevel@tonic-gate=head2 XML::Parser not working
3654*0Sstevel@tonic-gate
3655*0Sstevel@tonic-gateUse XML::Parser 2.31 or later.
3656*0Sstevel@tonic-gate
3657*0Sstevel@tonic-gate=head2 z/OS (OS/390)
3658*0Sstevel@tonic-gate
3659*0Sstevel@tonic-gatez/OS has rather many test failures but the situation is actually much
3660*0Sstevel@tonic-gatebetter than it was in 5.6.0; it's just that so many new modules and
3661*0Sstevel@tonic-gatetests have been added.
3662*0Sstevel@tonic-gate
3663*0Sstevel@tonic-gate Failed Test                   Stat Wstat Total Fail  Failed  List of Failed
3664*0Sstevel@tonic-gate ---------------------------------------------------------------------------
3665*0Sstevel@tonic-gate ../ext/Data/Dumper/t/dumper.t              357    8   2.24%  311 314 325 327
3666*0Sstevel@tonic-gate                                                              331 333 337 339
3667*0Sstevel@tonic-gate ../ext/IO/lib/IO/t/io_unix.t                 5    4  80.00%  2-5
3668*0Sstevel@tonic-gate ../ext/Storable/t/downgrade.t   12  3072   169   12   7.10%  14-15 46-47 78-79
3669*0Sstevel@tonic-gate                                                              110-111 150 161
3670*0Sstevel@tonic-gate ../lib/ExtUtils/t/Constant.t   121 30976    48   48 100.00%  1-48
3671*0Sstevel@tonic-gate ../lib/ExtUtils/t/Embed.t                    9    9 100.00%  1-9
3672*0Sstevel@tonic-gate op/pat.t                                   922    7   0.76%  665 776 785 832-
3673*0Sstevel@tonic-gate                                                              834 845
3674*0Sstevel@tonic-gate op/sprintf.t                               224    3   1.34%  98 100 136
3675*0Sstevel@tonic-gate op/tr.t                                     97    5   5.15%  63 71-74
3676*0Sstevel@tonic-gate uni/fold.t                                 780    6   0.77%  61 169 196 661
3677*0Sstevel@tonic-gate                                                              710-711
3678*0Sstevel@tonic-gate
3679*0Sstevel@tonic-gateThe failures in dumper.t and downgrade.t are problems in the tests,
3680*0Sstevel@tonic-gatethose in io_unix and sprintf are problems in the USS (UDP sockets and
3681*0Sstevel@tonic-gateprintf formats).  The pat, tr, and fold failures are genuine Perl
3682*0Sstevel@tonic-gateproblems caused by EBCDIC (and in the pat and fold cases, combining
3683*0Sstevel@tonic-gatethat with Unicode).  The Constant and Embed are probably problems in
3684*0Sstevel@tonic-gatethe tests (since they test Perl's ability to build extensions, and
3685*0Sstevel@tonic-gatethat seems to be working reasonably well.)
3686*0Sstevel@tonic-gate
3687*0Sstevel@tonic-gate=head2 Unicode Support on EBCDIC Still Spotty
3688*0Sstevel@tonic-gate
3689*0Sstevel@tonic-gateThough mostly working, Unicode support still has problem spots on
3690*0Sstevel@tonic-gateEBCDIC platforms.  One such known spot are the C<\p{}> and C<\P{}>
3691*0Sstevel@tonic-gateregular expression constructs for code points less than 256: the
3692*0Sstevel@tonic-gateC<pP> are testing for Unicode code points, not knowing about EBCDIC.
3693*0Sstevel@tonic-gate
3694*0Sstevel@tonic-gate=head2 Seen In Perl 5.7 But Gone Now
3695*0Sstevel@tonic-gate
3696*0Sstevel@tonic-gateC<Time::Piece> (previously known as C<Time::Object>) was removed
3697*0Sstevel@tonic-gatebecause it was felt that it didn't have enough value in it to be a
3698*0Sstevel@tonic-gatecore module.  It is still a useful module, though, and is available
3699*0Sstevel@tonic-gatefrom the CPAN.
3700*0Sstevel@tonic-gate
3701*0Sstevel@tonic-gatePerl 5.8 unfortunately does not build anymore on AmigaOS; this broke
3702*0Sstevel@tonic-gateaccidentally at some point.  Since there are not that many Amiga
3703*0Sstevel@tonic-gatedevelopers available, we could not get this fixed and tested in time
3704*0Sstevel@tonic-gatefor 5.8.0.  Perl 5.6.1 still works for AmigaOS (as does the the 5.7.2
3705*0Sstevel@tonic-gatedevelopment release).
3706*0Sstevel@tonic-gate
3707*0Sstevel@tonic-gateThe C<PerlIO::Scalar> and C<PerlIO::Via> (capitalised) were renamed as
3708*0Sstevel@tonic-gateC<PerlIO::scalar> and C<PerlIO::via> (all lowercase) just before 5.8.0.
3709*0Sstevel@tonic-gateThe main rationale was to have all core PerlIO layers to have all
3710*0Sstevel@tonic-gatelowercase names.  The "plugins" are named as usual, for example
3711*0Sstevel@tonic-gateC<PerlIO::via::QuotedPrint>.
3712*0Sstevel@tonic-gate
3713*0Sstevel@tonic-gateThe C<threads::shared::queue> and C<threads::shared::semaphore> were
3714*0Sstevel@tonic-gaterenamed as C<Thread::Queue> and C<Thread::Semaphore> just before 5.8.0.
3715*0Sstevel@tonic-gateThe main rationale was to have thread modules to obey normal naming,
3716*0Sstevel@tonic-gateC<Thread::> (the C<threads> and C<threads::shared> themselves are
3717*0Sstevel@tonic-gatemore pragma-like, they affect compile-time, so they stay lowercase).
3718*0Sstevel@tonic-gate
3719*0Sstevel@tonic-gate=head1 Reporting Bugs
3720*0Sstevel@tonic-gate
3721*0Sstevel@tonic-gateIf you find what you think is a bug, you might check the articles
3722*0Sstevel@tonic-gaterecently posted to the comp.lang.perl.misc newsgroup and the perl
3723*0Sstevel@tonic-gatebug database at http://bugs.perl.org/ .  There may also be
3724*0Sstevel@tonic-gateinformation at http://www.perl.com/ , the Perl Home Page.
3725*0Sstevel@tonic-gate
3726*0Sstevel@tonic-gateIf you believe you have an unreported bug, please run the B<perlbug>
3727*0Sstevel@tonic-gateprogram included with your release.  Be sure to trim your bug down
3728*0Sstevel@tonic-gateto a tiny but sufficient test case.  Your bug report, along with the
3729*0Sstevel@tonic-gateoutput of C<perl -V>, will be sent off to perlbug@perl.org to be
3730*0Sstevel@tonic-gateanalysed by the Perl porting team.
3731*0Sstevel@tonic-gate
3732*0Sstevel@tonic-gate=head1 SEE ALSO
3733*0Sstevel@tonic-gate
3734*0Sstevel@tonic-gateThe F<Changes> file for exhaustive details on what changed.
3735*0Sstevel@tonic-gate
3736*0Sstevel@tonic-gateThe F<INSTALL> file for how to build Perl.
3737*0Sstevel@tonic-gate
3738*0Sstevel@tonic-gateThe F<README> file for general stuff.
3739*0Sstevel@tonic-gate
3740*0Sstevel@tonic-gateThe F<Artistic> and F<Copying> files for copyright information.
3741*0Sstevel@tonic-gate
3742*0Sstevel@tonic-gate=head1 HISTORY
3743*0Sstevel@tonic-gate
3744*0Sstevel@tonic-gateWritten by Jarkko Hietaniemi <F<jhi@iki.fi>>.
3745*0Sstevel@tonic-gate
3746*0Sstevel@tonic-gate=cut
3747