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