Advertise the upcoming Win32::GetOSName().
[p5sagit/p5-mst-13.2.git] / pod / perldelta.pod
CommitLineData
d4432bb5 1=head1 NAME
cc0fca54 2
f39f21d8 3perldelta - what is new for perl v5.8.0
cc0fca54 4
5=head1 DESCRIPTION
6
44da0e71 7This document describes differences between the 5.6.0 release
8and the 5.8.0 release.
f39f21d8 9
44da0e71 10Many of the bug fixes in 5.8.0 were already seen in the 5.6.1
11maintenance release since the two releases were kept closely
12coordinated.
13
4f8e5944 14If you are upgrading from Perl 5.005_03, you might also want
15to read L<perl56delta>.
16
44da0e71 17=head1 Highlights In 5.8.0
76663d67 18
19=over 4
20
21=item *
22
23Better Unicode support
24
25=item *
26
27New Thread Implementation
28
29=item *
30
31Many New Modules
32
33=item *
34
35Better Numeric Accuracy
36
37=item *
38
39Safe Signals
40
41=item *
42
43More Extensive Regression Testing
44
45=back
46
f39f21d8 47=head1 Incompatible Changes
48
6cc60dfb 49=head2 Binary Incompatibility
50
764bd7e0 51B<Perl 5.8 is not binary compatible with earlier releases of Perl.>
52
53B<You have to recompile your XS modules.>
54
55(Pure Perl modules should continue to work.)
56
c5af7db2 57The major reason for the discontinuity is the new IO architecture
8cbf54fa 58called PerlIO. PerlIO is the default configuration because without
59it many new features of Perl 5.8 cannot be used. In other words:
60you just have to recompile your modules containing XS code, sorry
61about that.
6cc60dfb 62
365d6a78 63In future releases of Perl, non-PerlIO aware XS modules may become
6cc60dfb 64completely unsupported. This shouldn't be too difficult for module
65authors, however: PerlIO has been designed as a drop-in replacement
66(at the source code level) for the stdio interface.
67
764bd7e0 68Depending on your platform, there are also other reasons why
69we decided to break binary compatibility, please read on.
70
77c8cf41 71=head2 64-bit platforms and malloc
72
057b7f2b 73If your pointers are 64 bits wide, the Perl malloc is no longer being
c2e23569 74used because it does not work well with 8-byte pointers. Also,
61947107 75usually the system mallocs on such platforms are much better optimized
c2e23569 76for such large memory models than the Perl malloc. Some memory-hungry
77Perl applications like the PDL don't work well with Perl's malloc.
e6dc8c81 78Finally, other applications than Perl (such as mod_perl) tend to prefer
c2e23569 79the system malloc. Such platforms include Alpha and 64-bit HPPA,
80MIPS, PPC, and Sparc.
77c8cf41 81
82=head2 AIX Dynaloading
83
84The AIX dynaloading now uses in AIX releases 4.3 and newer the native
85dlopen interface of AIX instead of the old emulated interface. This
86change will probably break backward compatibility with compiled
87modules. The change was made to make Perl more compliant with other
efc3b6b5 88applications like mod_perl which are using the AIX native interface.
77c8cf41 89
95f0a2f1 90=head2 Attributes for C<my> variables now handled at run-time.
91
92The C<my EXPR : ATTRS> syntax now applies variable attributes at
93run-time. (Subroutine and C<our> variables still get attributes applied
94at compile-time.) See L<attributes> for additional details. In particular,
95however, this allows variable attributes to be useful for C<tie> interfaces,
c4f1ce08 96which was a deficiency of earlier releases. Note that the new semantics
97doesn't work with the Attribute::Handlers module (as of version 0.76).
95f0a2f1 98
77c8cf41 99=head2 Socket Extension Dynamic in VMS
100
101The Socket extension is now dynamically loaded instead of being
102statically built in. This may or may not be a problem with ancient
103TCP/IP stacks of VMS: we do not know since we weren't able to test
104Perl in such configurations.
105
00bb525a 106=head2 IEEE-format Floating Point Default on OpenVMS Alpha
107
108Perl now uses IEEE format (T_FLOAT) as the default internal floating
109point format on OpenVMS Alpha, potentially breaking binary compatibility
110with external libraries or existing data. G_FLOAT is still available as
111a configuration option. The default on VAX (D_FLOAT) has not changed.
112
eb0cc9e3 113=head2 New Unicode Properties
114
115Unicode I<scripts> are now supported. Scripts are similar to (and superior
116to) Unicode I<blocks>. The difference between scripts and blocks is that
117scripts are the glyphs used by a language or a group of languages, while
118the blocks are more artificial groupings of (mostly) 256 characters based
119on the Unicode numbering.
120
121In general, scripts are more inclusive, but not universally so. For
122example, while the script C<Latin> includes all the Latin characters and
123their various diacritic-adorned versions, it does not include the various
124punctuation or digits (since they are not solely C<Latin>).
125
126A number of other properties are now supported, including C<\p{L&}>,
127C<\p{Any}> C<\p{Assigned}>, C<\p{Unassigned}>, C<\p{Blank}> and
128C<\p{SpacePerl}> (along with their C<\P{...}> versions, of course).
129See L<perlunicode> for details, and more additions.
130
131The C<In> or C<Is> prefix to names used with the C<\p{...}> and C<\P{...}>
132are now almost always optional. The only exception is that a C<In> prefix
133is required to signify a Unicode block when a block name conflicts with a
134script name. For example, C<\p{Tibetan}> refers to the script, while
135C<\p{InTibetan}> refers to the block. When there is no name conflict, you
136can omit the C<In> from the block name (e.g. C<\p{BraillePatterns}>), but
137to be safe, it's probably best to always use the C<In>).
77c8cf41 138
c2e23569 139=head2 REF(...) Instead Of SCALAR(...)
77c8cf41 140
057b7f2b 141A reference to a reference now stringifies as "REF(0x81485ec)" instead
c2e23569 142of "SCALAR(0x81485ec)" in order to be more consistent with the return
143value of ref().
77c8cf41 144
79f69e33 145=head2 pack/unpack D/F recycled
146
66023b77 147The undocumented pack/unpack template letters D/F have been recycled
79f69e33 148for better use: now they stand for long double (if supported by the
149platform) and NV (Perl internal floating point type). (They used
6123004a 150to be aliases for d/f, but you never knew that.)
79f69e33 151
c2e23569 152=head2 Deprecations
77c8cf41 153
61947107 154=over 4
77c8cf41 155
61947107 156=item *
f39f21d8 157
61947107 158The semantics of bless(REF, REF) were unclear and until someone proves
159it to make some sense, it is forbidden.
f39f21d8 160
161=item *
162
c2e23569 163The obsolete chat2 library that should never have been allowed
164to escape the laboratory has been decommissioned.
f39f21d8 165
166=item *
167
58175c9b 168The builtin dump() function has probably outlived most of its
169usefulness. The core-dumping functionality will remain in future
170available as an explicit call to C<CORE::dump()>, but in future
171releases the behaviour of an unqualified C<dump()> call may change.
172
173=item *
174
61947107 175The very dusty examples in the eg/ directory have been removed.
176Suggestions for new shiny examples welcome but the main issue is that
177the examples need to be documented, tested and (most importantly)
178maintained.
f39f21d8 179
180=item *
181
c2e23569 182The (bogus) escape sequences \8 and \9 now give an optional warning
183("Unrecognized escape passed through"). There is no need to \-escape
184any C<\w> character.
f39f21d8 185
186=item *
187
c2e23569 188The list of filenames from glob() (or <...>) is now by default sorted
44da0e71 189alphabetically to be csh-compliant (which is what happened before
190in most UNIX platforms). (bsd_glob() does still sort platform
c2e23569 191natively, ASCII or EBCDIC, unless GLOB_ALPHASORT is specified.)
f39f21d8 192
193=item *
194
44da0e71 195Spurious syntax errors generated in certain situations, when glob()
196caused File::Glob to be loaded for the first time, have been fixed.
197
198=item *
199
c2e23569 200Although "you shouldn't do that", it was possible to write code that
201depends on Perl's hashed key order (Data::Dumper does this). The new
202algorithm "One-at-a-Time" produces a different hashed key order.
203More details are in L</"Performance Enhancements">.
f39f21d8 204
205=item *
206
61947107 207lstat(FILEHANDLE) now gives a warning because the operation makes no sense.
208In future releases this may become a fatal error.
f39f21d8 209
210=item *
211
057b7f2b 212The C<package;> syntax (C<package> without an argument) has been
c2e23569 213deprecated. Its semantics were never that clear and its
214implementation even less so. If you have used that feature to
215disallow all but fully qualified variables, C<use strict;> instead.
61947107 216
217=item *
218
c2e23569 219The unimplemented POSIX regex features [[.cc.]] and [[=c=]] are still
220recognised but now cause fatal errors. The previous behaviour of
221ignoring them by default and warning if requested was unacceptable
222since it, in a way, falsely promised that the features could be used.
61947107 223
224=item *
225
c2e23569 226The current user-visible implementation of pseudo-hashes (the weird
227use of the first array element) is deprecated starting from Perl 5.8.0
228and will be removed in Perl 5.10.0, and the feature will be
229implemented differently. Not only is the current interface rather
230ugly, but the current implementation slows down normal array and hash
231use quite noticeably. The C<fields> pragma interface will remain
a6d3fe4f 232available. The I<restricted hashes> interface is expected to
233be the replacement interface (see L<Hash::Util>).
61947107 234
235=item *
236
aecce728 237The syntaxes C<< @a->[...] >> and C<< %h->{...} >> have now been deprecated.
61947107 238
239=item *
240
e6dc8c81 241After years of trying, suidperl is considered to be too complex to
c2e23569 242ever be considered truly secure. The suidperl functionality is likely
243to be removed in a future release.
244
245=item *
246
6ba475fe 247The 5.005 threads model (module C<Thread>) is deprecated and expected
248to be removed in Perl 5.10. Multithreaded code should be migrated to
4c18bbd3 249the new ithreads model (see L<threads>, L<threads::shared> and
250L<perlthrtut>).
6ba475fe 251
252=item *
253
c2e23569 254The long deprecated uppercase aliases for the string comparison
255operators (EQ, NE, LT, LE, GE, GT) have now been removed.
256
257=item *
258
259The tr///C and tr///U features have been removed and will not return;
260the interface was a mistake. Sorry about that. For similar
261functionality, see pack('U0', ...) and pack('C0', ...).
f39f21d8 262
420cdfc1 263=item *
264
265Earlier Perls treated "sub foo (@bar)" as equivalent to "sub foo (@)".
8cbf54fa 266The prototypes are now checked better at compile-time for invalid
267syntax. An optional warning is generated ("Illegal character in
268prototype...") but this may be upgraded to a fatal error in a future
269release.
420cdfc1 270
fd5a896a 271=item *
272
273The existing behaviour when localising tied arrays and hashes is wrong,
274and will be changed in a future release, so do not rely on the existing
275behaviour. See L<"Localising Tied Arrays and Hashes Is Broken">.
276
f39f21d8 277=back
278
61947107 279=head1 Core Enhancements
280
77c8cf41 281=head2 PerlIO is Now The Default
f39f21d8 282
283=over 4
284
285=item *
286
77c8cf41 287IO is now by default done via PerlIO rather than system's "stdio".
288PerlIO allows "layers" to be "pushed" onto a file handle to alter the
289handle's behaviour. Layers can be specified at open time via 3-arg
290form of open:
f39f21d8 291
77c8cf41 292 open($fh,'>:crlf :utf8', $path) || ...
f39f21d8 293
77c8cf41 294or on already opened handles via extended C<binmode>:
f39f21d8 295
77c8cf41 296 binmode($fh,':encoding(iso-8859-7)');
f39f21d8 297
77c8cf41 298The built-in layers are: unix (low level read/write), stdio (as in
299previous Perls), perlio (re-implementation of stdio buffering in a
300portable manner), crlf (does CRLF <=> "\n" translation as on Win32,
301but available on any platform). A mmap layer may be available if
302platform supports it (mostly UNIXes).
f39f21d8 303
77c8cf41 304Layers to be applied by default may be specified via the 'open' pragma.
305
306See L</"Installation and Configuration Improvements"> for the effects
307of PerlIO on your architecture name.
f39f21d8 308
309=item *
310
77c8cf41 311File handles can be marked as accepting Perl's internal encoding of Unicode
312(UTF-8 or UTF-EBCDIC depending on platform) by a pseudo layer ":utf8" :
f39f21d8 313
77c8cf41 314 open($fh,">:utf8","Uni.txt");
f39f21d8 315
77c8cf41 316Note for EBCDIC users: the pseudo layer ":utf8" is erroneously named
317for you since it's not UTF-8 what you will be getting but instead
318UTF-EBCDIC. See L<perlunicode>, L<utf8>, and
319http://www.unicode.org/unicode/reports/tr16/ for more information.
320In future releases this naming may change.
f39f21d8 321
322=item *
323
77c8cf41 324File handles can translate character encodings from/to Perl's internal
325Unicode form on read/write via the ":encoding()" layer.
f39f21d8 326
327=item *
328
77c8cf41 329File handles can be opened to "in memory" files held in Perl scalars via:
330
331 open($fh,'>', \$variable) || ...
f39f21d8 332
333=item *
334
77c8cf41 335Anonymous temporary files are available without need to
336'use FileHandle' or other module via
f39f21d8 337
77c8cf41 338 open($fh,"+>", undef) || ...
f39f21d8 339
77c8cf41 340That is a literal undef, not an undefined value.
f39f21d8 341
342=item *
343
77c8cf41 344The list form of C<open> is now implemented for pipes (at least on UNIX):
f39f21d8 345
77c8cf41 346 open($fh,"-|", 'cat', '/etc/motd')
f39f21d8 347
77c8cf41 348creates a pipe, and runs the equivalent of exec('cat', '/etc/motd') in
349the child process.
f39f21d8 350
b310b053 351=item *
352
353If your locale environment variables (LANGUAGE, LC_ALL, LC_CTYPE, LANG)
354contain the strings 'UTF-8' or 'UTF8' (case-insensitive matching),
355the default encoding of your STDIN, STDOUT, and STDERR, and of
356B<any subsequent file open>, is UTF-8.
357
e1f170bd 358=back
f39f21d8 359
02e156f1 360=head2 Restricted Hashes
361
362A restricted hash is restricted to a certain set of keys, no keys
363outside the set can be added. Also individual keys can be restricted
364so that the key cannot be deleted and the value cannot be changed.
365No new syntax is involved: the Hash::Util module is the interface.
366
3e33716f 367=head2 Safe Signals
f39f21d8 368
e1f170bd 369Perl used to be fragile in that signals arriving at inopportune moments
370could corrupt Perl's internal state. Now Perl postpones handling of
3e33716f 371signals until it's safe (between opcodes).
372
56e5bb57 373This change may have surprising side effects because signals no longer
3e33716f 374interrupt Perl instantly. Perl will now first finish whatever it was
375doing, like finishing an internal operation (like sort()) or an
376external operation (like an I/O operation), and only then look at any
377arrived signals (and before starting the next operation). No more corrupt
378internal state since the current operation is always finished first,
6123004a 379but the signal may take more time to get heard. Note that breaking
380out from potentially blocking operations should still work, though.
f39f21d8 381
e1f170bd 382=head2 Unicode Overhaul
f39f21d8 383
e1f170bd 384Unicode in general should be now much more usable than in Perl 5.6.0
385(or even in 5.6.1). Unicode can be used in hash keys, Unicode in
386regular expressions should work now, Unicode in tr/// should work now,
b310b053 387Unicode in I/O should work now. See L<perluniintro> for introduction
388and L<perlunicode> for details.
f39f21d8 389
e1f170bd 390=over 4
f39f21d8 391
392=item *
393
e1f170bd 394The Unicode Character Database coming with Perl has been upgraded
822ebcc8 395to Unicode 3.2.0. For more information, see http://www.unicode.org/ .
f39f21d8 396
397=item *
398
77c8cf41 399For developers interested in enhancing Perl's Unicode capabilities:
400almost all the UCD files are included with the Perl distribution in
8cbf54fa 401the F<lib/unicore> subdirectory. The most notable omission, for space
77c8cf41 402considerations, is the Unihan database.
f39f21d8 403
404=item *
405
eb0cc9e3 406The properties \p{Blank} and \p{SpacePerl} have been added. "Blank" is like
407C isblank(), that is, it contains only "horizontal whitespace" (the space
408character is, the newline isn't), and the "SpacePerl" is the Unicode
409equivalent of C<\s> (\p{Space} isn't, since that includes the vertical
410tabulator character, whereas C<\s> doesn't.)
411
412See "New Unicode Properties" earlier in this document for additional
413information on changes with Unicode properties.
f39f21d8 414
415=back
416
77c8cf41 417=head2 Understanding of Numbers
418
419In general a lot of fixing has happened in the area of Perl's
420understanding of numbers, both integer and floating point. Since in
421many systems the standard number parsing functions like C<strtoul()>
422and C<atof()> seem to have bugs, Perl tries to work around their
423deficiencies. This results hopefully in more accurate numbers.
f39f21d8 424
e1f170bd 425Perl now tries internally to use integer values in numeric conversions
426and basic arithmetics (+ - * /) if the arguments are integers, and
427tries also to keep the results stored internally as integers.
057b7f2b 428This change leads to often slightly faster and always less lossy
e1f170bd 429arithmetics. (Previously Perl always preferred floating point numbers
430in its math.)
431
58175c9b 432=head2 Miscellaneous Changes
e1f170bd 433
f39f21d8 434=over 4
435
436=item *
437
e1f170bd 438AUTOLOAD is now lvaluable, meaning that you can add the :lvalue attribute
439to AUTOLOAD subroutines and you can assign to the AUTOLOAD return value.
440
441=item *
442
ee8706e3 443The $Config{byteorder} (and corresponding BYTEORDER in config.h) was
444previously wrong in platforms if sizeof(long) was 4, but sizeof(IV)
445was 8. The byteorder was only sizeof(long) bytes long (1234 or 4321),
446but now it is correctly sizeof(IV) bytes long, (12345678 or 87654321).
447(This problem didn't affect Windows platforms.)
448
449Also, $Config{byteorder} is now computed dynamically--this is more
450robust with "fat binaries" where an executable image contains binaries
451for more than one binary platform, and when cross-compiling.
452
453=item *
454
61947107 455C<perl -d:Module=arg,arg,arg> now works (previously one couldn't pass
456in multiple arguments.)
f39f21d8 457
458=item *
459
58175c9b 460The builtin dump() now gives an optional warning
66023b77 461C<dump() better written as CORE::dump()>,
58175c9b 462meaning that by default C<dump(...)> is resolved as the builtin
463dump() which dumps core and aborts, not as (possibly) user-defined
464C<sub dump>. To call the latter, qualify the call as C<&dump(...)>.
465(The whole dump() feature is to considered deprecated, and possibly
466removed/changed in future releases.)
467
468=item *
469
c2d0fb59 470chomp() and chop() are now overridable. Note, however, that their
471prototype (as given by C<prototype("CORE::chomp")> is undefined,
472because it cannot be expressed and therefore one cannot really write
58175c9b 473replacements to override these builtins.
474
475=item *
476
61947107 477END blocks are now run even if you exit/die in a BEGIN block.
478Internally, the execution of END blocks is now controlled by
479PL_exit_flags & PERL_EXIT_DESTRUCT_END. This enables the new
480behaviour for Perl embedders. This will default in 5.10. See
481L<perlembed>.
f39f21d8 482
483=item *
484
e1f170bd 485Formats now support zero-padded decimal fields.
f39f21d8 486
487=item *
488
77c8cf41 489Lvalue subroutines can now return C<undef> in list context.
44da0e71 490However, the lvalue subroutine feature still remains experimental.
f39f21d8 491
492=item *
493
58175c9b 494A lost warning "Can't declare ... dereference in my" has been
495restored (Perl had it earlier but it became lost in later releases.)
496
497=item *
498
61947107 499A new special regular expression variable has been introduced:
500C<$^N>, which contains the most-recently closed group (submatch).
f39f21d8 501
502=item *
503
61947107 504C<no Module;> now works even if there is no "sub unimport" in the Module.
f39f21d8 505
506=item *
507
61947107 508The numerical comparison operators return C<undef> if either operand
509is a NaN. Previously the behaviour was unspecified.
f39f21d8 510
511=item *
512
e1f170bd 513The following builtin functions are now overridable: each(), keys(),
514pop(), push(), shift(), splice(), unshift().
515
516=item *
517
443f6d01 518C<pack() / unpack()> can now group template letters with C<()> and then
a7bac030 519apply repetition/count modifiers on the groups.
520
521=item *
522
523C<pack() / unpack()> can now process the Perl internal numeric types:
524IVs, UVs, NVs-- and also long doubles, if supported by the platform.
79f69e33 525The template letters are C<j>, C<J>, C<F>, and C<D>.
a7bac030 526
527=item *
528
61947107 529C<pack('U0a*', ...)> can now be used to force a string to UTF8.
f39f21d8 530
531=item *
532
61947107 533my __PACKAGE__ $obj now works.
f39f21d8 534
535=item *
536
2ab27a20 537POSIX::sleep() now returns the number of I<unslept> seconds
2bad225e 538(as the POSIX standard says), as opposed to CORE::sleep() which
2ab27a20 539returns the number of slept seconds.
540
541=item *
542
e1f170bd 543The printf() and sprintf() now support parameter reordering using the
544C<%\d+\$> and C<*\d+\$> syntaxes. For example
545
546 print "%2\$s %1\$s\n", "foo", "bar";
547
da6838c8 548will print "bar foo\n". This feature helps in writing
549internationalised software, and in general when the order
550of the parameters can vary.
f39f21d8 551
552=item *
553
e1f170bd 554prototype(\&) is now available.
61947107 555
556=item *
557
e1f170bd 558prototype(\[$@%&]) is now available to implicitly create references
559(useful for example if you want to emulate the tie() interface).
61947107 560
561=item *
562
58175c9b 563A new command-line option, C<-t> is available. It is the
b0c3fc92 564little brother of C<-T>: instead of dying on taint violations,
58175c9b 565lexical warnings are given. B<This is only meant as a temporary
566debugging aid while securing the code of old legacy applications.
567This is not a substitute for -T.>
568
569=item *
570
4956848f 571In other taint news, the C<exec LIST> and C<system LIST> have now been
572considered too risky (think C<exec @ARGV>: it can start any program
573with any arguments), and now the said forms cause a warning.
574You should carefully launder the arguments to guarantee their
575validity. In future releases of Perl the forms will become fatal
576errors so consider starting laundering now.
577
578=item *
579
159ad915 580Tied hash interfaces are now required to have the EXISTS and DELETE
581methods (either own or inherited).
0b2c215a 582
583=item *
584
58175c9b 585If tr/// is just counting characters, it doesn't attempt to
586modify its target.
587
588=item *
589
44da0e71 590untie() will now call an UNTIE() hook if it exists. See L<perltie>
591for details.
61947107 592
593=item *
594
595L<utime> now supports C<utime undef, undef, @files> to change the
596file timestamps to the current time.
597
598=item *
599
e1f170bd 600The rules for allowing underscores (underbars) in numeric constants
601have been relaxed and simplified: now you can have an underscore
602simply B<between digits>.
f39f21d8 603
ef985a5e 604=item *
605
606Rather than relying on C's argv[0] (which may not contain a full pathname)
607where possible $^X is now set by asking the operating system.
608(eg by reading F</proc/self/exe> on Linux, F</proc/curproc/file> on FreeBSD)
609
608dbdb1 610=item *
611
612A new variable, C<${^TAINT}>, indicates whether taint mode is enabled.
613
614=item *
615
616You can now override the readline() builtin, and this overrides also
617the <FILEHANDLE> angle bracket operator.
618
619=item *
620
621The command-line options -s and -F are now recognized on the shebang
622(#!) line.
623
4ac733c9 624=item *
625
626Use of the C</c> match modifier without an accompanying C</g> modifier
627elicits a new warning: C<Use of /c modifier is meaningless without /g>.
f34840d8 628
64e578a2 629Use of C</c> in substitutions, even with C</g>, elicits
f34840d8 630C<Use of /c modifier is meaningless in s///>.
631
476a4411 632Use of C</g> with C<split> elicits C<Use of /g modifier is meaningless
f34840d8 633in split>.
4ac733c9 634
f39f21d8 635=back
636
77c8cf41 637=head1 Modules and Pragmata
f39f21d8 638
1e13d81f 639=head2 New Modules and Pragmata
f39f21d8 640
641=over 4
642
643=item *
644
0e9b9e0c 645C<Attribute::Handlers> allows a class to define attribute handlers.
646
647 package MyPack;
648 use Attribute::Handlers;
649 sub Wolf :ATTR(SCALAR) { print "howl!\n" }
650
651 # later, in some package using or inheriting from MyPack...
652
653 my MyPack $Fluffy : Wolf; # the attribute handler Wolf will be called
654
655Both variables and routines can have attribute handlers. Handlers can
656be specific to type (SCALAR, ARRAY, HASH, or CODE), or specific to the
657exact compilation phase (BEGIN, CHECK, INIT, or END).
e0378d7f 658See L<Attribute::Handlers>.
0e9b9e0c 659
660=item *
661
e6dc8c81 662C<B::Concise>, by Stephen McCamant, is a new compiler backend for
663walking the Perl syntax tree, printing concise info about ops.
664The output is highly customisable. See L<B::Concise>.
f39f21d8 665
666=item *
667
e6dc8c81 668The new bignum, bigint, and bigrat pragmas, by Tels, implement
669transparent bignum support (using the Math::BigInt, Math::BigFloat,
670and Math::BigRat backends).
381874f1 671
672=item *
673
e6dc8c81 674C<Class::ISA>, by Sean Burke, is a module for reporting the search
675path for a class's ISA tree. See L<Class::ISA>.
f39f21d8 676
677=item *
678
e6dc8c81 679C<Cwd> now has a split personality: if possible, an XS extension is
61947107 680used, (this will hopefully be faster, more secure, and more robust)
681but if not possible, the familiar Perl implementation is used.
f39f21d8 682
683=item *
684
e6dc8c81 685C<Devel::PPPort>, originally by Kenneth Albanowski and now
e1f170bd 686maintained by Paul Marquess, has been added. It is primarily used
66023b77 687by C<h2xs> to enhance portability of XS modules between different
e0378d7f 688versions of Perl. See L<Devel::PPPort>.
1e13d81f 689
690=item *
691
61947107 692C<Digest>, frontend module for calculating digests (checksums), from
693Gisle Aas, has been added. See L<Digest>.
f39f21d8 694
695=item *
696
61947107 697C<Digest::MD5> for calculating MD5 digests (checksums) as defined in
698RFC 1321, from Gisle Aas, has been added. See L<Digest::MD5>.
f39f21d8 699
700 use Digest::MD5 'md5_hex';
701
702 $digest = md5_hex("Thirsty Camel");
703
704 print $digest, "\n"; # 01d19d9d2045e005c3f1b80e8b164de1
705
61947107 706NOTE: the C<MD5> backward compatibility module is deliberately not
e1f170bd 707included since its further use is discouraged.
f39f21d8 708
f39f21d8 709=item *
710
e6dc8c81 711C<Encode>, originally by Nick Ing-Simmons and now maintained by Dan
f14caa53 712Kogai, provides a mechanism to translate between different character
713encodings. Support for Unicode, ISO-8859-1, and ASCII are compiled in
714to the module. Several other encodings (like the rest of the
715ISO-8859, CP*/Win*, Mac, KOI8-R, three variants EBCDIC, Chinese,
716Japanese, and Korean encodings) are included and can be loaded at
717runtime. (For space considerations, the largest Chinese encodings
718have been separated into their own CPAN module, Encode::HanExtra,
719which Encode will use if available). See L<Encode>.
f39f21d8 720
721Any encoding supported by Encode module is also available to the
722":encoding()" layer if PerlIO is used.
723
61947107 724=item *
725
a6d3fe4f 726C<Hash::Util> is the interface to the new I<restricted hashes>
02e156f1 727feature. (Implemented by Jeffrey Friedl, Nick Ing-Simmons, and
e0378d7f 728Michael Schwern.) See L<Hash::Util>.
a6d3fe4f 729
730=item *
731
e6dc8c81 732C<I18N::Langinfo> can be used to query locale information.
61947107 733See L<I18N::Langinfo>.
f39f21d8 734
735=item *
736
e6dc8c81 737C<I18N::LangTags>, by Sean Burke, has functions for dealing with
738RFC3066-style language tags. See L<I18N::LangTags>.
61947107 739
740=item *
741
e6dc8c81 742C<ExtUtils::Constant>, by Nicholas Clark, is a new tool for extension
743writers for generating XS code to import C header constants.
61947107 744See L<ExtUtils::Constant>.
745
746=item *
747
e6dc8c81 748C<Filter::Simple>, by Damian Conway, is an easy-to-use frontend to
749Filter::Util::Call. See L<Filter::Simple>.
f39f21d8 750
751 # in MyFilter.pm:
752
753 package MyFilter;
754
755 use Filter::Simple sub {
756 while (my ($from, $to) = splice @_, 0, 2) {
757 s/$from/$to/g;
758 }
759 };
760
761 1;
762
763 # in user's code:
764
765 use MyFilter qr/red/ => 'green';
766
767 print "red\n"; # this code is filtered, will print "green\n"
768 print "bored\n"; # this code is filtered, will print "bogreen\n"
769
770 no MyFilter;
771
772 print "red\n"; # this code is not filtered, will print "red\n"
773
61947107 774=item *
775
e6dc8c81 776C<File::Temp>, by Tim Jenness, allows one to create temporary files and
777directories in an easy, portable, and secure way. See L<File::Temp>.
61947107 778
779=item *
780
e6dc8c81 781C<Filter::Util::Call>, by Paul Marquess, provides you with the
782framework to write I<source filters> in Perl. For most uses, the
61947107 783frontend Filter::Simple is to be preferred. See L<Filter::Util::Call>.
784
785=item *
786
e6dc8c81 787C<if>, by Ilya Zakharevich, is a new pragma for conditional inclusion
788of modules.
79f69e33 789
790=item *
791
e6dc8c81 792L<libnet>, by Graham Barr, is a collection of perl5 modules related
793to network programming. See L<Net::FTP>, L<Net::NNTP>, L<Net::Ping>
794(not part of libnet, but related), L<Net::POP3>, L<Net::SMTP>,
795and L<Net::Time>.
61947107 796
e6dc8c81 797Perl installation leaves libnet unconfigured; use F<libnetcfg>
798to configure it.
f39f21d8 799
800=item *
801
e6dc8c81 802C<List::Util>, by Graham Barr, is a selection of general-utility
803list subroutines, such as sum(), min(), first(), and shuffle().
804See L<List::Util>.
f39f21d8 805
806=item *
807
f14caa53 808C<Locale::Constants>, C<Locale::Country>, C<Locale::Currency>
e6dc8c81 809C<Locale::Language>, and L<Locale::Script>, by Neil Bowers, have
f14caa53 810been added. They provide the codes for various locale standards, such
9d81ddc1 811as "fr" for France, "usd" for US Dollar, and "ja" for Japanese.
f39f21d8 812
813 use Locale::Country;
814
815 $country = code2country('jp'); # $country gets 'Japan'
816 $code = country2code('Norway'); # $code gets 'no'
817
818See L<Locale::Constants>, L<Locale::Country>, L<Locale::Currency>,
61947107 819and L<Locale::Language>.
820
821=item *
822
e6dc8c81 823C<Locale::Maketext>, by Sean Burke, is a localization framework. See
61947107 824L<Locale::Maketext>, and L<Locale::Maketext::TPJ13>. The latter is an
825article about software localization, originally published in The Perl
e6dc8c81 826Journal #13, and republished here with kind permission.
61947107 827
828=item *
829
f14caa53 830C<Math::BigRat> for big rational numbers, to accompany Math::BigInt and
e0378d7f 831Math::BigFloat, from Tels. See L<Math::BigRat>.
381874f1 832
833=item *
834
61947107 835C<Memoize> can make your functions faster by trading space for time,
836from Mark-Jason Dominus. See L<Memoize>.
f39f21d8 837
838=item *
839
e6dc8c81 840C<MIME::Base64>, by Gisle Aas, allows you to encode data in base64,
61947107 841as defined in RFC 2045 - I<MIME (Multipurpose Internet Mail
842Extensions)>.
f39f21d8 843
844 use MIME::Base64;
845
846 $encoded = encode_base64('Aladdin:open sesame');
847 $decoded = decode_base64($encoded);
848
849 print $encoded, "\n"; # "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
850
61947107 851See L<MIME::Base64>.
f39f21d8 852
853=item *
854
e6dc8c81 855C<MIME::QuotedPrint>, by Gisle Aas, allows you to encode data
856in quoted-printable encoding, as defined in RFC 2045 - I<MIME
857(Multipurpose Internet Mail Extensions)>.
f39f21d8 858
859 use MIME::QuotedPrint;
860
861 $encoded = encode_qp("Smiley in Unicode: \x{263a}");
862 $decoded = decode_qp($encoded);
863
864 print $encoded, "\n"; # "Smiley in Unicode: =263A"
865
866MIME::QuotedPrint has been enhanced to provide the basic methods
867necessary to use it with PerlIO::Via as in :
868
869 use MIME::QuotedPrint;
057b7f2b 870 open($fh,">Via(MIME::QuotedPrint)",$path);
f39f21d8 871
61947107 872See L<MIME::QuotedPrint>.
f39f21d8 873
874=item *
875
e6dc8c81 876C<NEXT>, by Damian Conway, is a pseudo-class for method redispatch.
61947107 877See L<NEXT>.
f39f21d8 878
879=item *
880
1e13d81f 881C<open> is a new pragma for setting the default I/O disciplines
882for open().
883
884=item *
885
e6dc8c81 886C<PerlIO::Scalar>, by Nick Ing-Simmons, provides the implementation
887of IO to "in memory" Perl scalars as discussed above. It also serves
888as an example of a loadable PerlIO layer. Other future possibilities
889include PerlIO::Array and PerlIO::Code. See L<PerlIO::Scalar>.
61947107 890
891=item *
892
e6dc8c81 893C<PerlIO::Via>, by Nick Ing-Simmons, acts as a PerlIO layer and wraps
894PerlIO layer functionality provided by a class (typically implemented
895in perl code).
f39f21d8 896
897 use MIME::QuotedPrint;
057b7f2b 898 open($fh,">Via(MIME::QuotedPrint)",$path);
f39f21d8 899
900This will automatically convert everything output to C<$fh>
61947107 901to Quoted-Printable. See L<PerlIO::Via>.
f39f21d8 902
903=item *
904
1e13d81f 905C<Pod::ParseLink>, by Russ Allbery, has been added,
95f0a2f1 906to parse LZ<><> links in pods as described in the new
1e13d81f 907perlpodspec.
908
909=item *
910
61947107 911C<Pod::Text::Overstrike>, by Joe Smith, has been added.
f39f21d8 912It converts POD data to formatted overstrike text.
61947107 913See L<Pod::Text::Overstrike>.
f39f21d8 914
915=item *
916
61947107 917C<Scalar::Util> is a selection of general-utility scalar subroutines,
e6dc8c81 918such as blessed(), reftype(), and tainted(). See L<Scalar::Util>.
61947107 919
920=item *
921
1e13d81f 922C<sort> is a new pragma for controlling the behaviour of sort().
923
924=item *
925
61947107 926C<Storable> gives persistence to Perl data structures by allowing the
927storage and retrieval of Perl data to and from files in a fast and
e27159c9 928compact binary format. Because in effect Storable does serialisation
929of Perl data structues, with it you can also clone deep, hierarchical
1108aaa7 930datastructures. Storable was originally created by Raphael Manfredi,
931but it is now maintained by Abhijit Menon-Sen. Storable has been
e27159c9 932enhanced to understand the two new hash features, Unicode keys and
933restricted hashes. See L<Storable>.
61947107 934
935=item *
936
e6dc8c81 937C<Switch>, by Damian Conway, has been added. Just by saying
f39f21d8 938
939 use Switch;
940
941you have C<switch> and C<case> available in Perl.
942
943 use Switch;
944
945 switch ($val) {
946
947 case 1 { print "number 1" }
948 case "a" { print "string a" }
949 case [1..10,42] { print "number in list" }
950 case (@array) { print "number in list" }
951 case /\w+/ { print "pattern" }
952 case qr/\w+/ { print "pattern" }
953 case (%hash) { print "entry in hash" }
954 case (\%hash) { print "entry in hash" }
955 case (\&sub) { print "arg to subroutine" }
956 else { print "previous case not true" }
957 }
958
61947107 959See L<Switch>.
960
961=item *
962
e6dc8c81 963C<Test::More>, by Michael Schwern, is yet another framework for writing
964test scripts, more extensive than Test::Simple. See L<Test::More>.
61947107 965
966=item *
967
e6dc8c81 968C<Test::Simple>, by Michael Schwern, has basic utilities for writing
969tests. See L<Test::Simple>.
77c8cf41 970
971=item *
972
e6dc8c81 973C<Text::Balanced>, by Damian Conway, has been added, for extracting
974delimited text sequences from strings.
77c8cf41 975
976 use Text::Balanced 'extract_delimited';
977
978 ($a, $b) = extract_delimited("'never say never', he never said", "'", '');
979
980$a will be "'never say never'", $b will be ', he never said'.
981
e6dc8c81 982In addition to extract_delimited(), there are also extract_bracketed(),
77c8cf41 983extract_quotelike(), extract_codeblock(), extract_variable(),
984extract_tagged(), extract_multiple(), gen_delimited_pat(), and
e6dc8c81 985gen_extract_tagged(). With these, you can implement rather advanced
61947107 986parsing algorithms. See L<Text::Balanced>.
77c8cf41 987
988=item *
989
e6dc8c81 990C<threads>, by Arthur Bergman, is an interface to interpreter threads.
61947107 991Interpreter threads (ithreads) is the new thread model introduced in
c2e23569 992Perl 5.6 but only available as an internal interface for extension
4c18bbd3 993writers (and for Win32 Perl for C<fork()> emulation). See L<threads>,
994L<threads::shared>, and L<perlthrtut>.
77c8cf41 995
996=item *
997
e6dc8c81 998C<threads::shared>, by Arthur Bergman, allows data sharing for
999interpreter threads. In the ithreads model any data sharing between
61947107 1000threads must be explicit, as opposed to the old 5.005 thread model
1001where data sharing was implicit. See L<threads::shared>.
77c8cf41 1002
1003=item *
1004
1f089b22 1005C<Tie::File>, by Mark-Jason Dominus, associates a Perl array with the
e6dc8c81 1006lines of a file. See L<Tie::File>.
b3b08c80 1007
1008=item *
1009
e6dc8c81 1010C<Tie::Memoize>, by Ilya Zakharevich, provides on-demand loaded hashes.
1011See L<Tie::Memoize>.
79f69e33 1012
1013=item *
1014
61947107 1015C<Tie::RefHash::Nestable>, by Edward Avis, allows storing hash
ba370e9b 1016references (unlike the standard Tie::RefHash) The module is contained
e6dc8c81 1017within Tie::RefHash. See L<Tie::RefHash>.
77c8cf41 1018
1019=item *
1020
e6dc8c81 1021C<Time::HiRes>, by Douglas E. Wegscheid, provides high resolution
1022timing (ualarm, usleep, and gettimeofday). See L<Time::HiRes>.
77c8cf41 1023
1024=item *
1025
61947107 1026C<Unicode::UCD> offers a querying interface to the Unicode Character
1027Database. See L<Unicode::UCD>.
77c8cf41 1028
1029=item *
1030
e6dc8c81 1031C<Unicode::Collate>, by SADAHIRO Tomoyuki, implements the UCA
1032(Unicode Collation Algorithm) for sorting Unicode strings.
1033See L<Unicode::Collate>.
77c8cf41 1034
1035=item *
1036
e6dc8c81 1037C<Unicode::Normalize>, by SADAHIRO Tomoyuki, implements the various
1038Unicode normalization forms. See L<Unicode::Normalize>.
77c8cf41 1039
1040=item *
1041
e6dc8c81 1042C<XS::Typemap>, by Tim Jenness, is a test extension that exercises
1043XS typemaps. Nothing gets installed, but the code is worth studying
1044for extension writers.
77c8cf41 1045
1046=back
1047
1048=head2 Updated And Improved Modules and Pragmata
1049
1050=over 4
1051
1052=item *
1053
61947107 1054The following independently supported modules have been updated to the
1055newest versions from CPAN: CGI, CPAN, DB_File, File::Spec, File::Temp,
1056Getopt::Long, Math::BigFloat, Math::BigInt, the podlators bundle
1057(Pod::Man, Pod::Text), Pod::LaTeX, Pod::Parser, Storable,
1058Term::ANSIColor, Test, Text-Tabs+Wrap.
77c8cf41 1059
1060=item *
1061
e6dc8c81 1062attributes::reftype() now works on tied arguments.
77c8cf41 1063
1064=item *
1065
057b7f2b 1066AutoLoader can now be disabled with C<no AutoLoader;>.
77c8cf41 1067
1068=item *
1069
443f6d01 1070B::Deparse has been significantly enhanced by Robin Houston. It can
1071now deparse almost all of the standard test suite (so that the tests
3c1bc199 1072still succeed). There is a make target "test.deparse" for trying this
1073out.
77c8cf41 1074
1075=item *
1076
443f6d01 1077Carp now has better interface documentation, and the @CARP_NOT
e367fc03 1078interface has been added to get optional control over where errors
3c1bc199 1079are reported independently of @ISA, by Ben Tilly.
e367fc03 1080
1081=item *
1082
1e13d81f 1083Class::Struct can now define the classes in compile time.
77c8cf41 1084
1085=item *
1086
1e13d81f 1087Class::Struct now assigns the array/hash element if the accessor
1088is called with an array/hash element as the B<sole> argument.
77c8cf41 1089
1090=item *
1091
797ec949 1092The return value of Cwd::fastcwd() is now tainted.
1093
1094=item *
1095
e6dc8c81 1096Data::Dumper now has an option to sort hashes.
77c8cf41 1097
1098=item *
1099
e6dc8c81 1100Data::Dumper now has an option to dump code references
1e13d81f 1101using B::Deparse.
77c8cf41 1102
1103=item *
1104
44da0e71 1105DB_File now supports newer Berkeley DB versions, among
1106other improvements.
1107
1108=item *
1109
797ec949 1110Devel::Peek now has an interface for the Perl memory statistics
1111(this works only if you are using perl's malloc, and if you have
1112compiled with debugging).
1113
1114=item *
1115
1e13d81f 1116The English module can now be used without the infamous performance
1117hit by saying
77c8cf41 1118
66023b77 1119 use English '-no_match_vars';
77c8cf41 1120
e6dc8c81 1121(Assuming, of course, that you don't need the troublesome variables
1e13d81f 1122C<$`>, C<$&>, or C<$'>.) Also, introduced C<@LAST_MATCH_START> and
1123C<@LAST_MATCH_END> English aliases for C<@-> and C<@+>.
77c8cf41 1124
1125=item *
1126
797ec949 1127ExtUtils::MakeMaker now uses File::Spec internally, which hopefully
e6dc8c81 1128leads to better portability.
797ec949 1129
1130=item *
1131
3c1bc199 1132Fcntl, Socket, and Sys::Syslog have been rewritten by Nicholas Clark
1133to use the new-style constant dispatch section (see L<ExtUtils::Constant>).
1e13d81f 1134This means that they will be more robust and hopefully faster.
77c8cf41 1135
1136=item *
1137
44da0e71 1138File::Find now chdir()s correctly when chasing symbolic links.
1139
1140=item *
1141
1e13d81f 1142File::Find now has pre- and post-processing callbacks. It also
1143correctly changes directories when chasing symbolic links. Callbacks
1144(naughtily) exiting with "next;" instead of "return;" now work.
61947107 1145
1146=item *
1147
1e13d81f 1148File::Find is now (again) reentrant. It also has been made
1149more portable.
77c8cf41 1150
61947107 1151=item *
1152
608dbdb1 1153The warnings issued by File::Find now belong to their own category.
1154You can enable/disable them with C<use/no warnings 'File::Find';>.
1155
1156=item *
1157
1e13d81f 1158File::Glob::glob() renamed to File::Glob::bsd_glob() to avoid
1159prototype mismatch with CORE::glob().
61947107 1160
1161=item *
1162
1163File::Glob now supports C<GLOB_LIMIT> constant to limit the size of
1164the returned list of filenames.
77c8cf41 1165
1166=item *
1167
1e13d81f 1168IPC::Open3 now allows the use of numeric file descriptors.
1169
1170=item *
1171
e6dc8c81 1172IO::Socket now has an atmark() method, which returns true if the socket
77c8cf41 1173is positioned at the out-of-band mark. The method is also exportable
1174as a sockatmark() function.
1175
1176=item *
1177
e6dc8c81 1178IO::Socket::INET has support for the ReusePort option (if your
1179platform supports it). The Reuse option now has an alias, ReuseAddr.
1180For clarity, you may want to prefer ReuseAddr.
77c8cf41 1181
1182=item *
1183
e6dc8c81 1184IO::Socket::INET now supports a value of zero for C<LocalPort>
1185(usually meaning that the operating system will make one up.)
77c8cf41 1186
1187=item *
1188
e6dc8c81 1189'use lib' now works identically to @INC. Removing directories
1e13d81f 1190with 'no lib' now works.
1191
1192=item *
1193
3c1bc199 1194Math::BigFloat and Math::BigInt have undergone a full rewrite by Tels.
1195They are now magnitudes faster, and they support various bignum
1196libraries such as GMP and PARI as their backends.
f39f21d8 1197
1198=item *
1199
44da0e71 1200Math::Complex handles inf, NaN etc., better.
1201
1202=item *
1203
3c1bc199 1204Net::Ping has been considerably enhanced by Rob Brown: multihoming is
1205now supported, Win32 functionality is better, there is now time
1206measuring functionality (optionally high-resolution using
1207Time::HiRes), and there is now "external" protocol which uses
1208Net::Ping::External module which runs your external ping utility and
1209parses the output. A version of Net::Ping::External is available in
1210CPAN.
b929be1d 1211
1212Note that some of the Net::Ping tests are disabled when running
1213under the Perl distribution since one cannot assume one or more
1214of the following: enabled echo port at localhost, full Internet
1215connectivity, or sympathetic firewalls. You can set the environment
1216variable PERL_TEST_Net_Ping to "1" (one) before running the Perl test
1217suite to enable all the Net::Ping tests.
f39f21d8 1218
77c8cf41 1219=item *
f39f21d8 1220
da6838c8 1221POSIX::sigaction() is now much more flexible and robust.
61947107 1222You can now install coderef handlers, 'DEFAULT', and 'IGNORE'
1223handlers, installing new handlers was not atomic.
f39f21d8 1224
1225=item *
1226
e6dc8c81 1227In Safe, C<%INC> is now localised in a Safe compartment so that
76663d67 1228use/require work.
1229
1230=item *
1231
44da0e71 1232In SDBM_File on dosish platforms, some keys went missing because of
1233lack of support for files with "holes". A workaround for the problem
1234has been added.
1235
1236=item *
1237
da6838c8 1238In Search::Dict one can now have a pre-processing hook for the
76663d67 1239lines being searched.
1e13d81f 1240
1241=item *
1242
1243The Shell module now has an OO interface.
1244
1245=item *
1246
903fdac2 1247In Sys::Syslog there is now a failover mechanism that will go
1248through alternative connection mechanisms until the message
1249is successfully logged.
1250
1251=item *
1252
61947107 1253The Test module has been significantly enhanced.
f39f21d8 1254
1255=item *
1256
1cfd00ad 1257Time::Local::timelocal() does not handle fractional seconds anymore.
1258The rationale is that neither does localtime(), and timelocal() and
1259localtime() are supposed to be inverses of each other.
1260
1261=item *
1262
da6838c8 1263The vars pragma now supports declaring fully qualified variables.
77c8cf41 1264(Something that C<our()> does not and will not support.)
f39f21d8 1265
888aee59 1266=item *
1267
58175c9b 1268The C<utf8::> name space (as in the pragma) provides various
61947107 1269Perl-callable functions to provide low level access to Perl's
1270internal Unicode representation. At the moment only length()
1271has been implemented.
888aee59 1272
f39f21d8 1273=back
1274
77c8cf41 1275=head1 Utility Changes
f39f21d8 1276
1277=over 4
1278
1279=item *
1280
61947107 1281Emacs perl mode (emacs/cperl-mode.el) has been updated to version
77c8cf41 12824.31.
f39f21d8 1283
1284=item *
1285
61947107 1286F<emacs/e2ctags.pl> is now much faster.
f39f21d8 1287
1288=item *
1289
54ba6336 1290C<enc2xs> is a tool for people adding their own encodings to the
1291Encode module.
1292
1293=item *
1294
1e13d81f 1295C<h2ph> now supports C trigraphs.
1296
1297=item *
1298
1299C<h2xs> now produces a template README.
f39f21d8 1300
77c8cf41 1301=item *
1302
e6dc8c81 1303C<h2xs> now uses C<Devel::PPPort> for better portability between
1e13d81f 1304different versions of Perl.
f39f21d8 1305
1306=item *
1307
e6dc8c81 1308C<h2xs> uses the new L<ExtUtils::Constant|ExtUtils::Constant> module
1309which will affect newly created extensions that define constants.
1310Since the new code is more correct (if you have two constants where the
1311first one is a prefix of the second one, the first constant B<never>
1312got defined), less lossy (it uses integers for integer constant,
1313as opposed to the old code that used floating point numbers even for
1314integer constants), and slightly faster, you might want to consider
1315regenerating your extension code (the new scheme makes regenerating
1316easy). L<h2xs> now also supports C trigraphs.
f39f21d8 1317
1318=item *
1319
e6dc8c81 1320C<libnetcfg> has been added to configure libnet.
f39f21d8 1321
1322=item *
1323
1e13d81f 1324C<perlbug> is now much more robust. It also sends the bug report to
61947107 1325perl.org, not perl.com.
f39f21d8 1326
1327=item *
1328
1e13d81f 1329C<perlcc> has been rewritten and its user interface (that is,
61947107 1330command line) is much more like that of the UNIX C compiler, cc.
44da0e71 1331(The perlbc tools has been removed. Use C<perlcc -B> instead.)
8cbf54fa 1332B<Note that perlcc is still considered very experimental and
1333unsupported.>
f39f21d8 1334
1335=item *
1336
aecce728 1337C<perlivp> is a new Installation Verification Procedure utility
1338for running any time after installing Perl.
f39f21d8 1339
1340=item *
1341
54ba6336 1342C<piconv> is an implementation of the character conversion utility
1343C<iconv>, demonstrating the new Encode module.
1344
1345=item *
1346
1e13d81f 1347C<pod2html> now allows specifying a cache directory.
f39f21d8 1348
1349=item *
1350
bbed45f6 1351C<pod2html> now produces XHTML 1.0.
1352
1353=item *
1354
9b856ef5 1355C<pod2html> now understands POD written using different line endings
bbed45f6 1356(PC-like CRLF versus UNIX-like LF versus MacClassic-like CR).
1357
1358=item *
1359
1e13d81f 1360C<s2p> has been completely rewritten in Perl. (It is in fact a full
1361implementation of sed in Perl: you can use the sed functionality by
1362using the C<psed> utility.)
61947107 1363
1364=item *
1365
1e13d81f 1366C<xsubpp> now understands POD documentation embedded in the *.xs files.
f39f21d8 1367
1368=item *
1369
e6dc8c81 1370C<xsubpp> now supports the OUT keyword.
f39f21d8 1371
1372=back
1373
77c8cf41 1374=head1 New Documentation
f39f21d8 1375
1376=over 4
1377
1378=item *
1379
77c8cf41 1380perl56delta details the changes between the 5.005 release and the
13815.6.0 release.
f39f21d8 1382
1383=item *
1384
61947107 1385perlclib documents the internal replacements for standard C library
1386functions. (Interesting only for extension writers and Perl core
1387hackers.)
1388
1389=item *
1390
77c8cf41 1391perldebtut is a Perl debugging tutorial.
f39f21d8 1392
77c8cf41 1393=item *
f39f21d8 1394
77c8cf41 1395perlebcdic contains considerations for running Perl on EBCDIC platforms.
f39f21d8 1396
77c8cf41 1397=item *
1398
888aee59 1399perlintro is a gentle introduction to Perl.
1400
1401=item *
1402
61947107 1403perliol documents the internals of PerlIO with layers.
1404
1405=item *
1406
888aee59 1407perlmodstyle is a style guide for writing modules.
1408
1409=item *
1410
77c8cf41 1411perlnewmod tells about writing and submitting a new module.
f39f21d8 1412
1413=item *
1414
34babc16 1415perlpacktut is a pack() tutorial.
1416
1417=item *
1418
888aee59 1419perlpod has been rewritten to be clearer and to record the best
1420practices gathered over the years.
1421
1422=item *
1423
057b7f2b 1424perlpodspec is a more formal specification of the pod format,
888aee59 1425mainly of interest for writers of pod applications, not to
1426people writing in pod.
1427
1428=item *
1429
77c8cf41 1430perlretut is a regular expression tutorial.
f39f21d8 1431
1432=item *
1433
77c8cf41 1434perlrequick is a regular expressions quick-start guide.
1435Yes, much quicker than perlretut.
f39f21d8 1436
77c8cf41 1437=item *
f39f21d8 1438
61947107 1439perltodo has been updated.
1440
1441=item *
1442
888aee59 1443perltootc has been renamed as perltooc (to not to conflict
e6dc8c81 1444with perltoot in filesystems restricted to "8.3" names).
888aee59 1445
1446=item *
1447
58175c9b 1448perluniintro is an introduction to using Unicode in Perl.
1449(perlunicode is more of a detailed reference and background
1450information)
888aee59 1451
1452=item *
1453
77c8cf41 1454perlutil explains the command line utilities packaged with the Perl
1455distribution.
1456
1457=back
f39f21d8 1458
61947107 1459The following platform-specific documents are available before
1460the installation as README.I<platform>, and after the installation
1461as perlI<platform>:
f39f21d8 1462
61947107 1463 perlaix perlamiga perlapollo perlbeos perlbs2000
1464 perlce perlcygwin perldgux perldos perlepoc perlhpux
1465 perlhurd perlmachten perlmacos perlmint perlmpeix
1466 perlnetware perlos2 perlos390 perlplan9 perlqnx perlsolaris
1467 perltru64 perluts perlvmesa perlvms perlvos perlwin32
77c8cf41 1468
31be200d 1469Eastern Asian Perl users are now welcomed in their own languages:
1470README.jp (Japanese), README.ko (Korean), README.cn (simplified
1471Chinese) and README.tw (traditional Chinese), which are written in
1472normal pod but encoded in EUC-JP, EUC-KR, EUC-CN and Big5. These
1473will get installed as
1474
1475 perljp perlko perlcn perltw
1476
77c8cf41 1477=over 4
1478
1479=item *
1480
61947107 1481The documentation for the POSIX-BC platform is called "BS2000", to avoid
1482confusion with the Perl POSIX module.
77c8cf41 1483
1484=item *
1485
6cd7d6d6 1486The documentation for the WinCE platform is called perlce (README.ce
1487in the source code kit), to avoid confusion with the perlwin32
1488documentation on 8.3-restricted filesystems.
77c8cf41 1489
1490=back
1491
1492=head1 Performance Enhancements
1493
1494=over 4
1495
1496=item *
1497
44da0e71 1498map() could get pathologically slow when the result list it generates
1499is larger than the source list. The performance has been improved for
1500common scenarios.
77c8cf41 1501
1502=item *
1503
e1f170bd 1504sort() has been changed to use primarily mergesort internally as
1505opposed to the earlier quicksort. For very small lists this may
1506result in slightly slower sorting times, but in general the speedup
1507should be at least 20%. Additional bonuses are that the worst case
1508behaviour of sort() is now better (in computer science terms it now
1509runs in time O(N log N), as opposed to quicksort's Theta(N**2)
1510worst-case run time behaviour), and that sort() is now stable
1511(meaning that elements with identical keys will stay ordered as they
1512were before the sort). See the C<sort> pragma for information.
77c8cf41 1513
05e25c75 1514The story in more detail: suppose you want to serve yourself a little
1515slice of Pi.
1516
1517 @digits = ( 3,1,4,1,5,9 );
1518
1519A numerical sort of the digits will yield (1,1,3,4,5,9), as expected.
1520Which C<1> comes first is hard to know, since one C<1> looks pretty
1521much like any other. You can regard this as totally trivial,
1522or somewhat profound. However, if you just want to sort the even
1523digits ahead of the odd ones, then what will
1524
1525 sort { ($a % 2) <=> ($b % 2) } @digits;
1526
1527yield? The only even digit, C<4>, will come first. But how about
1528the odd numbers, which all compare equal? With the quicksort algorithm
1529used to implement Perl 5.6 and earlier, the order of ties is left up
1530to the sort. So, as you add more and more digits of Pi, the order
1531in which the sorted even and odd digits appear will change.
1532and, for sufficiently large slices of Pi, the quicksort algorithm
1533in Perl 5.8 won't return the same results even if reinvoked with the
1534same input. The justification for this rests with quicksort's
1535worst case behavior. If you run
1536
1537 sort { $a <=> $b } ( 1 .. $N , 1 .. $N );
1538
1539(something you might approximate if you wanted to merge two sorted
1540arrays using sort), doubling $N doesn't just double the quicksort time,
1541it I<quadruples> it. Quicksort has a worst case run time that can
1542grow like N**2, so-called I<quadratic> behaviour, and it can happen
1543on patterns that may well arise in normal use. You won't notice this
1544for small arrays, but you I<will> notice it with larger arrays,
1545and you may not live long enough for the sort to complete on arrays
1546of a million elements. So the 5.8 quicksort scrambles large arrays
1547before sorting them, as a statistical defence against quadratic behaviour.
1548But that means if you sort the same large array twice, ties may be
1549broken in different ways.
1550
1551Because of the unpredictability of tie-breaking order, and the quadratic
1552worst-case behaviour, quicksort was I<almost> replaced completely with
1553a stable mergesort. I<Stable> means that ties are broken to preserve
1554the original order of appearance in the input array. So
1555
1556 sort { ($a % 2) <=> ($b % 2) } (3,1,4,1,5,9);
1557
1558will yield (4,3,1,1,5,9), guaranteed. The even and odd numbers
1559appear in the output in the same order they appeared in the input.
e6dc8c81 1560Mergesort has worst case O(N log N) behaviour, the best value
05e25c75 1561attainable. And, ironically, this mergesort does particularly
1562well where quicksort goes quadratic: mergesort sorts (1..$N, 1..$N)
1563in O(N) time. But quicksort was rescued at the last moment because
1564it is faster than mergesort on certain inputs and platforms.
1565For example, if you really I<don't> care about the order of even
1566and odd digits, quicksort will run in O(N) time; it's very good
1567at sorting many repetitions of a small number of distinct elements.
1568The quicksort divide and conquer strategy works well on platforms
1569with relatively small, very fast, caches. Eventually, the problem gets
1570whittled down to one that fits in the cache, from which point it
1571benefits from the increased memory speed.
1572
1573Quicksort was rescued by implementing a sort pragma to control aspects
1574of the sort. The B<stable> subpragma forces stable behaviour,
1575regardless of algorithm. The B<_quicksort> and B<_mergesort>
1576subpragmas are heavy-handed ways to select the underlying implementation.
1577The leading C<_> is a reminder that these subpragmas may not survive
1578beyond 5.8. More appropriate mechanisms for selecting the implementation
1579exist, but they wouldn't have arrived in time to save quicksort.
1580
77c8cf41 1581=item *
1582
1583Hashes now use Bob Jenkins "One-at-a-Time" hashing key algorithm
f224927c 1584( http://burtleburtle.net/bob/hash/doobs.html ). This algorithm is
77c8cf41 1585reasonably fast while producing a much better spread of values than
1586the old hashing algorithm (originally by Chris Torek, later tweaked by
1587Ilya Zakharevich). Hash values output from the algorithm on a hash of
1588all 3-char printable ASCII keys comes much closer to passing the
1589DIEHARD random number generation tests. According to perlbench, this
1590change has not affected the overall speed of Perl.
1591
1592=item *
1593
1594unshift() should now be noticeably faster.
1595
1596=back
1597
1598=head1 Installation and Configuration Improvements
1599
1600=head2 Generic Improvements
1601
1602=over 4
1603
1604=item *
1605
1606INSTALL now explains how you can configure Perl to use 64-bit
1607integers even on non-64-bit platforms.
1608
1609=item *
1610
1611Policy.sh policy change: if you are reusing a Policy.sh file
1612(see INSTALL) and you use Configure -Dprefix=/foo/bar and in the old
1613Policy $prefix eq $siteprefix and $prefix eq $vendorprefix, all of
1614them will now be changed to the new prefix, /foo/bar. (Previously
1615only $prefix changed.) If you do not like this new behaviour,
1616specify prefix, siteprefix, and vendorprefix explicitly.
1617
1618=item *
1619
1620A new optional location for Perl libraries, otherlibdirs, is available.
1621It can be used for example for vendor add-ons without disturbing Perl's
1622own library directories.
1623
1624=item *
1625
e6dc8c81 1626In many platforms, the vendor-supplied 'cc' is too stripped-down to
77c8cf41 1627build Perl (basically, 'cc' doesn't do ANSI C). If this seems
1628to be the case and 'cc' does not seem to be the GNU C compiler
1629'gcc', an automatic attempt is made to find and use 'gcc' instead.
1630
1631=item *
1632
1633gcc needs to closely track the operating system release to avoid
1634build problems. If Configure finds that gcc was built for a different
1635operating system release than is running, it now gives a clearly visible
1636warning that there may be trouble ahead.
1637
1638=item *
1639
11d33b1d 1640Since Perl 5.8 is not binary-compatible with previous releases
1641of Perl, Configure no longer suggests including the 5.005
1642modules in @INC.
77c8cf41 1643
1644=item *
1645
1646Configure C<-S> can now run non-interactively.
1647
1648=item *
1649
44da0e71 1650Configure support for pdp11-style memory models has been removed due
1651to obsolescence.
1652
1653=item *
1654
77c8cf41 1655configure.gnu now works with options with whitespace in them.
f39f21d8 1656
77c8cf41 1657=item *
f39f21d8 1658
77c8cf41 1659installperl now outputs everything to STDERR.
f39f21d8 1660
77c8cf41 1661=item *
1662
f39f21d8 1663Because PerlIO is now the default on most platforms, "-perlio" doesn't
1664get appended to the $Config{archname} (also known as $^O) anymore.
1665Instead, if you explicitly choose not to use perlio (Configure command
1666line option -Uuseperlio), you will get "-stdio" appended.
1667
1668=item *
1669
1670Another change related to the architecture name is that "-64all"
1671(-Duse64bitall, or "maximally 64-bit") is appended only if your
1672pointers are 64 bits wide. (To be exact, the use64bitall is ignored.)
1673
1674=item *
1675
e6dc8c81 1676In AFS installations, one can configure the root of the AFS to be
77c8cf41 1677somewhere else than the default F</afs> by using the Configure
1678parameter C<-Dafsroot=/some/where/else>.
1679
1680=item *
1681
e6dc8c81 1682APPLLIB_EXP, a lesser-known configuration-time definition, has been
61947107 1683documented. It can be used to prepend site-specific directories
e6dc8c81 1684to Perl's default search path (@INC); see INSTALL for information.
61947107 1685
1686=item *
1687
77c8cf41 1688The version of Berkeley DB used when the Perl (and, presumably, the
1689DB_File extension) was built is now available as
1690C<@Config{qw(db_version_major db_version_minor db_version_patch)}>
1691from Perl and as C<DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
1692DB_VERSION_PATCH_CFG> from C.
1693
1694=item *
1695
61947107 1696Building Berkeley DB3 for compatibility modes for DB, NDBM, and ODBM
1697has been documented in INSTALL.
77c8cf41 1698
1699=item *
1700
61947107 1701If you have CPAN access (either network or a local copy such as a
1702CD-ROM) you can during specify extra modules to Configure to build and
1703install with Perl using the -Dextras=... option. See INSTALL for
1704more details.
f39f21d8 1705
61947107 1706=item *
f39f21d8 1707
e6dc8c81 1708In addition to config.over, a new override file, config.arch, is
1709available. This file is supposed to be used by hints file writers
1710for architecture-wide changes (as opposed to config.over which is
1711for site-wide changes).
f39f21d8 1712
1713=item *
1714
e6dc8c81 1715If your file system supports symbolic links, you can build Perl outside
e1f170bd 1716of the source directory by
1717
1718 mkdir /tmp/perl/build/directory
1719 cd /tmp/perl/build/directory
1720 sh /path/to/perl/source/Configure -Dmksymlinks ...
1721
1722This will create in /tmp/perl/build/directory a tree of symbolic links
1723pointing to files in /path/to/perl/source. The original files are left
e6dc8c81 1724unaffected. After Configure has finished, you can just say
e1f170bd 1725
1726 make all test
1727
1728and Perl will be built and tested, all in /tmp/perl/build/directory.
1729
1730=item *
1731
e6dc8c81 1732For Perl developers, several new make targets for profiling
1733and debugging have been added; see L<perlhack>.
61947107 1734
1735=over 8
f39f21d8 1736
1737=item *
1738
61947107 1739Use of the F<gprof> tool to profile Perl has been documented in
1740L<perlhack>. There is a make target called "perl.gprof" for
1741generating a gprofiled Perl executable.
f39f21d8 1742
1743=item *
1744
61947107 1745If you have GCC 3, there is a make target called "perl.gcov" for
1746creating a gcoved Perl executable for coverage analysis. See
1747L<perlhack>.
f39f21d8 1748
1749=item *
1750
61947107 1751If you are on IRIX or Tru64 platforms, new profiling/debugging options
e6dc8c81 1752have been added; see L<perlhack> for more information about pixie and
61947107 1753Third Degree.
1754
1755=back
f39f21d8 1756
1757=item *
1758
61947107 1759Guidelines of how to construct minimal Perl installations have
1760been added to INSTALL.
f39f21d8 1761
1762=item *
1763
61947107 1764The Thread extension is now not built at all under ithreads
1765(C<Configure -Duseithreads>) because it wouldn't work anyway (the
1766Thread extension requires being Configured with C<-Duse5005threads>).
f39f21d8 1767
61947107 1768But note that the Thread.pm interface is now shared by both
1769thread models.
f39f21d8 1770
d1eb8299 1771=item *
1772
1773The Gconvert macro ($Config{d_Gconvert}) used by perl for stringifying
1774floating-point numbers is now more picky about using sprintf %.*g
1775rules for the conversion. Some platforms that used to use gcvt may
1776now resort to the slower sprintf.
1777
11d33b1d 1778=item *
1779
1780The obsolete method of making a special (e.g., debugging) flavor
1781of perl by saying
1782
1783 make LIBPERL=libperld.a
1784
1785has been removed. Use -DDEBUGGING instead.
1786
61947107 1787=back
f39f21d8 1788
61947107 1789=head2 New Or Improved Platforms
f39f21d8 1790
61947107 1791For the list of platforms known to support Perl,
1792see L<perlport/"Supported Platforms">.
1793
1794=over 4
f39f21d8 1795
1796=item *
1797
61947107 1798AIX dynamic loading should be now better supported.
f39f21d8 1799
f39f21d8 1800=item *
1801
77c8cf41 1802AIX should now work better with gcc, threads, and 64-bitness. Also the
1803long doubles support in AIX should be better now. See L<perlaix>.
f39f21d8 1804
1805=item *
1806
f224927c 1807AtheOS ( http://www.atheos.cx/ ) is a new platform.
f39f21d8 1808
77c8cf41 1809=item *
f39f21d8 1810
58175c9b 1811BeOS has been reclaimed.
1812
1813=item *
1814
e6dc8c81 1815The DG/UX platform now supports 5.005-style threads.
1816See L<perldgux>.
f39f21d8 1817
1818=item *
1819
e6dc8c81 1820The DYNIX/ptx platform (a.k.a. dynixptx) is supported at or near
1821osvers 4.5.2.
f39f21d8 1822
1823=item *
1824
e6dc8c81 1825EBCDIC platforms (z/OS (also known as OS/390), POSIX-BC, and VM/ESA)
61947107 1826have been regained. Many test suite tests still fail and the
1827co-existence of Unicode and EBCDIC isn't quite settled, but the
1828situation is much better than with Perl 5.6. See L<perlos390>,
1829L<perlbs2000> (for POSIX-BC), and L<perlvmesa> for more information.
f39f21d8 1830
1831=item *
1832
61947107 1833Building perl with -Duseithreads or -Duse5005threads now works under
1834HP-UX 10.20 (previously it only worked under 10.30 or later). You will
1835need a thread library package installed. See README.hpux.
f39f21d8 1836
77c8cf41 1837=item *
f39f21d8 1838
8939ba94 1839Mac OS Classic (MacPerl has of course been available since
61947107 1840perl 5.004 but now the source code bases of standard Perl
1841and MacPerl have been synchronised)
f39f21d8 1842
77c8cf41 1843=item *
f39f21d8 1844
8939ba94 1845Mac OS X (or Darwin) should now be able to build Perl even on HFS+
e6dc8c81 1846filesystems. (The case-insensitivity used to confuse the Perl build
1847process.)
f39f21d8 1848
888aee59 1849=item *
1850
61947107 1851NCR MP-RAS is now supported.
888aee59 1852
1853=item *
1854
58175c9b 1855All the NetBSD specific patches (except for the installation
1856specific ones) have been merged back to the main distribution.
1857
1858=item *
1859
61947107 1860NetWare from Novell is now supported. See L<perlnetware>.
888aee59 1861
1862=item *
1863
61947107 1864NonStop-UX is now supported.
888aee59 1865
1866=item *
1867
44da0e71 1868NEC SUPER-UX is now supported.
1869
1870=item *
1871
58175c9b 1872All the OpenBSD specific patches (except for the installation
1873specific ones) have been merged back to the main distribution.
1874
1875=item *
1876
1877Perl has been tested with the GNU pth userlevel thread package
1878( http://www.gnu.org/software/pth/pth.html ) . All but one thread
1879test worked, and that one failure was because of test results arriving
1880in unexpected order.
1881
1882=item *
1883
11d33b1d 1884Stratus VOS is now supported using Perl's native build method
1885(Configure). This is the recommended method to build Perl on
1886VOS. The older methods, which build miniperl, are still
1887available. See L<perlvos>.
1888
1889=item *
1890
e6dc8c81 1891The Amdahl UTS UNIX mainframe platform is now supported.
888aee59 1892
1893=item *
1894
61947107 1895WinCE is now supported. See L<perlce>.
1896
1897=item *
1898
e6dc8c81 1899z/OS (formerly known as OS/390, formerly known as MVS OE) now has
61947107 1900support for dynamic loading. This is not selected by default,
1901however, you must specify -Dusedl in the arguments of Configure.
888aee59 1902
f39f21d8 1903=back
1904
1905=head1 Selected Bug Fixes
1906
e1f170bd 1907Numerous memory leaks and uninitialized memory accesses have been
e6dc8c81 1908hunted down. Most importantly, anonymous subs used to leak quite
e1f170bd 1909a bit.
ba370e9b 1910
f39f21d8 1911=over 4
1912
1913=item *
1914
e1f170bd 1915The autouse pragma didn't work for Multi::Part::Function::Names.
f39f21d8 1916
1917=item *
1918
44da0e71 1919caller() could cause core dumps in certain situations. Carp was sometimes
0fc9dec4 1920affected by this problem. In particular, caller() now returns a
1921subroutine name of C<(unknown)> for subroutines that have been removed
1922from the symbol table.
44da0e71 1923
1924=item *
1925
e1f170bd 1926chop(@list) in list context returned the characters chopped in
1927reverse order. This has been reversed to be in the right order.
f39f21d8 1928
1929=item *
1930
e1f170bd 1931Configure no longer includes the DBM libraries (dbm, gdbm, db, ndbm)
1932when building the Perl binary. The only exception to this is SunOS 4.x,
1933which needs them.
f39f21d8 1934
1935=item *
1936
e1f170bd 1937The behaviour of non-decimal but numeric string constants such as
1938"0x23" was platform-dependent: in some platforms that was seen as 35,
1939in some as 0, in some as a floating point number (don't ask). This
e6dc8c81 1940was caused by Perl's using the operating system libraries in a situation
e1f170bd 1941where the result of the string to number conversion is undefined: now
1942Perl consistently handles such strings as zero in numeric contexts.
f39f21d8 1943
1944=item *
1945
e1f170bd 1946The order of DESTROYs has been made more predictable.
f39f21d8 1947
1948=item *
1949
e1f170bd 1950Several debugger fixes: exit code now reflects the script exit code,
1951condition C<"0"> now treated correctly, the C<d> command now checks
e6dc8c81 1952line number, C<$.> no longer gets corrupted, and all debugger output
44da0e71 1953now goes correctly to the socket if RemotePort is set.
1954
1955=item *
1956
1957Perl 5.6.0 could emit spurious warnings about redefinition of dl_error()
1958when statically building extensions into perl. This has been corrected.
f39f21d8 1959
1960=item *
1961
e1f170bd 1962L<dprofpp> -R didn't work.
f39f21d8 1963
1964=item *
1965
e1f170bd 1966C<*foo{FORMAT}> now works.
5746cacd 1967
44da0e71 1968=item *
1969
1970Infinity is now recognized as a number.
f39f21d8 1971
1972=item *
1973
e1f170bd 1974UNIVERSAL::isa no longer caches methods incorrectly. (This broke
1975the Tk extension with 5.6.0.)
f39f21d8 1976
1977=item *
1978
e1f170bd 1979Lexicals I: lexicals outside an eval "" weren't resolved
1980correctly inside a subroutine definition inside the eval "" if they
1981were not already referenced in the top level of the eval""ed code.
f39f21d8 1982
1983=item *
1984
e1f170bd 1985Lexicals II: lexicals leaked at file scope into subroutines that
1986were declared before the lexicals.
f39f21d8 1987
1988=item *
1989
44da0e71 1990Lexical warnings now propagating correctly between scopes
1991and into C<eval "...">.
1992
1993=item *
1994
1995C<use warnings qw(FATAL all)> did not work as intended. This has been
1996corrected.
1997
1998=item *
1999
2000warnings::enabled() now reports the state of $^W correctly if the caller
2001isn't using lexical warnings.
f39f21d8 2002
2003=item *
2004
e1f170bd 2005Line renumbering with eval and C<#line> now works.
f39f21d8 2006
2007=item *
2008
e1f170bd 2009Fixed numerous memory leaks, especially in eval "".
f39f21d8 2010
2011=item *
2012
e6dc8c81 2013Localised tied variables no longer leak memory
0b2c215a 2014
2015 use Tie::Hash;
2016 tie my %tied_hash => 'Tie::StdHash';
2017
2018 ...
2019
e6dc8c81 2020 # Used to leak memory every time local() was called;
2021 # in a loop, this added up.
0b2c215a 2022 local($tied_hash{Foo}) = 1;
2023
2024=item *
2025
e6dc8c81 2026Localised hash elements (and %ENV) are correctly unlocalised to not
2027exist, if they didn't before they were localised.
0b2c215a 2028
2029
2030 use Tie::Hash;
2031 tie my %tied_hash => 'Tie::StdHash';
2032
2033 ...
2034
2035 # Nothing has set the FOO element so far
2036
2037 { local $tied_hash{FOO} = 'Bar' }
818c4caa 2038
fd5a896a 2039 # This used to print, but not now.
2040 print "exists!\n" if exists $tied_hash{FOO};
0b2c215a 2041
2042As a side effect of this fix, tied hash interfaces B<must> define
159ad915 2043the EXISTS and DELETE methods.
0b2c215a 2044
2045=item *
2046
e1f170bd 2047mkdir() now ignores trailing slashes in the directory name,
2048as mandated by POSIX.
f39f21d8 2049
2050=item *
2051
e1f170bd 2052Some versions of glibc have a broken modfl(). This affects builds
2053with C<-Duselongdouble>. This version of Perl detects this brokenness
2054and has a workaround for it. The glibc release 2.2.2 is known to have
2055fixed the modfl() bug.
f39f21d8 2056
2057=item *
2058
e1f170bd 2059Modulus of unsigned numbers now works (4063328477 % 65535 used to
2060return 27406, instead of 27047).
f39f21d8 2061
2062=item *
2063
e1f170bd 2064Some "not a number" warnings introduced in 5.6.0 eliminated to be
2065more compatible with 5.005. Infinity is now recognised as a number.
f39f21d8 2066
77c8cf41 2067=item *
f39f21d8 2068
44da0e71 2069Numeric conversions did not recognize changes in the string value
2070properly in certain circumstances.
2071
2072=item *
2073
e6dc8c81 2074Attributes (such as :shared) didn't work with our().
f39f21d8 2075
2076=item *
2077
e1f170bd 2078our() variables will not cause "will not stay shared" warnings.
f39f21d8 2079
2080=item *
2081
44da0e71 2082"our" variables of the same name declared in two sibling blocks
2083resulted in bogus warnings about "redeclaration" of the variables.
2084The problem has been corrected.
2085
2086=item *
2087
e1f170bd 2088pack "Z" now correctly terminates the string with "\0".
f39f21d8 2089
2090=item *
2091
e1f170bd 2092Fix password routines which in some shadow password platforms
2093(e.g. HP-UX) caused getpwent() to return every other entry.
f39f21d8 2094
77c8cf41 2095=item *
f39f21d8 2096
e1f170bd 2097The PERL5OPT environment variable (for passing command line arguments
2098to Perl) didn't work for more than a single group of options.
f39f21d8 2099
77c8cf41 2100=item *
f39f21d8 2101
e1f170bd 2102PERL5OPT with embedded spaces didn't work.
f39f21d8 2103
77c8cf41 2104=item *
f39f21d8 2105
e1f170bd 2106printf() no longer resets the numeric locale to "C".
f39f21d8 2107
77c8cf41 2108=item *
f39f21d8 2109
e6dc8c81 2110C<qw(a\\b)> now parses correctly as C<'a\\b'>: that is, as three
2111characters, not four.
44da0e71 2112
2113=item *
2114
2115pos() did not return the correct value within s///ge in earlier
2116versions. This is now handled correctly.
f39f21d8 2117
77c8cf41 2118=item *
f39f21d8 2119
e1f170bd 2120Printing quads (64-bit integers) with printf/sprintf now works
2121without the q L ll prefixes (assuming you are on a quad-capable platform).
f39f21d8 2122
77c8cf41 2123=item *
f39f21d8 2124
e1f170bd 2125Regular expressions on references and overloaded scalars now work.
f39f21d8 2126
ba370e9b 2127=item *
2128
e1f170bd 2129Right-hand side magic (GMAGIC) could in many cases such as string
2130concatenation be invoked too many times.
ba370e9b 2131
2132=item *
2133
e1f170bd 2134scalar() now forces scalar context even when used in void context.
ba370e9b 2135
2136=item *
2137
e1f170bd 2138SOCKS support is now much more robust.
ba370e9b 2139
2140=item *
2141
e1f170bd 2142sort() arguments are now compiled in the right wantarray context
2143(they were accidentally using the context of the sort() itself).
44da0e71 2144The comparison block is now run in scalar context, and the arguments
2145to be sorted are always provided list context.
ba370e9b 2146
2147=item *
2148
e1f170bd 2149Changed the POSIX character class C<[[:space:]]> to include the (very
c2e23569 2150rarely used) vertical tab character. Added a new POSIX-ish character
2151class C<[[:blank:]]> which stands for horizontal whitespace
2152(currently, the space and the tab).
ba370e9b 2153
2154=item *
2155
2156The tainting behaviour of sprintf() has been rationalized. It does
2157not taint the result of floating point formats anymore, making the
2158behaviour consistent with that of string interpolation.
2159
2160=item *
2161
44da0e71 2162Some cases of inconsistent taint propagation (such as within hash
2163values) have been fixed.
2164
2165=item *
2166
2167The RE engine found in Perl 5.6.0 accidentally pessimised certain kinds
2168of simple pattern matches. These are now handled better.
2169
2170=item *
2171
2172Regular expression debug output (whether through C<use re 'debug'>
2173or via C<-Dr>) now looks better.
2174
2175=item *
2176
2177Multi-line matches like C<"a\nxb\n" =~ /(?!\A)x/m> were flawed. The
2178bug has been fixed.
2179
2180=item *
2181
2182Use of $& could trigger a core dump under some situations. This
2183is now avoided.
2184
2185=item *
2186
c2e23569 2187The regular expression captured submatches ($1, $2, ...) are now
2188more consistently unset if the match fails, instead of leaving false
2189data lying around in them.
2190
2191=item *
2192
e6dc8c81 2193readline() on files opened in "slurp" mode could return an extra
2194"" (blank line) at the end in certain situations. This has been
2195corrected.
44da0e71 2196
2197=item *
2198
2199Autovivification of symbolic references of special variables described
2200in L<perlvar> (as in C<${$num}>) was accidentally disabled. This works
2201again now.
2202
2203=item *
2204
da6838c8 2205Sys::Syslog ignored the C<LOG_AUTH> constant.
ba370e9b 2206
2207=item *
2208
e1f170bd 2209All but the first argument of the IO syswrite() method are now optional.
ba370e9b 2210
2211=item *
2212
e1f170bd 2213$AUTOLOAD, sort(), lock(), and spawning subprocesses
2214in multiple threads simultaneously are now thread-safe.
ba370e9b 2215
2216=item *
2217
e6dc8c81 2218Tie::Array's SPLICE method was broken.
ba370e9b 2219
2220=item *
2221
e6dc8c81 2222Allow a read-only string on the left-hand side of a non-modifying tr///.
ba370e9b 2223
2224=item *
2225
ed788108 2226If C<STDERR> is tied, warnings caused by C<warn> and C<die> now
2227correctly pass to it.
2228
2229=item *
2230
e1f170bd 2231Several Unicode fixes.
ba370e9b 2232
2233=over 8
2234
2235=item *
2236
e6dc8c81 2237BOMs (byte order marks) at the beginning of Perl files
e1f170bd 2238(scripts, modules) should now be transparently skipped.
e6dc8c81 2239UTF-16 and UCS-2 encoded Perl files should now be read correctly.
ba370e9b 2240
2241=item *
2242
26f08e12 2243The character tables have been updated to Unicode 3.2.0.
ba370e9b 2244
2245=item *
2246
e1f170bd 2247Comparing with utf8 data does not magically upgrade non-utf8 data
58175c9b 2248into utf8. (This was a problem for example if you were mixing data
2249from I/O and Unicode data: your output might have got magically encoded
2250as UTF-8.)
2251
2252=item *
2253
e6dc8c81 2254Generating illegal Unicode code points such as U+FFFE, or the UTF-16
58175c9b 2255surrogates, now also generates an optional warning.
ba370e9b 2256
2257=item *
2258
e1f170bd 2259C<IsAlnum>, C<IsAlpha>, and C<IsWord> now match titlecase.
f39f21d8 2260
77c8cf41 2261=item *
f39f21d8 2262
e1f170bd 2263Concatenation with the C<.> operator or via variable interpolation,
2264C<eq>, C<substr>, C<reverse>, C<quotemeta>, the C<x> operator,
2265substitution with C<s///>, single-quoted UTF8, should now work.
f39f21d8 2266
77c8cf41 2267=item *
f39f21d8 2268
e1f170bd 2269The C<tr///> operator now works. Note that the C<tr///CU>
2270functionality has been removed (but see pack('U0', ...)).
f39f21d8 2271
77c8cf41 2272=item *
f39f21d8 2273
e1f170bd 2274C<eval "v200"> now works.
f39f21d8 2275
77c8cf41 2276=item *
f39f21d8 2277
44da0e71 2278Perl 5.6.0 parsed m/\x{ab}/ incorrectly, leading to spurious warnings.
2279This has been corrected.
2280
2281=item *
2282
e6dc8c81 2283Zero entries were missing from the Unicode classes such as C<IsDigit>.
f39f21d8 2284
e1f170bd 2285=back
f39f21d8 2286
44da0e71 2287=item *
2288
2289Large unsigned numbers (those above 2**31) could sometimes lose their
2290unsignedness, causing bogus results in arithmetic operations.
2291
e6dc8c81 2292=item *
2293
2294The Perl parser has been stress tested using both random input and
2295Markov chain input and the few found crashes and lockups have been
2296fixed.
2297
77c8cf41 2298=back
f39f21d8 2299
77c8cf41 2300=head2 Platform Specific Changes and Fixes
f39f21d8 2301
2302=over 4
2303
2304=item *
2305
77c8cf41 2306BSDI 4.*
f39f21d8 2307
77c8cf41 2308Perl now works on post-4.0 BSD/OSes.
f39f21d8 2309
2310=item *
2311
77c8cf41 2312All BSDs
f39f21d8 2313
057b7f2b 2314Setting C<$0> now works (as much as possible; see L<perlvar> for details).
f39f21d8 2315
2316=item *
2317
77c8cf41 2318Cygwin
f39f21d8 2319
439f2f5c 2320Numerous updates; currently synchronised with Cygwin 1.3.10.
f39f21d8 2321
2322=item *
2323
e1f170bd 2324Previously DYNIX/ptx had problems in its Configure probe for non-blocking I/O.
2325
2326=item *
2327
77c8cf41 2328EPOC
f39f21d8 2329
77c8cf41 2330EPOC update after Perl 5.6.0. See README.epoc.
f39f21d8 2331
2332=item *
2333
77c8cf41 2334FreeBSD 3.*
f39f21d8 2335
77c8cf41 2336Perl now works on post-3.0 FreeBSDs.
f39f21d8 2337
2338=item *
2339
77c8cf41 2340HP-UX
2341
8cbf54fa 2342README.hpux updated; C<Configure -Duse64bitall> now works;
2343now uses HP-UX malloc instead of Perl malloc.
f39f21d8 2344
2345=item *
2346
77c8cf41 2347IRIX
f39f21d8 2348
77c8cf41 2349Numerous compilation flag and hint enhancements; accidental mixing
2350of 32-bit and 64-bit libraries (a doomed attempt) made much harder.
f39f21d8 2351
77c8cf41 2352=item *
f39f21d8 2353
77c8cf41 2354Linux
f39f21d8 2355
e1f170bd 2356=over 8
2357
2358=item *
2359
77c8cf41 2360Long doubles should now work (see INSTALL).
f39f21d8 2361
2362=item *
2363
e1f170bd 2364Linux previously had problems related to sockaddrlen when using
e6dc8c81 2365accept(), recvfrom() (in Perl: recv()), getpeername(), and
2366getsockname().
e1f170bd 2367
2368=back
2369
2370=item *
2371
8939ba94 2372Mac OS Classic
f39f21d8 2373
8939ba94 2374Compilation of the standard Perl distribution in Mac OS Classic should
2375now work if you have the Metrowerks development environment and the
2376missing Mac-specific toolkit bits. Contact the macperl mailing list
2377for details.
f39f21d8 2378
2379=item *
2380
77c8cf41 2381MPE/iX
f39f21d8 2382
77c8cf41 2383MPE/iX update after Perl 5.6.0. See README.mpeix.
f39f21d8 2384
2385=item *
2386
27cc4b77 2387NetBSD/threads: try installing the GNU pth (should be in the
2388packages collection, or http://www.gnu.org/software/pth/),
2389and Configure with -Duseithreads.
2390
2391=item *
2392
77c8cf41 2393NetBSD/sparc
f39f21d8 2394
77c8cf41 2395Perl now works on NetBSD/sparc.
f39f21d8 2396
2397=item *
2398
77c8cf41 2399OS/2
f39f21d8 2400
77c8cf41 2401Now works with usethreads (see INSTALL).
f39f21d8 2402
2403=item *
2404
77c8cf41 2405Solaris
f39f21d8 2406
77c8cf41 240764-bitness using the Sun Workshop compiler now works.
f39f21d8 2408
2409=item *
2410
11d33b1d 2411Stratus VOS
2412
2413The native build method requires at least VOS Release 14.5.0
2414and GNU C++/GNU Tools 2.0.1 or later. The Perl pack function
2415now maps overflowed values to +infinity and underflowed values
2416to -infinity.
2417
2418=item *
2419
77c8cf41 2420Tru64 (aka Digital UNIX, aka DEC OSF/1)
f39f21d8 2421
77c8cf41 2422The operating system version letter now recorded in $Config{osvers}.
2423Allow compiling with gcc (previously explicitly forbidden). Compiling
2424with gcc still not recommended because buggy code results, even with
2425gcc 2.95.2.
f39f21d8 2426
2427=item *
2428
77c8cf41 2429Unicos
2430
2431Fixed various alignment problems that lead into core dumps either
2432during build or later; no longer dies on math errors at runtime;
2433now using full quad integers (64 bits), previously was using
2434only 46 bit integers for speed.
f39f21d8 2435
2436=item *
2437
77c8cf41 2438VMS
2439
2440chdir() now works better despite a CRT bug; now works with MULTIPLICITY
2441(see INSTALL); now works with Perl's malloc.
f39f21d8 2442
00bb525a 2443The tainting of C<%ENV> elements via C<keys> or C<values> was previously
2444unimplemented. It now works as documented.
2445
2446The C<waitpid> emulation has been improved. The worst bug (now fixed)
2447was that a pid of -1 would cause a wildcard search of all processes on
2d9f3838 2448the system.
00bb525a 2449
2450POSIX-style signals are now emulated much better on VMS versions prior
2451to 7.0.
2452
2453The C<system> function and backticks operator have improved
2454functionality and better error handling.
2455
161720b2 2456File access tests now use current process privileges rather than the
2457user's default privileges, which could sometimes result in a mismatch
2458between reported access and actual access.
2459
2d9f3838 2460There is a new C<kill> implementation based on C<sys$sigprc> that allows
2461older VMS systems (pre-7.0) to use C<kill> to send signals rather than
2462simply force exit. This implementation also allows later systems to
2463call C<kill> from within a signal handler.
2464
2465Iterative logical name translations are now limited to 10 iterations in
2466imitation of SHOW LOGICAL and other OpenVMS facilities.
2467
f39f21d8 2468=item *
2469
77c8cf41 2470Windows
f39f21d8 2471
77c8cf41 2472=over 8
f39f21d8 2473
2474=item *
2475
77c8cf41 2476accept() no longer leaks memory.
f39f21d8 2477
2478=item *
2479
e1f170bd 2480Borland C++ v5.5 is now a supported compiler that can build Perl.
2481However, the generated binaries continue to be incompatible with those
2482generated by the other supported compilers (GCC and Visual C++).
2483
2484=item *
2485
77c8cf41 2486Better chdir() return value for a non-existent directory.
f39f21d8 2487
77c8cf41 2488=item *
f39f21d8 2489
e1f170bd 2490Duping socket handles with open(F, ">&MYSOCK") now works under Windows 9x.
2491
2492=item *
2493
77c8cf41 2494New %ENV entries now propagate to subprocesses.
f39f21d8 2495
2496=item *
2497
44da0e71 2498Current directory entries in %ENV are now correctly propagated to child
2499processes.
2500
2501=item *
2502
77c8cf41 2503$ENV{LIB} now used to search for libs under Visual C.
2504
2505=item *
2506
44da0e71 2507fork() emulation has been improved in various ways, but still continues
2508to be experimental. See L<perlfork> for known bugs and caveats.
e1f170bd 2509
2510=item *
2511
77c8cf41 2512A failed (pseudo)fork now returns undef and sets errno to EAGAIN.
f39f21d8 2513
2514=item *
2515
44da0e71 2516Win32::GetCwd() correctly returns C:\ instead of C: when at the drive root.
2517Other bugs in chdir() and Cwd::cwd() have also been fixed.
2518
2519=item *
2520
e1f170bd 2521HTML files will be installed in c:\perl\html instead of c:\perl\lib\pod\html
2522
2523=item *
2524
2525The makefiles now provide a single switch to bulk-enable all the features
2526enabled in ActiveState ActivePerl (a popular Win32 binary distribution).
2527
2528=item *
2529
77c8cf41 2530Allow REG_EXPAND_SZ keys in the registry.
f39f21d8 2531
2532=item *
2533
77c8cf41 2534Can now send() from all threads, not just the first one.
f39f21d8 2535
2536=item *
2537
77c8cf41 2538Fake signal handling reenabled, bugs and all.
f39f21d8 2539
2540=item *
2541
44da0e71 2542%SIG has been enabled under USE_ITHREADS, but its use is completely
2543unsupported under all configurations.
2544
2545=item *
2546
77c8cf41 2547Less stack reserved per thread so that more threads can run
2548concurrently. (Still 16M per thread.)
f39f21d8 2549
2550=item *
2551
8cbf54fa 2552C<< File::Spec->tmpdir() >> now prefers C:/temp over /tmp
77c8cf41 2553(works better when perl is running as service).
f39f21d8 2554
2555=item *
2556
77c8cf41 2557Better UNC path handling under ithreads.
f39f21d8 2558
2559=item *
2560
e6dc8c81 2561wait(), waitpid(), and backticks now return the correct exit status
2562under Windows 9x.
f39f21d8 2563
2564=item *
2565
fa1a788e 2566Win64 compilation is now supported.
2567
2568=item *
2569
77c8cf41 2570winsock handle leak fixed.
f39f21d8 2571
2572=back
2573
77c8cf41 2574=back
f39f21d8 2575
77c8cf41 2576=head1 New or Changed Diagnostics
f39f21d8 2577
ba370e9b 2578=over 4
2579
2580=item *
2581
12bcd1a6 2582The lexical warnings category "deprecated" is no longer a sub-category
2583of the "syntax" category. It is now a top-level category in its own
2584right.
2585
2586=item *
2587
77c8cf41 2588All regular expression compilation error messages are now hopefully
2589easier to understand both because the error message now comes before
2590the failed regex and because the point of failure is now clearly
ba370e9b 2591marked by a C<E<lt>-- HERE> marker.
2592
2593=item *
f39f21d8 2594
77c8cf41 2595The various "opened only for", "on closed", "never opened" warnings
2596drop the C<main::> prefix for filehandles in the C<main> package,
bea4d472 2597for example C<STDIN> instead of C<main::STDIN>.
f39f21d8 2598
ba370e9b 2599=item *
2600
77c8cf41 2601The "Unrecognized escape" warning has been extended to include C<\8>,
2602C<\9>, and C<\_>. There is no need to escape any of the C<\w> characters.
f39f21d8 2603
ba370e9b 2604=item *
f39f21d8 2605
77c8cf41 2606Two new debugging options have been added: if you have compiled your
2607Perl with debugging, you can use the -DT and -DR options to trace
2608tokenising and to add reference counts to displaying variables,
2609respectively.
f39f21d8 2610
2611=item *
2612
2bcb0b45 2613The debugger (perl5db.pl) has been modified to present a more
2614consistent commands interface, via (CommandSet=580). perl5db.t was
2615also added to test the changes, and as a placeholder for further tests.
492652be 2616
2bcb0b45 2617See L<perldebug>.
492652be 2618
2619=item *
2620
9000bd02 2621The debugger has a new C<dumpDepth> option to control the maximum
2622depth to which nested structures are dumped. The C<x> command has
2623been extended so that C<x N EXPR> dumps out the value of I<EXPR> to a
2624depth of at most I<N> levels.
2625
2626=item *
2627
2bcb0b45 2628The debugger can now show lexical variables if you have the CPAN
2629module PadWalker installed.
2630
2631=item *
2632
77c8cf41 2633If an attempt to use a (non-blessed) reference as an array index
2634is made, a warning is given.
f39f21d8 2635
2636=item *
2637
77c8cf41 2638C<push @a;> and C<unshift @a;> (with no values to push or unshift)
6e6372ba 2639now give a warning. This may be a problem for generated and evaled
77c8cf41 2640code.
f39f21d8 2641
ba370e9b 2642=item *
2643
2644If you try to L<perlfunc/pack> a number less than 0 or larger than 255
2645using the C<"C"> format you will get an optional warning. Similarly
2646for the C<"c"> format and a number less than -128 or more than 127.
2647
2648=item *
2649
2650Certain regex modifiers such as C<(?o)> make sense only if applied to
0d4213c3 2651the entire regex. You will get an optional warning if you try to do
2652otherwise.
ba370e9b 2653
2654=item *
2655
0d4213c3 2656Using arrays or hashes as references (e.g. C<< %foo->{bar} >>
c2e23569 2657has been deprecated for a while. Now you will get an optional warning.
ba370e9b 2658
608dbdb1 2659=item *
2660
2661Using C<sort> in scalar context now issues an optional warning.
2662This didn't do anything useful, as the sort was not performed.
2663
f39f21d8 2664=back
2665
77c8cf41 2666=head1 Changed Internals
f39f21d8 2667
2668=over 4
2669
2670=item *
2671
77c8cf41 2672perlapi.pod (a companion to perlguts) now attempts to document the
2673internal API.
f39f21d8 2674
2675=item *
2676
77c8cf41 2677You can now build a really minimal perl called microperl.
2678Building microperl does not require even running Configure;
2679C<make -f Makefile.micro> should be enough. Beware: microperl makes
2680many assumptions, some of which may be too bold; the resulting
2681executable may crash or otherwise misbehave in wondrous ways.
2682For careful hackers only.
f39f21d8 2683
2684=item *
2685
c2e23569 2686Added rsignal(), whichsig(), do_join(), op_clear, op_null,
2687ptr_table_clear(), ptr_table_free(), sv_setref_uv(), and several UTF-8
2688interfaces to the publicised API. For the full list of the available
2689APIs see L<perlapi>.
f39f21d8 2690
2691=item *
2692
77c8cf41 2693Made possible to propagate customised exceptions via croak()ing.
f39f21d8 2694
77c8cf41 2695=item *
f39f21d8 2696
95f0a2f1 2697Now xsubs can have attributes just like subs. (Well, at least the
2698built-in attributes.)
f39f21d8 2699
2700=item *
2701
77c8cf41 2702dTHR and djSP have been obsoleted; the former removed (because it's
2703a no-op) and the latter replaced with dSP.
f39f21d8 2704
2705=item *
2706
61947107 2707PERL_OBJECT has been completely removed.
2708
2709=item *
2710
ba370e9b 2711The MAGIC constants (e.g. C<'P'>) have been macrofied
2712(e.g. C<PERL_MAGIC_TIED>) for better source code readability
2713and maintainability.
2714
2715=item *
2716
2717The regex compiler now maintains a structure that identifies nodes in
2718the compiled bytecode with the corresponding syntactic features of the
2719original regex expression. The information is attached to the new
2720C<offsets> member of the C<struct regexp>. See L<perldebguts> for more
2721complete information.
2722
2723=item *
2724
2725The C code has been made much more C<gcc -Wall> clean. Some warning
2726messages still remain in some platforms, so if you are compiling with
2727gcc you may see some warnings about dubious practices. The warnings
2728are being worked on.
2729
2730=item *
2731
2732F<perly.c>, F<sv.c>, and F<sv.h> have now been extensively commented.
2733
2734=item *
2735
61947107 2736Documentation on how to use the Perl source repository has been added
2737to F<Porting/repository.pod>.
f39f21d8 2738
888aee59 2739=item *
2740
c2e23569 2741There are now several profiling make targets.
888aee59 2742
77c8cf41 2743=back
f39f21d8 2744
77c8cf41 2745=head1 Security Vulnerability Closed
f39f21d8 2746
77c8cf41 2747(This change was already made in 5.7.0 but bears repeating here.)
f39f21d8 2748
77c8cf41 2749A potential security vulnerability in the optional suidperl component
2750of Perl was identified in August 2000. suidperl is neither built nor
2751installed by default. As of November 2001 the only known vulnerable
2752platform is Linux, most likely all Linux distributions. CERT and
2753various vendors and distributors have been alerted about the vulnerability.
2754See http://www.cpan.org/src/5.0/sperl-2000-08-05/sperl-2000-08-05.txt
2755for more information.
f39f21d8 2756
77c8cf41 2757The problem was caused by Perl trying to report a suspected security
2758exploit attempt using an external program, /bin/mail. On Linux
2759platforms the /bin/mail program had an undocumented feature which
2760when combined with suidperl gave access to a root shell, resulting in
2761a serious compromise instead of reporting the exploit attempt. If you
2762don't have /bin/mail, or if you have 'safe setuid scripts', or if
2763suidperl is not installed, you are safe.
f39f21d8 2764
77c8cf41 2765The exploit attempt reporting feature has been completely removed from
2766Perl 5.8.0 (and the maintenance release 5.6.1, and it was removed also
2767from all the Perl 5.7 releases), so that particular vulnerability
2768isn't there anymore. However, further security vulnerabilities are,
ba370e9b 2769unfortunately, always possible. The suidperl functionality is most
2770probably going to be removed in Perl 5.10. In any case, suidperl
2771should only be used by security experts who know exactly what they are
2772doing and why they are using suidperl instead of some other solution
1577cd80 2773such as sudo ( see http://www.courtesan.com/sudo/ ).
77c8cf41 2774
2775=head1 New Tests
2776
5fb8b090 2777Several new tests have been added, especially for the F<lib> and F<ext>
2778subsections. There are now about 65 000 individual tests (spread over
2779about 700 test scripts), in the regression suite (5.6.1 has about
278011700 tests, in 258 test scripts) Many of the new tests are of course
2781introduced by the new modules, but still in general Perl is now more
2782thoroughly tested.
76663d67 2783
2784Because of the large number of tests, running the regression suite
2785will take considerably longer time than it used to: expect the suite
e6dc8c81 2786to take up to 4-5 times longer to run than in perl 5.6. On a really
d1eb8299 2787fast machine you can hope to finish the suite in about 6-8 minutes
76663d67 2788(wallclock time).
77c8cf41 2789
2790The tests are now reported in a different order than in earlier Perls.
2791(This happens because the test scripts from under t/lib have been moved
2792to be closer to the library/extension they are testing.)
2793
f39f21d8 2794=head1 Known Problems
2795
f39f21d8 2796=head2 AIX
2797
2798=over 4
2799
2800=item *
2801
ee81c259 2802If using the AIX native make command, instead of just "make" issue
2803"make all". In some setups the former has been known to spuriously
2804also try to run "make install". Alternatively, you may want to use
2805GNU make.
2806
2807=item *
2808
e6dc8c81 2809In AIX 4.2, Perl extensions that use C++ functions that use statics
f39f21d8 2810may have problems in that the statics are not getting initialized.
e6dc8c81 2811In newer AIX releases, this has been solved by linking Perl with
f39f21d8 2812the libC_r library, but unfortunately in AIX 4.2 the said library
2813has an obscure bug where the various functions related to time
2814(such as time() and gettimeofday()) return broken values, and
e6dc8c81 2815therefore in AIX 4.2 Perl is not linked against libC_r.
f39f21d8 2816
2817=item *
2818
2819vac 5.0.0.0 May Produce Buggy Code For Perl
2820
2821The AIX C compiler vac version 5.0.0.0 may produce buggy code,
e6dc8c81 2822resulting in a few random tests failing when run as part of "make
2823test", but when the failing tests are run by hand, they succeed.
2824We suggest upgrading to at least vac version 5.0.1.0, that has been
2825known to compile Perl correctly. "lslpp -L|grep vac.C" will tell
2826you the vac version. See README.aix.
f39f21d8 2827
0ea5284e 2828=item *
2829
2830If building threaded Perl, you may get compilation warning from pp_sys.c:
2831
2832 "pp_sys.c", line 4651.39: 1506-280 (W) Function argument assignment between types "unsigned char*" and "const void*" is not allowed.
2833
2834This is harmless; it is caused by the getnetbyaddr() and getnetbyaddr_r()
2835having slightly different types for their first argument.
2836
f39f21d8 2837=back
2838
8de75127 2839=head2 Alpha systems with old gccs fail several tests
2840
2841If you see op/pack, op/pat, op/regexp, or ext/Storable tests failing
2842in a Linux/alpha or *BSD/Alpha, it's probably time to upgrade your gcc.
2843gccs prior to 2.95.3 are definitely not good enough, and gcc 3.1 may
27940aee 2844be even better. (RedHat Linux/alpha with gcc 3.1 reported no problems,
2845as did Linux 2.4.18 with gcc 2.95.4.) (In Tru64, it is preferable to
2846use the bundled C compiler.)
8de75127 2847
d4432bb5 2848=head2 AmigaOS
2849
2850Perl 5.8.0 doesn't build in AmigaOS. It broke at some point
2851during the ithreads work and we could not find Amiga experts
2852to unbreak the problems.
2853
8c1bea16 2854=head2 BeOS
2855
2856The following tests fail on 5.8.0 Perl in BeOS Personal 5.03:
2857
2858 t/op/lfs............................FAILED at test 17
2859 t/op/magic..........................FAILED at test 24
8c1bea16 2860 ext/POSIX/t/sigaction...............FAILED at test 13
2861 ext/POSIX/t/waitpid.................FAILED at test 1
8c1bea16 2862
2863See L<perlbeos> (README.beos) for more details.
2864
d4432bb5 2865=head2 Cygwin "unable to remap"
2866
2867For example when building the Tk extension for Cygwin,
2868you may get an error message saying "unable to remap".
2869This is known problem with Cygwin, and a workaround is
2870detailed in here: http://sources.redhat.com/ml/cygwin/2001-12/msg00894.html
2871
bdcfa4c7 2872=head2 ext/threads/t/libc
2873
2874If this test fails, it indicates that your libc (C library) is not
2875threadsafe. This particular test stress tests the localtime() call to
2876find out whether it is threadsafe. See L<perlthrtut> for more information.
2877
9ffc0d0c 2878=head2 FreeBSD Failing locale Test 117 For ISO8859-15 Locales
2879
2880The ISO8859-15 locales may fail the locale test 117 in FreeBSD.
2881This is caused by the characters \xFF (y with diaeresis) and \xBE
2882(Y with diaeresis) not behaving correctly when being matched
2883case-insensitively.
2884
ac639f8f 2885=head2 IRIX fails ext/List/Util/t/shuffle.t
2886
2887IRIX with MIPSpro 7.3.1.3m compiler may fail the said List::Util test
2888by dumping core. This seems to be a compiler error since if compiled
2889with gcc no core dump ensues, and no failures on the said test on any
2890other platform.
2891
be61827f 2892=head2 Modifying $_ Inside for(..)
2893
2894 for (1..5) { $_++ }
2895
2896works without complaint. It shouldn't. (You should be able to
2897modify only lvalue elements inside the loops.) You can see the
2898correct behaviour by replacing the 1..5 with 1, 2, 3, 4, 5.
2899
696235b6 2900=head2 mod_perl 1.26 Doesn't Build With Threaded Perl
2901
2902Use mod_perl 1.27 or higher.
a08f42e9 2903
f39f21d8 2904=head2 lib/ftmp-security tests warn 'system possibly insecure'
2905
e6dc8c81 2906Don't panic. Read the 'make test' section of INSTALL instead.
f39f21d8 2907
be61827f 2908=head2 HP-UX lib/posix Subtest 9 Fails When LP64-Configured
f39f21d8 2909
2910If perl is configured with -Duse64bitall, the successful result of the
2911subtest 10 of lib/posix may arrive before the successful result of the
2912subtest 9, which confuses the test harness so much that it thinks the
2913subtest 9 failed.
2914
a95a6141 2915=head2 Linux with glibc 2.2.5 fails t/op/int subtest #6 with -Duse64bitint
2916
2917This is a known bug in the glibc 2.2.5 with long long integers.
2918( http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=65612 )
2919
f39f21d8 2920=head2 Linux With Sfio Fails op/misc Test 48
2921
2922No known fix.
2923
83943eac 2924=head2 libwww-perl (LWP) fails base/date #51
2925
2926Use libwww-perl 5.65 or later.
2927
a0aae13b 2928=head2 Mac OS X
2929
6aaad45d 2930Please remember to set your environment variable LC_ALL to "C"
2931(setenv LC_ALL C) before running "make test" to avoid a lot of
2932warnings about the broken locales of Mac OS X.
2933
6b9b4622 2934The following tests are known to fail in Mac OS X 10.1.5 because of
577cd409 2935buggy (old) implementations of Berkeley DB included in Mac OS X:
a0aae13b 2936
2937 Failed Test Stat Wstat Total Fail Failed List of Failed
2938 -------------------------------------------------------------------------
2939 ../ext/DB_File/t/db-btree.t 0 11 ?? ?? % ??
2940 ../ext/DB_File/t/db-recno.t 149 3 2.01% 61 63 65
a0aae13b 2941
3f1f789b 2942If you are building on a UFS partition, you will also probably see
f5dcdc4e 2943t/op/stat.t subtest #9 fail. This is caused by Darwin's UFS not
2944supporting inode change time.
3f1f789b 2945
7830a95b 2946Also the ext/POSIX/t/posix.t subtest #10 fails but it is skipped for
2947now because the failure is Apple's fault, not Perl's (blocked signals
2948are lost).
2949
e6dc8c81 2950If you Configure with ithreads, ext/threads/t/libc.t will fail. Again,
2951this is not Perl's fault-- the libc of Mac OS X is not threadsafe
2952(in this particular test, the localtime() call is found to be
2953threadunsafe.)
7830a95b 2954
7fc79a86 2955=head2 op/sprintf tests 91, 129, and 130
f39f21d8 2956
7fc79a86 2957The op/sprintf tests 91, 129, and 130 are known to fail on some platforms.
2958Examples include any platform using sfio, and Compaq/Tandem's NonStop-UX.
f39f21d8 2959
e6dc8c81 2960Test 91 is known to fail on QNX6 (nto), because C<sprintf '%e',0>
7fc79a86 2961incorrectly produces C<0.000000e+0> instead of C<0.000000e+00>.
f39f21d8 2962
e6dc8c81 2963For tests 129 and 130, the failing platforms do not comply with
2964the ANSI C Standard: lines 19ff on page 134 of ANSI X3.159 1989, to
7fc79a86 2965be exact. (They produce something other than "1" and "-1" when
e6dc8c81 2966formatting 0.6 and -0.6 using the printf format "%.0f"; most often,
7fc79a86 2967they produce "0" and "-0".)
f39f21d8 2968
0646842f 2969=head2 Solaris 2.5
2970
2971In case you are still using Solaris 2.5 (aka SunOS 5.5), you may
2972experience failures (the test core dumping) in lib/locale.t.
2973The suggested cure is to upgrade your Solaris.
2974
36f070cb 2975=head2 SUPER-UX (NEC SX)
2976
2977The following tests are known to fail on SUPER-UX:
2978
2979 op/64bitint...........................FAILED tests 29-30, 32-33, 35-36
2980 op/arith..............................FAILED tests 128-130
2981 op/pack...............................FAILED tests 25-5625
2982 op/pow................................
2983 op/taint..............................# msgsnd failed
2984 ../ext/IO/lib/IO/t/io_poll............FAILED tests 3-4
2985 ../ext/IPC/SysV/ipcsysv...............FAILED tests 2, 5-6
2986 ../ext/IPC/SysV/t/msg.................FAILED tests 2, 4-6
2987 ../ext/Socket/socketpair..............FAILED tests 12
2988 ../lib/IPC/SysV.......................FAILED tests 2, 5-6
2989 ../lib/warnings.......................FAILED tests 115-116, 118-119
2990
2991The op/pack failure ("Cannot compress negative numbers at op/pack.t line 126")
2992is serious but as of yet unsolved. It points at some problems with the
2993signedness handling of the C compiler, as do the 64bitint, arith, and pow
2994failures. Most of the rest point at problems with SysV IPC.
11d33b1d 2995
8cbf54fa 2996=head2 Term::ReadKey not working on Win32
19d05054 2997
2998Use Term::ReadKey 2.20 or later.
2999
7fc79a86 3000=head2 Failure of Thread (5.005-style) tests
f39f21d8 3001
6ba475fe 3002B<Note that support for 5.005-style threading is deprecated,
e6dc8c81 3003experimental and practically unsupported. In 5.10, it is expected
6ba475fe 3004to be removed.>
f39f21d8 3005
3006The following tests are known to fail due to fundamental problems in
3007the 5.005 threading implementation. These are not new failures--Perl
30085.005_0x has the same bugs, but didn't have these tests.
3009
c210e87b 3010 ../ext/B/t/xref.t 255 65280 14 12 85.71% 3-14
6123004a 3011 ../ext/List/Util/t/first.t 255 65280 7 4 57.14% 2 5-7
3012 ../lib/English.t 2 512 54 2 3.70% 2-3
c210e87b 3013 ../lib/ExtUtils/t/basic.t 1 256 17 1 5.88% 14
3014 ../lib/FileCache.t 5 1 20.00% 5
6123004a 3015 ../lib/Filter/Simple/t/data.t 6 3 50.00% 1-3
c210e87b 3016 ../lib/Filter/Simple/t/filter_onl 9 3 33.33% 1-2 5
3017 ../lib/Tie/File/t/31_autodefer.t 255 65280 65 32 49.23% 34-65
6123004a 3018 ../lib/autouse.t 10 1 10.00% 4
3019 op/flip.t 15 1 6.67% 15
fedd8cf1 3020
e6dc8c81 3021These failures are unlikely to get fixed as 5.005-style threads
9972c7af 3022are considered fundamentally broken. (Basically what happens is that
3023competing threads can corrupt shared global state.)
f39f21d8 3024
577cd409 3025=head2 Timing problems
3026
3027The following tests may fail intermittently because of timing
3028problems, for example if the system is heavily loaded.
3029
3030 t/op/alarm.t
3031 ext/Time/HiRes/HiRes.t
3032 lib/Benchmark.t
3033 lib/Memoize/t/expmod_t.t
3034 lib/Memoize/t/speed.t
3035
3036In case of failure please try running them manually, for example
3037
3038 ./perl -Ilib ext/Time/HiRes/HiRes.t
3039
f39f21d8 3040=head2 UNICOS
3041
d334a774 3042 ../lib/Math/Trig.t 26 1 3.85% 25
3043 ../lib/warnings.t 470 1 0.21% 429
f39f21d8 3044
8939dedc 3045The Trig.t failure is caused by the slighly differing (from IEEE)
3046floating point implementation of UNICOS. The warnings.t failure is
e6dc8c81 3047also related: the test assumes a certain floating point output format;
8939dedc 3048this assumption fails in UNICOS.
9972c7af 3049
cb3f5972 3050=head2 UNICOS/mk
3051
36f070cb 3052=head2 VOS (Stratus)
3053
3054When Perl is built using the native build process on VOS Release
305514.5.0 and GNU C++/GNU Tools 2.0.1, all attempted tests either
3056pass or result in TODO (ignored) failures.
3057
3d7e8424 3058=over 4
3059
3060=item *
3061
e6dc8c81 3062During Configure, the test
cb3f5972 3063
3064 Guessing which symbols your C compiler and preprocessor define...
3065
3066will probably fail with error messages like
3067
3068 CC-20 cc: ERROR File = try.c, Line = 3
3069 The identifier "bad" is undefined.
3070
3071 bad switch yylook 79bad switch yylook 79bad switch yylook 79bad switch yylook 79#ifdef A29K
3072 ^
3073
3074 CC-65 cc: ERROR File = try.c, Line = 3
3075 A semicolon is expected at this point.
3076
e6dc8c81 3077This is caused by a bug in the awk utility of UNICOS/mk. You can ignore
cb3f5972 3078the error, but it does cause a slight problem: you cannot fully
3079benefit from the h2ph utility (see L<h2ph>) that can be used to
3080convert C headers to Perl libraries, mainly used to be able to access
3081from Perl the constants defined using C preprocessor, cpp. Because of
e6dc8c81 3082the above error, parts of the converted headers will be invisible.
cb3f5972 3083Luckily, these days the need for h2ph is rare.
3084
3d7e8424 3085=item *
3086
e6dc8c81 3087If building Perl with interpreter threads (ithreads), the
3d7e8424 3088getgrent(), getgrnam(), and getgrgid() functions cannot return the
3089list of the group members due to a bug in the multithreaded support of
e6dc8c81 3090UNICOS/mk. What this means is that in list context the functions will
3d7e8424 3091return only three values, not four.
3092
3093=back
3094
f39f21d8 3095=head2 UTS
3096
e6dc8c81 3097There are a few known test failures, see L<perluts> (README.uts).
f39f21d8 3098
3099=head2 VMS
3100
161720b2 3101There should be no reported test failures with a default configuration,
3102though there are a number of tests marked TODO that point to areas
3103needing further debugging and/or porting work.
7207e29d 3104
f39f21d8 3105=head2 Win32
3106
e6dc8c81 3107In multi-CPU boxes, there are some problems with the I/O buffering:
cd34865e 3108some output may appear twice.
f39f21d8 3109
d34c32a4 3110=head2 XML::Parser not working
3111
3112Use XML::Parser 2.31 or later.
3113
7fc79a86 3114=head2 z/OS (OS/390)
3115
3116z/OS has rather many test failures but the situation is actually
e6dc8c81 3117better than it was in 5.6.0; it's just that so many new modules and
7fc79a86 3118tests have been added.
3119
dad95037 3120 Failed Test Stat Wstat Total Fail Failed List of Failed
c151f1b7 3121 ---------------------------------------------------------------------------
3122 ../ext/Data/Dumper/t/dumper.t 357 8 2.24% 311 314 325 327
84fad863 3123 331 333 337 339
7fc79a86 3124 ../ext/IO/lib/IO/t/io_unix.t 5 4 80.00% 2-5
e363f566 3125 ../ext/Storable/t/downgrade.t 12 3072 169 12 7.10% 14-15 46-47 78-79
60d6f83c 3126 110-111 150 161
84fad863 3127 ../lib/ExtUtils/t/Constant.t 121 30976 48 48 100.00% 1-48
7fc79a86 3128 ../lib/ExtUtils/t/Embed.t 9 9 100.00% 1-9
e363f566 3129 op/pat.t 910 7 0.77% 665 776 785 832-
3130 834 845
7fc79a86 3131 op/sprintf.t 224 3 1.34% 98 100 136
3132 op/tr.t 97 5 5.15% 63 71-74
dcdcee7d 3133 uni/fold.t 780 6 0.77% 61 169 196 661
3134 710-711
7fc79a86 3135
e6dc8c81 3136The failures in dumper.t and downgrade.t are problems in the tests,
3137those in io_unix and sprintf are problems in the USS (UDP sockets
3138and printf formats). The pat, tr, and fold failures are genuine Perl
3139problems caused by EBCDIC (and in the pat and fold cases, combining
3140that with Unicode). The Constant and Embed are probably problems
3141in the tests (since they test Perl's ability to build extensions,
3142and that seems to be working reasonably well.)
9972c7af 3143
aecce728 3144=head2 Localising Tied Arrays and Hashes Is Broken
3145
3146 local %tied_array;
3147
8602d933 3148doesn't work as one would expect: the old value is restored
3149incorrectly. This will be changed in a future release, but we don't
e6dc8c81 3150know yet what the new semantics will exactly be. In any case, the
8602d933 3151change will break existing code that relies on the current
3152(ill-defined) semantics, so just avoid doing this in general.
aecce728 3153
9903068f 3154=head2 Self-tying Problems
f39f21d8 3155
3156Self-tying of arrays and hashes is broken in rather deep and
3157hard-to-fix ways. As a stop-gap measure to avoid people from getting
e6dc8c81 3158frustrated at the mysterious results (core dumps, most often), it is
3159forbidden for now (you will get a fatal error even from an attempt).
f39f21d8 3160
bd301675 3161A change to self-tying of globs has caused them to be recursively
3162referenced (see: L<perlobj/"Two-Phased Garbage Collection">). You
3163will now need an explicit untie to destroy a self-tied glob. This
3164behaviour may be fixed at a later date.
9903068f 3165
bd301675 3166Self-tying of scalars and IO thingies works.
9903068f 3167
f39f21d8 3168=head2 Building Extensions Can Fail Because Of Largefiles
3169
3170Some extensions like mod_perl are known to have issues with
3171`largefiles', a change brought by Perl 5.6.0 in which file offsets
3172default to 64 bits wide, where supported. Modules may fail to compile
e6dc8c81 3173at all, or they may compile and work incorrectly. Currently, there
3174is no good solution for the problem, but Configure now provides
3175appropriate non-largefile ccflags, ldflags, libswanted, and libs
3176in the %Config hash (e.g., $Config{ccflags_nolargefiles}) so the
3177extensions that are having problems can try configuring themselves
3178without the largefileness. This is admittedly not a clean solution,
3179and the solution may not even work at all. One potential failure is
3180whether one can (or, if one can, whether it's a good idea to) link
3181together at all binaries with different ideas about file offsets;
3182all this is platform-dependent.
f39f21d8 3183
aecce728 3184=head2 Unicode Support on EBCDIC Still Spotty
3185
3186Though mostly working, Unicode support still has problem spots on
3187EBCDIC platforms. One such known spot are the C<\p{}> and C<\P{}>
3188regular expression constructs for code points less than 256: the
c5af7db2 3189C<pP> are testing for Unicode code points, not knowing about EBCDIC.
aecce728 3190
c5af7db2 3191=head2 The Compiler Suite Is Still Very Experimental
f39f21d8 3192
44da0e71 3193The compiler suite is slowly getting better but it continues to be
3194highly experimental. Use in production environments is discouraged.
f39f21d8 3195
c4f1ce08 3196=head2 The Long Double Support Is Still Experimental
f39f21d8 3197
3198The ability to configure Perl's numbers to use "long doubles",
3199floating point numbers of hopefully better accuracy, is still
3200experimental. The implementations of long doubles are not yet
3201widespread and the existing implementations are not quite mature
3202or standardised, therefore trying to support them is a rare
3203and moving target. The gain of more precision may also be offset
3204by slowdown in computations (more bits to move around, and the
3205operations are more likely to be executed by less optimised
3206libraries).
33a87e58 3207
c4f1ce08 3208=head2 Seen In Perl 5.7 But Gone Now
3209
c4f1ce08 3210C<Time::Piece> (previously known as C<Time::Object>) was removed
3211because it was felt that it didn't have enough value in it to be a
3212core module. It is still a useful module, though, and is available
3213from the CPAN.
3214
e6dc8c81 3215Perl 5.8 unfortunately does not build anymore on AmigaOS;
3216this broke accidentally at some point. Since there are not that many
c5af7db2 3217Amiga developers available, we could not get this fixed and tested in
3218time for 5.8.0.
3219
cc0fca54 3220=head1 Reporting Bugs
3221
d4ad863d 3222If you find what you think is a bug, you might check the articles
3223recently posted to the comp.lang.perl.misc newsgroup and the perl
e6dc8c81 3224bug database at http://bugs.perl.org/ . There may also be
f224927c 3225information at http://www.perl.com/ , the Perl Home Page.
cc0fca54 3226
3227If you believe you have an unreported bug, please run the B<perlbug>
3228program included with your release. Be sure to trim your bug down
3229to a tiny but sufficient test case. Your bug report, along with the
d4ad863d 3230output of C<perl -V>, will be sent off to perlbug@perl.org to be
cc0fca54 3231analysed by the Perl porting team.
3232
3233=head1 SEE ALSO
3234
3235The F<Changes> file for exhaustive details on what changed.
3236
3237The F<INSTALL> file for how to build Perl.
3238
3239The F<README> file for general stuff.
3240
3241The F<Artistic> and F<Copying> files for copyright information.
3242
3243=head1 HISTORY
3244
d468ca04 3245Written by Jarkko Hietaniemi <F<jhi@iki.fi>>.
cc0fca54 3246
3247=cut