1*0Sstevel@tonic-gate=head1 NAME 2*0Sstevel@tonic-gate 3*0Sstevel@tonic-gateperl561delta - what's new for perl v5.6.x 4*0Sstevel@tonic-gate 5*0Sstevel@tonic-gate=head1 DESCRIPTION 6*0Sstevel@tonic-gate 7*0Sstevel@tonic-gateThis document describes differences between the 5.005 release and the 5.6.1 8*0Sstevel@tonic-gaterelease. 9*0Sstevel@tonic-gate 10*0Sstevel@tonic-gate=head1 Summary of changes between 5.6.0 and 5.6.1 11*0Sstevel@tonic-gate 12*0Sstevel@tonic-gateThis section contains a summary of the changes between the 5.6.0 release 13*0Sstevel@tonic-gateand the 5.6.1 release. More details about the changes mentioned here 14*0Sstevel@tonic-gatemay be found in the F<Changes> files that accompany the Perl source 15*0Sstevel@tonic-gatedistribution. See L<perlhack> for pointers to online resources where you 16*0Sstevel@tonic-gatecan inspect the individual patches described by these changes. 17*0Sstevel@tonic-gate 18*0Sstevel@tonic-gate=head2 Security Issues 19*0Sstevel@tonic-gate 20*0Sstevel@tonic-gatesuidperl will not run /bin/mail anymore, because some platforms have 21*0Sstevel@tonic-gatea /bin/mail that is vulnerable to buffer overflow attacks. 22*0Sstevel@tonic-gate 23*0Sstevel@tonic-gateNote that suidperl is neither built nor installed by default in 24*0Sstevel@tonic-gateany recent version of perl. Use of suidperl is highly discouraged. 25*0Sstevel@tonic-gateIf you think you need it, try alternatives such as sudo first. 26*0Sstevel@tonic-gateSee http://www.courtesan.com/sudo/ . 27*0Sstevel@tonic-gate 28*0Sstevel@tonic-gate=head2 Core bug fixes 29*0Sstevel@tonic-gate 30*0Sstevel@tonic-gateThis is not an exhaustive list. It is intended to cover only the 31*0Sstevel@tonic-gatesignificant user-visible changes. 32*0Sstevel@tonic-gate 33*0Sstevel@tonic-gate=over 34*0Sstevel@tonic-gate 35*0Sstevel@tonic-gate=item C<UNIVERSAL::isa()> 36*0Sstevel@tonic-gate 37*0Sstevel@tonic-gateA bug in the caching mechanism used by C<UNIVERSAL::isa()> that affected 38*0Sstevel@tonic-gatebase.pm has been fixed. The bug has existed since the 5.005 releases, 39*0Sstevel@tonic-gatebut wasn't tickled by base.pm in those releases. 40*0Sstevel@tonic-gate 41*0Sstevel@tonic-gate=item Memory leaks 42*0Sstevel@tonic-gate 43*0Sstevel@tonic-gateVarious cases of memory leaks and attempts to access uninitialized memory 44*0Sstevel@tonic-gatehave been cured. See L</"Known Problems"> below for further issues. 45*0Sstevel@tonic-gate 46*0Sstevel@tonic-gate=item Numeric conversions 47*0Sstevel@tonic-gate 48*0Sstevel@tonic-gateNumeric conversions did not recognize changes in the string value 49*0Sstevel@tonic-gateproperly in certain circumstances. 50*0Sstevel@tonic-gate 51*0Sstevel@tonic-gateIn other situations, large unsigned numbers (those above 2**31) could 52*0Sstevel@tonic-gatesometimes lose their unsignedness, causing bogus results in arithmetic 53*0Sstevel@tonic-gateoperations. 54*0Sstevel@tonic-gate 55*0Sstevel@tonic-gateInteger modulus on large unsigned integers sometimes returned 56*0Sstevel@tonic-gateincorrect values. 57*0Sstevel@tonic-gate 58*0Sstevel@tonic-gatePerl 5.6.0 generated "not a number" warnings on certain conversions where 59*0Sstevel@tonic-gateprevious versions didn't. 60*0Sstevel@tonic-gate 61*0Sstevel@tonic-gateThese problems have all been rectified. 62*0Sstevel@tonic-gate 63*0Sstevel@tonic-gateInfinity is now recognized as a number. 64*0Sstevel@tonic-gate 65*0Sstevel@tonic-gate=item qw(a\\b) 66*0Sstevel@tonic-gate 67*0Sstevel@tonic-gateIn Perl 5.6.0, qw(a\\b) produced a string with two backslashes instead 68*0Sstevel@tonic-gateof one, in a departure from the behavior in previous versions. The 69*0Sstevel@tonic-gateolder behavior has been reinstated. 70*0Sstevel@tonic-gate 71*0Sstevel@tonic-gate=item caller() 72*0Sstevel@tonic-gate 73*0Sstevel@tonic-gatecaller() could cause core dumps in certain situations. Carp was sometimes 74*0Sstevel@tonic-gateaffected by this problem. 75*0Sstevel@tonic-gate 76*0Sstevel@tonic-gate=item Bugs in regular expressions 77*0Sstevel@tonic-gate 78*0Sstevel@tonic-gatePattern matches on overloaded values are now handled correctly. 79*0Sstevel@tonic-gate 80*0Sstevel@tonic-gatePerl 5.6.0 parsed m/\x{ab}/ incorrectly, leading to spurious warnings. 81*0Sstevel@tonic-gateThis has been corrected. 82*0Sstevel@tonic-gate 83*0Sstevel@tonic-gateThe RE engine found in Perl 5.6.0 accidentally pessimised certain kinds 84*0Sstevel@tonic-gateof simple pattern matches. These are now handled better. 85*0Sstevel@tonic-gate 86*0Sstevel@tonic-gateRegular expression debug output (whether through C<use re 'debug'> 87*0Sstevel@tonic-gateor via C<-Dr>) now looks better. 88*0Sstevel@tonic-gate 89*0Sstevel@tonic-gateMulti-line matches like C<"a\nxb\n" =~ /(?!\A)x/m> were flawed. The 90*0Sstevel@tonic-gatebug has been fixed. 91*0Sstevel@tonic-gate 92*0Sstevel@tonic-gateUse of $& could trigger a core dump under some situations. This 93*0Sstevel@tonic-gateis now avoided. 94*0Sstevel@tonic-gate 95*0Sstevel@tonic-gateMatch variables $1 et al., weren't being unset when a pattern match 96*0Sstevel@tonic-gatewas backtracking, and the anomaly showed up inside C</...(?{ ... }).../> 97*0Sstevel@tonic-gateetc. These variables are now tracked correctly. 98*0Sstevel@tonic-gate 99*0Sstevel@tonic-gatepos() did not return the correct value within s///ge in earlier 100*0Sstevel@tonic-gateversions. This is now handled correctly. 101*0Sstevel@tonic-gate 102*0Sstevel@tonic-gate=item "slurp" mode 103*0Sstevel@tonic-gate 104*0Sstevel@tonic-gatereadline() on files opened in "slurp" mode could return an extra "" at 105*0Sstevel@tonic-gatethe end in certain situations. This has been corrected. 106*0Sstevel@tonic-gate 107*0Sstevel@tonic-gate=item Autovivification of symbolic references to special variables 108*0Sstevel@tonic-gate 109*0Sstevel@tonic-gateAutovivification of symbolic references of special variables described 110*0Sstevel@tonic-gatein L<perlvar> (as in C<${$num}>) was accidentally disabled. This works 111*0Sstevel@tonic-gateagain now. 112*0Sstevel@tonic-gate 113*0Sstevel@tonic-gate=item Lexical warnings 114*0Sstevel@tonic-gate 115*0Sstevel@tonic-gateLexical warnings now propagate correctly into C<eval "...">. 116*0Sstevel@tonic-gate 117*0Sstevel@tonic-gateC<use warnings qw(FATAL all)> did not work as intended. This has been 118*0Sstevel@tonic-gatecorrected. 119*0Sstevel@tonic-gate 120*0Sstevel@tonic-gateLexical warnings could leak into other scopes in some situations. 121*0Sstevel@tonic-gateThis is now fixed. 122*0Sstevel@tonic-gate 123*0Sstevel@tonic-gatewarnings::enabled() now reports the state of $^W correctly if the caller 124*0Sstevel@tonic-gateisn't using lexical warnings. 125*0Sstevel@tonic-gate 126*0Sstevel@tonic-gate=item Spurious warnings and errors 127*0Sstevel@tonic-gate 128*0Sstevel@tonic-gatePerl 5.6.0 could emit spurious warnings about redefinition of dl_error() 129*0Sstevel@tonic-gatewhen statically building extensions into perl. This has been corrected. 130*0Sstevel@tonic-gate 131*0Sstevel@tonic-gate"our" variables could result in bogus "Variable will not stay shared" 132*0Sstevel@tonic-gatewarnings. This is now fixed. 133*0Sstevel@tonic-gate 134*0Sstevel@tonic-gate"our" variables of the same name declared in two sibling blocks 135*0Sstevel@tonic-gateresulted in bogus warnings about "redeclaration" of the variables. 136*0Sstevel@tonic-gateThe problem has been corrected. 137*0Sstevel@tonic-gate 138*0Sstevel@tonic-gate=item glob() 139*0Sstevel@tonic-gate 140*0Sstevel@tonic-gateCompatibility of the builtin glob() with old csh-based glob has been 141*0Sstevel@tonic-gateimproved with the addition of GLOB_ALPHASORT option. See C<File::Glob>. 142*0Sstevel@tonic-gate 143*0Sstevel@tonic-gateFile::Glob::glob() has been renamed to File::Glob::bsd_glob() 144*0Sstevel@tonic-gatebecause the name clashes with the builtin glob(). The older 145*0Sstevel@tonic-gatename is still available for compatibility, but is deprecated. 146*0Sstevel@tonic-gate 147*0Sstevel@tonic-gateSpurious syntax errors generated in certain situations, when glob() 148*0Sstevel@tonic-gatecaused File::Glob to be loaded for the first time, have been fixed. 149*0Sstevel@tonic-gate 150*0Sstevel@tonic-gate=item Tainting 151*0Sstevel@tonic-gate 152*0Sstevel@tonic-gateSome cases of inconsistent taint propagation (such as within hash 153*0Sstevel@tonic-gatevalues) have been fixed. 154*0Sstevel@tonic-gate 155*0Sstevel@tonic-gateThe tainting behavior of sprintf() has been rationalized. It does 156*0Sstevel@tonic-gatenot taint the result of floating point formats anymore, making the 157*0Sstevel@tonic-gatebehavior consistent with that of string interpolation. 158*0Sstevel@tonic-gate 159*0Sstevel@tonic-gate=item sort() 160*0Sstevel@tonic-gate 161*0Sstevel@tonic-gateArguments to sort() weren't being provided the right wantarray() context. 162*0Sstevel@tonic-gateThe comparison block is now run in scalar context, and the arguments to 163*0Sstevel@tonic-gatebe sorted are always provided list context. 164*0Sstevel@tonic-gate 165*0Sstevel@tonic-gatesort() is also fully reentrant, in the sense that the sort function 166*0Sstevel@tonic-gatecan itself call sort(). This did not work reliably in previous releases. 167*0Sstevel@tonic-gate 168*0Sstevel@tonic-gate=item #line directives 169*0Sstevel@tonic-gate 170*0Sstevel@tonic-gate#line directives now work correctly when they appear at the very 171*0Sstevel@tonic-gatebeginning of C<eval "...">. 172*0Sstevel@tonic-gate 173*0Sstevel@tonic-gate=item Subroutine prototypes 174*0Sstevel@tonic-gate 175*0Sstevel@tonic-gateThe (\&) prototype now works properly. 176*0Sstevel@tonic-gate 177*0Sstevel@tonic-gate=item map() 178*0Sstevel@tonic-gate 179*0Sstevel@tonic-gatemap() could get pathologically slow when the result list it generates 180*0Sstevel@tonic-gateis larger than the source list. The performance has been improved for 181*0Sstevel@tonic-gatecommon scenarios. 182*0Sstevel@tonic-gate 183*0Sstevel@tonic-gate=item Debugger 184*0Sstevel@tonic-gate 185*0Sstevel@tonic-gateDebugger exit code now reflects the script exit code. 186*0Sstevel@tonic-gate 187*0Sstevel@tonic-gateCondition C<"0"> in breakpoints is now treated correctly. 188*0Sstevel@tonic-gate 189*0Sstevel@tonic-gateThe C<d> command now checks the line number. 190*0Sstevel@tonic-gate 191*0Sstevel@tonic-gateC<$.> is no longer corrupted by the debugger. 192*0Sstevel@tonic-gate 193*0Sstevel@tonic-gateAll debugger output now correctly goes to the socket if RemotePort 194*0Sstevel@tonic-gateis set. 195*0Sstevel@tonic-gate 196*0Sstevel@tonic-gate=item PERL5OPT 197*0Sstevel@tonic-gate 198*0Sstevel@tonic-gatePERL5OPT can be set to more than one switch group. Previously, 199*0Sstevel@tonic-gateit used to be limited to one group of options only. 200*0Sstevel@tonic-gate 201*0Sstevel@tonic-gate=item chop() 202*0Sstevel@tonic-gate 203*0Sstevel@tonic-gatechop(@list) in list context returned the characters chopped in reverse 204*0Sstevel@tonic-gateorder. This has been reversed to be in the right order. 205*0Sstevel@tonic-gate 206*0Sstevel@tonic-gate=item Unicode support 207*0Sstevel@tonic-gate 208*0Sstevel@tonic-gateUnicode support has seen a large number of incremental improvements, 209*0Sstevel@tonic-gatebut continues to be highly experimental. It is not expected to be 210*0Sstevel@tonic-gatefully supported in the 5.6.x maintenance releases. 211*0Sstevel@tonic-gate 212*0Sstevel@tonic-gatesubstr(), join(), repeat(), reverse(), quotemeta() and string 213*0Sstevel@tonic-gateconcatenation were all handling Unicode strings incorrectly in 214*0Sstevel@tonic-gatePerl 5.6.0. This has been corrected. 215*0Sstevel@tonic-gate 216*0Sstevel@tonic-gateSupport for C<tr///CU> and C<tr///UC> etc., have been removed since 217*0Sstevel@tonic-gatewe realized the interface is broken. For similar functionality, 218*0Sstevel@tonic-gatesee L<perlfunc/pack>. 219*0Sstevel@tonic-gate 220*0Sstevel@tonic-gateThe Unicode Character Database has been updated to version 3.0.1 221*0Sstevel@tonic-gatewith additions made available to the public as of August 30, 2000. 222*0Sstevel@tonic-gate 223*0Sstevel@tonic-gateThe Unicode character classes \p{Blank} and \p{SpacePerl} have been 224*0Sstevel@tonic-gateadded. "Blank" is like C isblank(), that is, it contains only 225*0Sstevel@tonic-gate"horizontal whitespace" (the space character is, the newline isn't), 226*0Sstevel@tonic-gateand the "SpacePerl" is the Unicode equivalent of C<\s> (\p{Space} 227*0Sstevel@tonic-gateisn't, since that includes the vertical tabulator character, whereas 228*0Sstevel@tonic-gateC<\s> doesn't.) 229*0Sstevel@tonic-gate 230*0Sstevel@tonic-gateIf you are experimenting with Unicode support in perl, the development 231*0Sstevel@tonic-gateversions of Perl may have more to offer. In particular, I/O layers 232*0Sstevel@tonic-gateare now available in the development track, but not in the maintenance 233*0Sstevel@tonic-gatetrack, primarily to do backward compatibility issues. Unicode support 234*0Sstevel@tonic-gateis also evolving rapidly on a daily basis in the development track--the 235*0Sstevel@tonic-gatemaintenance track only reflects the most conservative of these changes. 236*0Sstevel@tonic-gate 237*0Sstevel@tonic-gate=item 64-bit support 238*0Sstevel@tonic-gate 239*0Sstevel@tonic-gateSupport for 64-bit platforms has been improved, but continues to be 240*0Sstevel@tonic-gateexperimental. The level of support varies greatly among platforms. 241*0Sstevel@tonic-gate 242*0Sstevel@tonic-gate=item Compiler 243*0Sstevel@tonic-gate 244*0Sstevel@tonic-gateThe B Compiler and its various backends have had many incremental 245*0Sstevel@tonic-gateimprovements, but they continue to remain highly experimental. Use in 246*0Sstevel@tonic-gateproduction environments is discouraged. 247*0Sstevel@tonic-gate 248*0Sstevel@tonic-gateThe perlcc tool has been rewritten so that the user interface is much 249*0Sstevel@tonic-gatemore like that of a C compiler. 250*0Sstevel@tonic-gate 251*0Sstevel@tonic-gateThe perlbc tools has been removed. Use C<perlcc -B> instead. 252*0Sstevel@tonic-gate 253*0Sstevel@tonic-gate=item Lvalue subroutines 254*0Sstevel@tonic-gate 255*0Sstevel@tonic-gateThere have been various bugfixes to support lvalue subroutines better. 256*0Sstevel@tonic-gateHowever, the feature still remains experimental. 257*0Sstevel@tonic-gate 258*0Sstevel@tonic-gate=item IO::Socket 259*0Sstevel@tonic-gate 260*0Sstevel@tonic-gateIO::Socket::INET failed to open the specified port if the service 261*0Sstevel@tonic-gatename was not known. It now correctly uses the supplied port number 262*0Sstevel@tonic-gateas is. 263*0Sstevel@tonic-gate 264*0Sstevel@tonic-gate=item File::Find 265*0Sstevel@tonic-gate 266*0Sstevel@tonic-gateFile::Find now chdir()s correctly when chasing symbolic links. 267*0Sstevel@tonic-gate 268*0Sstevel@tonic-gate=item xsubpp 269*0Sstevel@tonic-gate 270*0Sstevel@tonic-gatexsubpp now tolerates embedded POD sections. 271*0Sstevel@tonic-gate 272*0Sstevel@tonic-gate=item C<no Module;> 273*0Sstevel@tonic-gate 274*0Sstevel@tonic-gateC<no Module;> does not produce an error even if Module does not have an 275*0Sstevel@tonic-gateunimport() method. This parallels the behavior of C<use> vis-a-vis 276*0Sstevel@tonic-gateC<import>. 277*0Sstevel@tonic-gate 278*0Sstevel@tonic-gate=item Tests 279*0Sstevel@tonic-gate 280*0Sstevel@tonic-gateA large number of tests have been added. 281*0Sstevel@tonic-gate 282*0Sstevel@tonic-gate=back 283*0Sstevel@tonic-gate 284*0Sstevel@tonic-gate=head2 Core features 285*0Sstevel@tonic-gate 286*0Sstevel@tonic-gateuntie() will now call an UNTIE() hook if it exists. See L<perltie> 287*0Sstevel@tonic-gatefor details. 288*0Sstevel@tonic-gate 289*0Sstevel@tonic-gateThe C<-DT> command line switch outputs copious tokenizing information. 290*0Sstevel@tonic-gateSee L<perlrun>. 291*0Sstevel@tonic-gate 292*0Sstevel@tonic-gateArrays are now always interpolated in double-quotish strings. Previously, 293*0Sstevel@tonic-gateC<"foo@bar.com"> used to be a fatal error at compile time, if an array 294*0Sstevel@tonic-gateC<@bar> was not used or declared. This transitional behavior was 295*0Sstevel@tonic-gateintended to help migrate perl4 code, and is deemed to be no longer useful. 296*0Sstevel@tonic-gateSee L</"Arrays now always interpolate into double-quoted strings">. 297*0Sstevel@tonic-gate 298*0Sstevel@tonic-gatekeys(), each(), pop(), push(), shift(), splice() and unshift() 299*0Sstevel@tonic-gatecan all be overridden now. 300*0Sstevel@tonic-gate 301*0Sstevel@tonic-gateC<my __PACKAGE__ $obj> now does the expected thing. 302*0Sstevel@tonic-gate 303*0Sstevel@tonic-gate=head2 Configuration issues 304*0Sstevel@tonic-gate 305*0Sstevel@tonic-gateOn some systems (IRIX and Solaris among them) the system malloc is demonstrably 306*0Sstevel@tonic-gatebetter. While the defaults haven't been changed in order to retain binary 307*0Sstevel@tonic-gatecompatibility with earlier releases, you may be better off building perl 308*0Sstevel@tonic-gatewith C<Configure -Uusemymalloc ...> as discussed in the F<INSTALL> file. 309*0Sstevel@tonic-gate 310*0Sstevel@tonic-gateC<Configure> has been enhanced in various ways: 311*0Sstevel@tonic-gate 312*0Sstevel@tonic-gate=over 313*0Sstevel@tonic-gate 314*0Sstevel@tonic-gate=item * 315*0Sstevel@tonic-gate 316*0Sstevel@tonic-gateMinimizes use of temporary files. 317*0Sstevel@tonic-gate 318*0Sstevel@tonic-gate=item * 319*0Sstevel@tonic-gate 320*0Sstevel@tonic-gateBy default, does not link perl with libraries not used by it, such as 321*0Sstevel@tonic-gatethe various dbm libraries. SunOS 4.x hints preserve behavior on that 322*0Sstevel@tonic-gateplatform. 323*0Sstevel@tonic-gate 324*0Sstevel@tonic-gate=item * 325*0Sstevel@tonic-gate 326*0Sstevel@tonic-gateSupport for pdp11-style memory models has been removed due to obsolescence. 327*0Sstevel@tonic-gate 328*0Sstevel@tonic-gate=item * 329*0Sstevel@tonic-gate 330*0Sstevel@tonic-gateBuilding outside the source tree is supported on systems that have 331*0Sstevel@tonic-gatesymbolic links. This is done by running 332*0Sstevel@tonic-gate 333*0Sstevel@tonic-gate sh /path/to/source/Configure -Dmksymlinks ... 334*0Sstevel@tonic-gate make all test install 335*0Sstevel@tonic-gate 336*0Sstevel@tonic-gatein a directory other than the perl source directory. See F<INSTALL>. 337*0Sstevel@tonic-gate 338*0Sstevel@tonic-gate=item * 339*0Sstevel@tonic-gate 340*0Sstevel@tonic-gateC<Configure -S> can be run non-interactively. 341*0Sstevel@tonic-gate 342*0Sstevel@tonic-gate=back 343*0Sstevel@tonic-gate 344*0Sstevel@tonic-gate=head2 Documentation 345*0Sstevel@tonic-gate 346*0Sstevel@tonic-gateREADME.aix, README.solaris and README.macos have been added. 347*0Sstevel@tonic-gateREADME.posix-bc has been renamed to README.bs2000. These are 348*0Sstevel@tonic-gateinstalled as L<perlaix>, L<perlsolaris>, L<perlmacos>, and 349*0Sstevel@tonic-gateL<perlbs2000> respectively. 350*0Sstevel@tonic-gate 351*0Sstevel@tonic-gateThe following pod documents are brand new: 352*0Sstevel@tonic-gate 353*0Sstevel@tonic-gate perlclib Internal replacements for standard C library functions 354*0Sstevel@tonic-gate perldebtut Perl debugging tutorial 355*0Sstevel@tonic-gate perlebcdic Considerations for running Perl on EBCDIC platforms 356*0Sstevel@tonic-gate perlnewmod Perl modules: preparing a new module for distribution 357*0Sstevel@tonic-gate perlrequick Perl regular expressions quick start 358*0Sstevel@tonic-gate perlretut Perl regular expressions tutorial 359*0Sstevel@tonic-gate perlutil utilities packaged with the Perl distribution 360*0Sstevel@tonic-gate 361*0Sstevel@tonic-gateThe F<INSTALL> file has been expanded to cover various issues, such as 362*0Sstevel@tonic-gate64-bit support. 363*0Sstevel@tonic-gate 364*0Sstevel@tonic-gateA longer list of contributors has been added to the source distribution. 365*0Sstevel@tonic-gateSee the file C<AUTHORS>. 366*0Sstevel@tonic-gate 367*0Sstevel@tonic-gateNumerous other changes have been made to the included documentation and FAQs. 368*0Sstevel@tonic-gate 369*0Sstevel@tonic-gate=head2 Bundled modules 370*0Sstevel@tonic-gate 371*0Sstevel@tonic-gateThe following modules have been added. 372*0Sstevel@tonic-gate 373*0Sstevel@tonic-gate=over 374*0Sstevel@tonic-gate 375*0Sstevel@tonic-gate=item B::Concise 376*0Sstevel@tonic-gate 377*0Sstevel@tonic-gateWalks Perl syntax tree, printing concise info about ops. See L<B::Concise>. 378*0Sstevel@tonic-gate 379*0Sstevel@tonic-gate=item File::Temp 380*0Sstevel@tonic-gate 381*0Sstevel@tonic-gateReturns name and handle of a temporary file safely. See L<File::Temp>. 382*0Sstevel@tonic-gate 383*0Sstevel@tonic-gate=item Pod::LaTeX 384*0Sstevel@tonic-gate 385*0Sstevel@tonic-gateConverts Pod data to formatted LaTeX. See L<Pod::LaTeX>. 386*0Sstevel@tonic-gate 387*0Sstevel@tonic-gate=item Pod::Text::Overstrike 388*0Sstevel@tonic-gate 389*0Sstevel@tonic-gateConverts POD data to formatted overstrike text. See L<Pod::Text::Overstrike>. 390*0Sstevel@tonic-gate 391*0Sstevel@tonic-gate=back 392*0Sstevel@tonic-gate 393*0Sstevel@tonic-gateThe following modules have been upgraded. 394*0Sstevel@tonic-gate 395*0Sstevel@tonic-gate=over 396*0Sstevel@tonic-gate 397*0Sstevel@tonic-gate=item CGI 398*0Sstevel@tonic-gate 399*0Sstevel@tonic-gateCGI v2.752 is now included. 400*0Sstevel@tonic-gate 401*0Sstevel@tonic-gate=item CPAN 402*0Sstevel@tonic-gate 403*0Sstevel@tonic-gateCPAN v1.59_54 is now included. 404*0Sstevel@tonic-gate 405*0Sstevel@tonic-gate=item Class::Struct 406*0Sstevel@tonic-gate 407*0Sstevel@tonic-gateVarious bugfixes have been added. 408*0Sstevel@tonic-gate 409*0Sstevel@tonic-gate=item DB_File 410*0Sstevel@tonic-gate 411*0Sstevel@tonic-gateDB_File v1.75 supports newer Berkeley DB versions, among other 412*0Sstevel@tonic-gateimprovements. 413*0Sstevel@tonic-gate 414*0Sstevel@tonic-gate=item Devel::Peek 415*0Sstevel@tonic-gate 416*0Sstevel@tonic-gateDevel::Peek has been enhanced to support dumping of memory statistics, 417*0Sstevel@tonic-gatewhen perl is built with the included malloc(). 418*0Sstevel@tonic-gate 419*0Sstevel@tonic-gate=item File::Find 420*0Sstevel@tonic-gate 421*0Sstevel@tonic-gateFile::Find now supports pre and post-processing of the files in order 422*0Sstevel@tonic-gateto sort() them, etc. 423*0Sstevel@tonic-gate 424*0Sstevel@tonic-gate=item Getopt::Long 425*0Sstevel@tonic-gate 426*0Sstevel@tonic-gateGetopt::Long v2.25 is included. 427*0Sstevel@tonic-gate 428*0Sstevel@tonic-gate=item IO::Poll 429*0Sstevel@tonic-gate 430*0Sstevel@tonic-gateVarious bug fixes have been included. 431*0Sstevel@tonic-gate 432*0Sstevel@tonic-gate=item IPC::Open3 433*0Sstevel@tonic-gate 434*0Sstevel@tonic-gateIPC::Open3 allows use of numeric file descriptors. 435*0Sstevel@tonic-gate 436*0Sstevel@tonic-gate=item Math::BigFloat 437*0Sstevel@tonic-gate 438*0Sstevel@tonic-gateThe fmod() function supports modulus operations. Various bug fixes 439*0Sstevel@tonic-gatehave also been included. 440*0Sstevel@tonic-gate 441*0Sstevel@tonic-gate=item Math::Complex 442*0Sstevel@tonic-gate 443*0Sstevel@tonic-gateMath::Complex handles inf, NaN etc., better. 444*0Sstevel@tonic-gate 445*0Sstevel@tonic-gate=item Net::Ping 446*0Sstevel@tonic-gate 447*0Sstevel@tonic-gateping() could fail on odd number of data bytes, and when the echo service 448*0Sstevel@tonic-gateisn't running. This has been corrected. 449*0Sstevel@tonic-gate 450*0Sstevel@tonic-gate=item Opcode 451*0Sstevel@tonic-gate 452*0Sstevel@tonic-gateA memory leak has been fixed. 453*0Sstevel@tonic-gate 454*0Sstevel@tonic-gate=item Pod::Parser 455*0Sstevel@tonic-gate 456*0Sstevel@tonic-gateVersion 1.13 of the Pod::Parser suite is included. 457*0Sstevel@tonic-gate 458*0Sstevel@tonic-gate=item Pod::Text 459*0Sstevel@tonic-gate 460*0Sstevel@tonic-gatePod::Text and related modules have been upgraded to the versions 461*0Sstevel@tonic-gatein podlators suite v2.08. 462*0Sstevel@tonic-gate 463*0Sstevel@tonic-gate=item SDBM_File 464*0Sstevel@tonic-gate 465*0Sstevel@tonic-gateOn dosish platforms, some keys went missing because of lack of support for 466*0Sstevel@tonic-gatefiles with "holes". A workaround for the problem has been added. 467*0Sstevel@tonic-gate 468*0Sstevel@tonic-gate=item Sys::Syslog 469*0Sstevel@tonic-gate 470*0Sstevel@tonic-gateVarious bug fixes have been included. 471*0Sstevel@tonic-gate 472*0Sstevel@tonic-gate=item Tie::RefHash 473*0Sstevel@tonic-gate 474*0Sstevel@tonic-gateNow supports Tie::RefHash::Nestable to automagically tie hashref values. 475*0Sstevel@tonic-gate 476*0Sstevel@tonic-gate=item Tie::SubstrHash 477*0Sstevel@tonic-gate 478*0Sstevel@tonic-gateVarious bug fixes have been included. 479*0Sstevel@tonic-gate 480*0Sstevel@tonic-gate=back 481*0Sstevel@tonic-gate 482*0Sstevel@tonic-gate=head2 Platform-specific improvements 483*0Sstevel@tonic-gate 484*0Sstevel@tonic-gateThe following new ports are now available. 485*0Sstevel@tonic-gate 486*0Sstevel@tonic-gate=over 487*0Sstevel@tonic-gate 488*0Sstevel@tonic-gate=item NCR MP-RAS 489*0Sstevel@tonic-gate 490*0Sstevel@tonic-gate=item NonStop-UX 491*0Sstevel@tonic-gate 492*0Sstevel@tonic-gate=back 493*0Sstevel@tonic-gate 494*0Sstevel@tonic-gatePerl now builds under Amdahl UTS. 495*0Sstevel@tonic-gate 496*0Sstevel@tonic-gatePerl has also been verified to build under Amiga OS. 497*0Sstevel@tonic-gate 498*0Sstevel@tonic-gateSupport for EPOC has been much improved. See README.epoc. 499*0Sstevel@tonic-gate 500*0Sstevel@tonic-gateBuilding perl with -Duseithreads or -Duse5005threads now works 501*0Sstevel@tonic-gateunder HP-UX 10.20 (previously it only worked under 10.30 or later). 502*0Sstevel@tonic-gateYou will need a thread library package installed. See README.hpux. 503*0Sstevel@tonic-gate 504*0Sstevel@tonic-gateLong doubles should now work under Linux. 505*0Sstevel@tonic-gate 506*0Sstevel@tonic-gateMac OS Classic is now supported in the mainstream source package. 507*0Sstevel@tonic-gateSee README.macos. 508*0Sstevel@tonic-gate 509*0Sstevel@tonic-gateSupport for MPE/iX has been updated. See README.mpeix. 510*0Sstevel@tonic-gate 511*0Sstevel@tonic-gateSupport for OS/2 has been improved. See C<os2/Changes> and README.os2. 512*0Sstevel@tonic-gate 513*0Sstevel@tonic-gateDynamic loading on z/OS (formerly OS/390) has been improved. See 514*0Sstevel@tonic-gateREADME.os390. 515*0Sstevel@tonic-gate 516*0Sstevel@tonic-gateSupport for VMS has seen many incremental improvements, including 517*0Sstevel@tonic-gatebetter support for operators like backticks and system(), and better 518*0Sstevel@tonic-gate%ENV handling. See C<README.vms> and L<perlvms>. 519*0Sstevel@tonic-gate 520*0Sstevel@tonic-gateSupport for Stratus VOS has been improved. See C<vos/Changes> and README.vos. 521*0Sstevel@tonic-gate 522*0Sstevel@tonic-gateSupport for Windows has been improved. 523*0Sstevel@tonic-gate 524*0Sstevel@tonic-gate=over 525*0Sstevel@tonic-gate 526*0Sstevel@tonic-gate=item * 527*0Sstevel@tonic-gate 528*0Sstevel@tonic-gatefork() emulation has been improved in various ways, but still continues 529*0Sstevel@tonic-gateto be experimental. See L<perlfork> for known bugs and caveats. 530*0Sstevel@tonic-gate 531*0Sstevel@tonic-gate=item * 532*0Sstevel@tonic-gate 533*0Sstevel@tonic-gate%SIG has been enabled under USE_ITHREADS, but its use is completely 534*0Sstevel@tonic-gateunsupported under all configurations. 535*0Sstevel@tonic-gate 536*0Sstevel@tonic-gate=item * 537*0Sstevel@tonic-gate 538*0Sstevel@tonic-gateBorland C++ v5.5 is now a supported compiler that can build Perl. 539*0Sstevel@tonic-gateHowever, the generated binaries continue to be incompatible with those 540*0Sstevel@tonic-gategenerated by the other supported compilers (GCC and Visual C++). 541*0Sstevel@tonic-gate 542*0Sstevel@tonic-gate=item * 543*0Sstevel@tonic-gate 544*0Sstevel@tonic-gateNon-blocking waits for child processes (or pseudo-processes) are 545*0Sstevel@tonic-gatesupported via C<waitpid($pid, &POSIX::WNOHANG)>. 546*0Sstevel@tonic-gate 547*0Sstevel@tonic-gate=item * 548*0Sstevel@tonic-gate 549*0Sstevel@tonic-gateA memory leak in accept() has been fixed. 550*0Sstevel@tonic-gate 551*0Sstevel@tonic-gate=item * 552*0Sstevel@tonic-gate 553*0Sstevel@tonic-gatewait(), waitpid() and backticks now return the correct exit status under 554*0Sstevel@tonic-gateWindows 9x. 555*0Sstevel@tonic-gate 556*0Sstevel@tonic-gate=item * 557*0Sstevel@tonic-gate 558*0Sstevel@tonic-gateTrailing new %ENV entries weren't propagated to child processes. This 559*0Sstevel@tonic-gateis now fixed. 560*0Sstevel@tonic-gate 561*0Sstevel@tonic-gate=item * 562*0Sstevel@tonic-gate 563*0Sstevel@tonic-gateCurrent directory entries in %ENV are now correctly propagated to child 564*0Sstevel@tonic-gateprocesses. 565*0Sstevel@tonic-gate 566*0Sstevel@tonic-gate=item * 567*0Sstevel@tonic-gate 568*0Sstevel@tonic-gateDuping socket handles with open(F, ">&MYSOCK") now works under Windows 9x. 569*0Sstevel@tonic-gate 570*0Sstevel@tonic-gate=item * 571*0Sstevel@tonic-gate 572*0Sstevel@tonic-gateThe makefiles now provide a single switch to bulk-enable all the features 573*0Sstevel@tonic-gateenabled in ActiveState ActivePerl (a popular binary distribution). 574*0Sstevel@tonic-gate 575*0Sstevel@tonic-gate=item * 576*0Sstevel@tonic-gate 577*0Sstevel@tonic-gateWin32::GetCwd() correctly returns C:\ instead of C: when at the drive root. 578*0Sstevel@tonic-gateOther bugs in chdir() and Cwd::cwd() have also been fixed. 579*0Sstevel@tonic-gate 580*0Sstevel@tonic-gate=item * 581*0Sstevel@tonic-gate 582*0Sstevel@tonic-gatefork() correctly returns undef and sets EAGAIN when it runs out of 583*0Sstevel@tonic-gatepseudo-process handles. 584*0Sstevel@tonic-gate 585*0Sstevel@tonic-gate=item * 586*0Sstevel@tonic-gate 587*0Sstevel@tonic-gateExtUtils::MakeMaker now uses $ENV{LIB} to search for libraries. 588*0Sstevel@tonic-gate 589*0Sstevel@tonic-gate=item * 590*0Sstevel@tonic-gate 591*0Sstevel@tonic-gateUNC path handling is better when perl is built to support fork(). 592*0Sstevel@tonic-gate 593*0Sstevel@tonic-gate=item * 594*0Sstevel@tonic-gate 595*0Sstevel@tonic-gateA handle leak in socket handling has been fixed. 596*0Sstevel@tonic-gate 597*0Sstevel@tonic-gate=item * 598*0Sstevel@tonic-gate 599*0Sstevel@tonic-gatesend() works from within a pseudo-process. 600*0Sstevel@tonic-gate 601*0Sstevel@tonic-gate=back 602*0Sstevel@tonic-gate 603*0Sstevel@tonic-gateUnless specifically qualified otherwise, the remainder of this document 604*0Sstevel@tonic-gatecovers changes between the 5.005 and 5.6.0 releases. 605*0Sstevel@tonic-gate 606*0Sstevel@tonic-gate=head1 Core Enhancements 607*0Sstevel@tonic-gate 608*0Sstevel@tonic-gate=head2 Interpreter cloning, threads, and concurrency 609*0Sstevel@tonic-gate 610*0Sstevel@tonic-gatePerl 5.6.0 introduces the beginnings of support for running multiple 611*0Sstevel@tonic-gateinterpreters concurrently in different threads. In conjunction with 612*0Sstevel@tonic-gatethe perl_clone() API call, which can be used to selectively duplicate 613*0Sstevel@tonic-gatethe state of any given interpreter, it is possible to compile a 614*0Sstevel@tonic-gatepiece of code once in an interpreter, clone that interpreter 615*0Sstevel@tonic-gateone or more times, and run all the resulting interpreters in distinct 616*0Sstevel@tonic-gatethreads. 617*0Sstevel@tonic-gate 618*0Sstevel@tonic-gateOn the Windows platform, this feature is used to emulate fork() at the 619*0Sstevel@tonic-gateinterpreter level. See L<perlfork> for details about that. 620*0Sstevel@tonic-gate 621*0Sstevel@tonic-gateThis feature is still in evolution. It is eventually meant to be used 622*0Sstevel@tonic-gateto selectively clone a subroutine and data reachable from that 623*0Sstevel@tonic-gatesubroutine in a separate interpreter and run the cloned subroutine 624*0Sstevel@tonic-gatein a separate thread. Since there is no shared data between the 625*0Sstevel@tonic-gateinterpreters, little or no locking will be needed (unless parts of 626*0Sstevel@tonic-gatethe symbol table are explicitly shared). This is obviously intended 627*0Sstevel@tonic-gateto be an easy-to-use replacement for the existing threads support. 628*0Sstevel@tonic-gate 629*0Sstevel@tonic-gateSupport for cloning interpreters and interpreter concurrency can be 630*0Sstevel@tonic-gateenabled using the -Dusethreads Configure option (see win32/Makefile for 631*0Sstevel@tonic-gatehow to enable it on Windows.) The resulting perl executable will be 632*0Sstevel@tonic-gatefunctionally identical to one that was built with -Dmultiplicity, but 633*0Sstevel@tonic-gatethe perl_clone() API call will only be available in the former. 634*0Sstevel@tonic-gate 635*0Sstevel@tonic-gate-Dusethreads enables the cpp macro USE_ITHREADS by default, which in turn 636*0Sstevel@tonic-gateenables Perl source code changes that provide a clear separation between 637*0Sstevel@tonic-gatethe op tree and the data it operates with. The former is immutable, and 638*0Sstevel@tonic-gatecan therefore be shared between an interpreter and all of its clones, 639*0Sstevel@tonic-gatewhile the latter is considered local to each interpreter, and is therefore 640*0Sstevel@tonic-gatecopied for each clone. 641*0Sstevel@tonic-gate 642*0Sstevel@tonic-gateNote that building Perl with the -Dusemultiplicity Configure option 643*0Sstevel@tonic-gateis adequate if you wish to run multiple B<independent> interpreters 644*0Sstevel@tonic-gateconcurrently in different threads. -Dusethreads only provides the 645*0Sstevel@tonic-gateadditional functionality of the perl_clone() API call and other 646*0Sstevel@tonic-gatesupport for running B<cloned> interpreters concurrently. 647*0Sstevel@tonic-gate 648*0Sstevel@tonic-gate NOTE: This is an experimental feature. Implementation details are 649*0Sstevel@tonic-gate subject to change. 650*0Sstevel@tonic-gate 651*0Sstevel@tonic-gate=head2 Lexically scoped warning categories 652*0Sstevel@tonic-gate 653*0Sstevel@tonic-gateYou can now control the granularity of warnings emitted by perl at a finer 654*0Sstevel@tonic-gatelevel using the C<use warnings> pragma. L<warnings> and L<perllexwarn> 655*0Sstevel@tonic-gatehave copious documentation on this feature. 656*0Sstevel@tonic-gate 657*0Sstevel@tonic-gate=head2 Unicode and UTF-8 support 658*0Sstevel@tonic-gate 659*0Sstevel@tonic-gatePerl now uses UTF-8 as its internal representation for character 660*0Sstevel@tonic-gatestrings. The C<utf8> and C<bytes> pragmas are used to control this support 661*0Sstevel@tonic-gatein the current lexical scope. See L<perlunicode>, L<utf8> and L<bytes> for 662*0Sstevel@tonic-gatemore information. 663*0Sstevel@tonic-gate 664*0Sstevel@tonic-gateThis feature is expected to evolve quickly to support some form of I/O 665*0Sstevel@tonic-gatedisciplines that can be used to specify the kind of input and output data 666*0Sstevel@tonic-gate(bytes or characters). Until that happens, additional modules from CPAN 667*0Sstevel@tonic-gatewill be needed to complete the toolkit for dealing with Unicode. 668*0Sstevel@tonic-gate 669*0Sstevel@tonic-gate NOTE: This should be considered an experimental feature. Implementation 670*0Sstevel@tonic-gate details are subject to change. 671*0Sstevel@tonic-gate 672*0Sstevel@tonic-gate=head2 Support for interpolating named characters 673*0Sstevel@tonic-gate 674*0Sstevel@tonic-gateThe new C<\N> escape interpolates named characters within strings. 675*0Sstevel@tonic-gateFor example, C<"Hi! \N{WHITE SMILING FACE}"> evaluates to a string 676*0Sstevel@tonic-gatewith a Unicode smiley face at the end. 677*0Sstevel@tonic-gate 678*0Sstevel@tonic-gate=head2 "our" declarations 679*0Sstevel@tonic-gate 680*0Sstevel@tonic-gateAn "our" declaration introduces a value that can be best understood 681*0Sstevel@tonic-gateas a lexically scoped symbolic alias to a global variable in the 682*0Sstevel@tonic-gatepackage that was current where the variable was declared. This is 683*0Sstevel@tonic-gatemostly useful as an alternative to the C<vars> pragma, but also provides 684*0Sstevel@tonic-gatethe opportunity to introduce typing and other attributes for such 685*0Sstevel@tonic-gatevariables. See L<perlfunc/our>. 686*0Sstevel@tonic-gate 687*0Sstevel@tonic-gate=head2 Support for strings represented as a vector of ordinals 688*0Sstevel@tonic-gate 689*0Sstevel@tonic-gateLiterals of the form C<v1.2.3.4> are now parsed as a string composed 690*0Sstevel@tonic-gateof characters with the specified ordinals. This is an alternative, more 691*0Sstevel@tonic-gatereadable way to construct (possibly Unicode) strings instead of 692*0Sstevel@tonic-gateinterpolating characters, as in C<"\x{1}\x{2}\x{3}\x{4}">. The leading 693*0Sstevel@tonic-gateC<v> may be omitted if there are more than two ordinals, so C<1.2.3> is 694*0Sstevel@tonic-gateparsed the same as C<v1.2.3>. 695*0Sstevel@tonic-gate 696*0Sstevel@tonic-gateStrings written in this form are also useful to represent version "numbers". 697*0Sstevel@tonic-gateIt is easy to compare such version "numbers" (which are really just plain 698*0Sstevel@tonic-gatestrings) using any of the usual string comparison operators C<eq>, C<ne>, 699*0Sstevel@tonic-gateC<lt>, C<gt>, etc., or perform bitwise string operations on them using C<|>, 700*0Sstevel@tonic-gateC<&>, etc. 701*0Sstevel@tonic-gate 702*0Sstevel@tonic-gateIn conjunction with the new C<$^V> magic variable (which contains 703*0Sstevel@tonic-gatethe perl version as a string), such literals can be used as a readable way 704*0Sstevel@tonic-gateto check if you're running a particular version of Perl: 705*0Sstevel@tonic-gate 706*0Sstevel@tonic-gate # this will parse in older versions of Perl also 707*0Sstevel@tonic-gate if ($^V and $^V gt v5.6.0) { 708*0Sstevel@tonic-gate # new features supported 709*0Sstevel@tonic-gate } 710*0Sstevel@tonic-gate 711*0Sstevel@tonic-gateC<require> and C<use> also have some special magic to support such literals. 712*0Sstevel@tonic-gateThey will be interpreted as a version rather than as a module name: 713*0Sstevel@tonic-gate 714*0Sstevel@tonic-gate require v5.6.0; # croak if $^V lt v5.6.0 715*0Sstevel@tonic-gate use v5.6.0; # same, but croaks at compile-time 716*0Sstevel@tonic-gate 717*0Sstevel@tonic-gateAlternatively, the C<v> may be omitted if there is more than one dot: 718*0Sstevel@tonic-gate 719*0Sstevel@tonic-gate require 5.6.0; 720*0Sstevel@tonic-gate use 5.6.0; 721*0Sstevel@tonic-gate 722*0Sstevel@tonic-gateAlso, C<sprintf> and C<printf> support the Perl-specific format flag C<%v> 723*0Sstevel@tonic-gateto print ordinals of characters in arbitrary strings: 724*0Sstevel@tonic-gate 725*0Sstevel@tonic-gate printf "v%vd", $^V; # prints current version, such as "v5.5.650" 726*0Sstevel@tonic-gate printf "%*vX", ":", $addr; # formats IPv6 address 727*0Sstevel@tonic-gate printf "%*vb", " ", $bits; # displays bitstring 728*0Sstevel@tonic-gate 729*0Sstevel@tonic-gateSee L<perldata/"Scalar value constructors"> for additional information. 730*0Sstevel@tonic-gate 731*0Sstevel@tonic-gate=head2 Improved Perl version numbering system 732*0Sstevel@tonic-gate 733*0Sstevel@tonic-gateBeginning with Perl version 5.6.0, the version number convention has been 734*0Sstevel@tonic-gatechanged to a "dotted integer" scheme that is more commonly found in open 735*0Sstevel@tonic-gatesource projects. 736*0Sstevel@tonic-gate 737*0Sstevel@tonic-gateMaintenance versions of v5.6.0 will be released as v5.6.1, v5.6.2 etc. 738*0Sstevel@tonic-gateThe next development series following v5.6.0 will be numbered v5.7.x, 739*0Sstevel@tonic-gatebeginning with v5.7.0, and the next major production release following 740*0Sstevel@tonic-gatev5.6.0 will be v5.8.0. 741*0Sstevel@tonic-gate 742*0Sstevel@tonic-gateThe English module now sets $PERL_VERSION to $^V (a string value) rather 743*0Sstevel@tonic-gatethan C<$]> (a numeric value). (This is a potential incompatibility. 744*0Sstevel@tonic-gateSend us a report via perlbug if you are affected by this.) 745*0Sstevel@tonic-gate 746*0Sstevel@tonic-gateThe v1.2.3 syntax is also now legal in Perl. 747*0Sstevel@tonic-gateSee L<Support for strings represented as a vector of ordinals> for more on that. 748*0Sstevel@tonic-gate 749*0Sstevel@tonic-gateTo cope with the new versioning system's use of at least three significant 750*0Sstevel@tonic-gatedigits for each version component, the method used for incrementing the 751*0Sstevel@tonic-gatesubversion number has also changed slightly. We assume that versions older 752*0Sstevel@tonic-gatethan v5.6.0 have been incrementing the subversion component in multiples of 753*0Sstevel@tonic-gate10. Versions after v5.6.0 will increment them by 1. Thus, using the new 754*0Sstevel@tonic-gatenotation, 5.005_03 is the "same" as v5.5.30, and the first maintenance 755*0Sstevel@tonic-gateversion following v5.6.0 will be v5.6.1 (which should be read as being 756*0Sstevel@tonic-gateequivalent to a floating point value of 5.006_001 in the older format, 757*0Sstevel@tonic-gatestored in C<$]>). 758*0Sstevel@tonic-gate 759*0Sstevel@tonic-gate=head2 New syntax for declaring subroutine attributes 760*0Sstevel@tonic-gate 761*0Sstevel@tonic-gateFormerly, if you wanted to mark a subroutine as being a method call or 762*0Sstevel@tonic-gateas requiring an automatic lock() when it is entered, you had to declare 763*0Sstevel@tonic-gatethat with a C<use attrs> pragma in the body of the subroutine. 764*0Sstevel@tonic-gateThat can now be accomplished with declaration syntax, like this: 765*0Sstevel@tonic-gate 766*0Sstevel@tonic-gate sub mymethod : locked method ; 767*0Sstevel@tonic-gate ... 768*0Sstevel@tonic-gate sub mymethod : locked method { 769*0Sstevel@tonic-gate ... 770*0Sstevel@tonic-gate } 771*0Sstevel@tonic-gate 772*0Sstevel@tonic-gate sub othermethod :locked :method ; 773*0Sstevel@tonic-gate ... 774*0Sstevel@tonic-gate sub othermethod :locked :method { 775*0Sstevel@tonic-gate ... 776*0Sstevel@tonic-gate } 777*0Sstevel@tonic-gate 778*0Sstevel@tonic-gate 779*0Sstevel@tonic-gate(Note how only the first C<:> is mandatory, and whitespace surrounding 780*0Sstevel@tonic-gatethe C<:> is optional.) 781*0Sstevel@tonic-gate 782*0Sstevel@tonic-gateF<AutoSplit.pm> and F<SelfLoader.pm> have been updated to keep the attributes 783*0Sstevel@tonic-gatewith the stubs they provide. See L<attributes>. 784*0Sstevel@tonic-gate 785*0Sstevel@tonic-gate=head2 File and directory handles can be autovivified 786*0Sstevel@tonic-gate 787*0Sstevel@tonic-gateSimilar to how constructs such as C<< $x->[0] >> autovivify a reference, 788*0Sstevel@tonic-gatehandle constructors (open(), opendir(), pipe(), socketpair(), sysopen(), 789*0Sstevel@tonic-gatesocket(), and accept()) now autovivify a file or directory handle 790*0Sstevel@tonic-gateif the handle passed to them is an uninitialized scalar variable. This 791*0Sstevel@tonic-gateallows the constructs such as C<open(my $fh, ...)> and C<open(local $fh,...)> 792*0Sstevel@tonic-gateto be used to create filehandles that will conveniently be closed 793*0Sstevel@tonic-gateautomatically when the scope ends, provided there are no other references 794*0Sstevel@tonic-gateto them. This largely eliminates the need for typeglobs when opening 795*0Sstevel@tonic-gatefilehandles that must be passed around, as in the following example: 796*0Sstevel@tonic-gate 797*0Sstevel@tonic-gate sub myopen { 798*0Sstevel@tonic-gate open my $fh, "@_" 799*0Sstevel@tonic-gate or die "Can't open '@_': $!"; 800*0Sstevel@tonic-gate return $fh; 801*0Sstevel@tonic-gate } 802*0Sstevel@tonic-gate 803*0Sstevel@tonic-gate { 804*0Sstevel@tonic-gate my $f = myopen("</etc/motd"); 805*0Sstevel@tonic-gate print <$f>; 806*0Sstevel@tonic-gate # $f implicitly closed here 807*0Sstevel@tonic-gate } 808*0Sstevel@tonic-gate 809*0Sstevel@tonic-gate=head2 open() with more than two arguments 810*0Sstevel@tonic-gate 811*0Sstevel@tonic-gateIf open() is passed three arguments instead of two, the second argument 812*0Sstevel@tonic-gateis used as the mode and the third argument is taken to be the file name. 813*0Sstevel@tonic-gateThis is primarily useful for protecting against unintended magic behavior 814*0Sstevel@tonic-gateof the traditional two-argument form. See L<perlfunc/open>. 815*0Sstevel@tonic-gate 816*0Sstevel@tonic-gate=head2 64-bit support 817*0Sstevel@tonic-gate 818*0Sstevel@tonic-gateAny platform that has 64-bit integers either 819*0Sstevel@tonic-gate 820*0Sstevel@tonic-gate (1) natively as longs or ints 821*0Sstevel@tonic-gate (2) via special compiler flags 822*0Sstevel@tonic-gate (3) using long long or int64_t 823*0Sstevel@tonic-gate 824*0Sstevel@tonic-gateis able to use "quads" (64-bit integers) as follows: 825*0Sstevel@tonic-gate 826*0Sstevel@tonic-gate=over 4 827*0Sstevel@tonic-gate 828*0Sstevel@tonic-gate=item * 829*0Sstevel@tonic-gate 830*0Sstevel@tonic-gateconstants (decimal, hexadecimal, octal, binary) in the code 831*0Sstevel@tonic-gate 832*0Sstevel@tonic-gate=item * 833*0Sstevel@tonic-gate 834*0Sstevel@tonic-gatearguments to oct() and hex() 835*0Sstevel@tonic-gate 836*0Sstevel@tonic-gate=item * 837*0Sstevel@tonic-gate 838*0Sstevel@tonic-gatearguments to print(), printf() and sprintf() (flag prefixes ll, L, q) 839*0Sstevel@tonic-gate 840*0Sstevel@tonic-gate=item * 841*0Sstevel@tonic-gate 842*0Sstevel@tonic-gateprinted as such 843*0Sstevel@tonic-gate 844*0Sstevel@tonic-gate=item * 845*0Sstevel@tonic-gate 846*0Sstevel@tonic-gatepack() and unpack() "q" and "Q" formats 847*0Sstevel@tonic-gate 848*0Sstevel@tonic-gate=item * 849*0Sstevel@tonic-gate 850*0Sstevel@tonic-gatein basic arithmetics: + - * / % (NOTE: operating close to the limits 851*0Sstevel@tonic-gateof the integer values may produce surprising results) 852*0Sstevel@tonic-gate 853*0Sstevel@tonic-gate=item * 854*0Sstevel@tonic-gate 855*0Sstevel@tonic-gatein bit arithmetics: & | ^ ~ << >> (NOTE: these used to be forced 856*0Sstevel@tonic-gateto be 32 bits wide but now operate on the full native width.) 857*0Sstevel@tonic-gate 858*0Sstevel@tonic-gate=item * 859*0Sstevel@tonic-gate 860*0Sstevel@tonic-gatevec() 861*0Sstevel@tonic-gate 862*0Sstevel@tonic-gate=back 863*0Sstevel@tonic-gate 864*0Sstevel@tonic-gateNote that unless you have the case (a) you will have to configure 865*0Sstevel@tonic-gateand compile Perl using the -Duse64bitint Configure flag. 866*0Sstevel@tonic-gate 867*0Sstevel@tonic-gate NOTE: The Configure flags -Duselonglong and -Duse64bits have been 868*0Sstevel@tonic-gate deprecated. Use -Duse64bitint instead. 869*0Sstevel@tonic-gate 870*0Sstevel@tonic-gateThere are actually two modes of 64-bitness: the first one is achieved 871*0Sstevel@tonic-gateusing Configure -Duse64bitint and the second one using Configure 872*0Sstevel@tonic-gate-Duse64bitall. The difference is that the first one is minimal and 873*0Sstevel@tonic-gatethe second one maximal. The first works in more places than the second. 874*0Sstevel@tonic-gate 875*0Sstevel@tonic-gateThe C<use64bitint> does only as much as is required to get 64-bit 876*0Sstevel@tonic-gateintegers into Perl (this may mean, for example, using "long longs") 877*0Sstevel@tonic-gatewhile your memory may still be limited to 2 gigabytes (because your 878*0Sstevel@tonic-gatepointers could still be 32-bit). Note that the name C<64bitint> does 879*0Sstevel@tonic-gatenot imply that your C compiler will be using 64-bit C<int>s (it might, 880*0Sstevel@tonic-gatebut it doesn't have to): the C<use64bitint> means that you will be 881*0Sstevel@tonic-gateable to have 64 bits wide scalar values. 882*0Sstevel@tonic-gate 883*0Sstevel@tonic-gateThe C<use64bitall> goes all the way by attempting to switch also 884*0Sstevel@tonic-gateintegers (if it can), longs (and pointers) to being 64-bit. This may 885*0Sstevel@tonic-gatecreate an even more binary incompatible Perl than -Duse64bitint: the 886*0Sstevel@tonic-gateresulting executable may not run at all in a 32-bit box, or you may 887*0Sstevel@tonic-gatehave to reboot/reconfigure/rebuild your operating system to be 64-bit 888*0Sstevel@tonic-gateaware. 889*0Sstevel@tonic-gate 890*0Sstevel@tonic-gateNatively 64-bit systems like Alpha and Cray need neither -Duse64bitint 891*0Sstevel@tonic-gatenor -Duse64bitall. 892*0Sstevel@tonic-gate 893*0Sstevel@tonic-gateLast but not least: note that due to Perl's habit of always using 894*0Sstevel@tonic-gatefloating point numbers, the quads are still not true integers. 895*0Sstevel@tonic-gateWhen quads overflow their limits (0...18_446_744_073_709_551_615 unsigned, 896*0Sstevel@tonic-gate-9_223_372_036_854_775_808...9_223_372_036_854_775_807 signed), they 897*0Sstevel@tonic-gateare silently promoted to floating point numbers, after which they will 898*0Sstevel@tonic-gatestart losing precision (in their lower digits). 899*0Sstevel@tonic-gate 900*0Sstevel@tonic-gate NOTE: 64-bit support is still experimental on most platforms. 901*0Sstevel@tonic-gate Existing support only covers the LP64 data model. In particular, the 902*0Sstevel@tonic-gate LLP64 data model is not yet supported. 64-bit libraries and system 903*0Sstevel@tonic-gate APIs on many platforms have not stabilized--your mileage may vary. 904*0Sstevel@tonic-gate 905*0Sstevel@tonic-gate=head2 Large file support 906*0Sstevel@tonic-gate 907*0Sstevel@tonic-gateIf you have filesystems that support "large files" (files larger than 908*0Sstevel@tonic-gate2 gigabytes), you may now also be able to create and access them from 909*0Sstevel@tonic-gatePerl. 910*0Sstevel@tonic-gate 911*0Sstevel@tonic-gate NOTE: The default action is to enable large file support, if 912*0Sstevel@tonic-gate available on the platform. 913*0Sstevel@tonic-gate 914*0Sstevel@tonic-gateIf the large file support is on, and you have a Fcntl constant 915*0Sstevel@tonic-gateO_LARGEFILE, the O_LARGEFILE is automatically added to the flags 916*0Sstevel@tonic-gateof sysopen(). 917*0Sstevel@tonic-gate 918*0Sstevel@tonic-gateBeware that unless your filesystem also supports "sparse files" seeking 919*0Sstevel@tonic-gateto umpteen petabytes may be inadvisable. 920*0Sstevel@tonic-gate 921*0Sstevel@tonic-gateNote that in addition to requiring a proper file system to do large 922*0Sstevel@tonic-gatefiles you may also need to adjust your per-process (or your 923*0Sstevel@tonic-gateper-system, or per-process-group, or per-user-group) maximum filesize 924*0Sstevel@tonic-gatelimits before running Perl scripts that try to handle large files, 925*0Sstevel@tonic-gateespecially if you intend to write such files. 926*0Sstevel@tonic-gate 927*0Sstevel@tonic-gateFinally, in addition to your process/process group maximum filesize 928*0Sstevel@tonic-gatelimits, you may have quota limits on your filesystems that stop you 929*0Sstevel@tonic-gate(your user id or your user group id) from using large files. 930*0Sstevel@tonic-gate 931*0Sstevel@tonic-gateAdjusting your process/user/group/file system/operating system limits 932*0Sstevel@tonic-gateis outside the scope of Perl core language. For process limits, you 933*0Sstevel@tonic-gatemay try increasing the limits using your shell's limits/limit/ulimit 934*0Sstevel@tonic-gatecommand before running Perl. The BSD::Resource extension (not 935*0Sstevel@tonic-gateincluded with the standard Perl distribution) may also be of use, it 936*0Sstevel@tonic-gateoffers the getrlimit/setrlimit interface that can be used to adjust 937*0Sstevel@tonic-gateprocess resource usage limits, including the maximum filesize limit. 938*0Sstevel@tonic-gate 939*0Sstevel@tonic-gate=head2 Long doubles 940*0Sstevel@tonic-gate 941*0Sstevel@tonic-gateIn some systems you may be able to use long doubles to enhance the 942*0Sstevel@tonic-gaterange and precision of your double precision floating point numbers 943*0Sstevel@tonic-gate(that is, Perl's numbers). Use Configure -Duselongdouble to enable 944*0Sstevel@tonic-gatethis support (if it is available). 945*0Sstevel@tonic-gate 946*0Sstevel@tonic-gate=head2 "more bits" 947*0Sstevel@tonic-gate 948*0Sstevel@tonic-gateYou can "Configure -Dusemorebits" to turn on both the 64-bit support 949*0Sstevel@tonic-gateand the long double support. 950*0Sstevel@tonic-gate 951*0Sstevel@tonic-gate=head2 Enhanced support for sort() subroutines 952*0Sstevel@tonic-gate 953*0Sstevel@tonic-gatePerl subroutines with a prototype of C<($$)>, and XSUBs in general, can 954*0Sstevel@tonic-gatenow be used as sort subroutines. In either case, the two elements to 955*0Sstevel@tonic-gatebe compared are passed as normal parameters in @_. See L<perlfunc/sort>. 956*0Sstevel@tonic-gate 957*0Sstevel@tonic-gateFor unprototyped sort subroutines, the historical behavior of passing 958*0Sstevel@tonic-gatethe elements to be compared as the global variables $a and $b remains 959*0Sstevel@tonic-gateunchanged. 960*0Sstevel@tonic-gate 961*0Sstevel@tonic-gate=head2 C<sort $coderef @foo> allowed 962*0Sstevel@tonic-gate 963*0Sstevel@tonic-gatesort() did not accept a subroutine reference as the comparison 964*0Sstevel@tonic-gatefunction in earlier versions. This is now permitted. 965*0Sstevel@tonic-gate 966*0Sstevel@tonic-gate=head2 File globbing implemented internally 967*0Sstevel@tonic-gate 968*0Sstevel@tonic-gatePerl now uses the File::Glob implementation of the glob() operator 969*0Sstevel@tonic-gateautomatically. This avoids using an external csh process and the 970*0Sstevel@tonic-gateproblems associated with it. 971*0Sstevel@tonic-gate 972*0Sstevel@tonic-gate NOTE: This is currently an experimental feature. Interfaces and 973*0Sstevel@tonic-gate implementation are subject to change. 974*0Sstevel@tonic-gate 975*0Sstevel@tonic-gate=head2 Support for CHECK blocks 976*0Sstevel@tonic-gate 977*0Sstevel@tonic-gateIn addition to C<BEGIN>, C<INIT>, C<END>, C<DESTROY> and C<AUTOLOAD>, 978*0Sstevel@tonic-gatesubroutines named C<CHECK> are now special. These are queued up during 979*0Sstevel@tonic-gatecompilation and behave similar to END blocks, except they are called at 980*0Sstevel@tonic-gatethe end of compilation rather than at the end of execution. They cannot 981*0Sstevel@tonic-gatebe called directly. 982*0Sstevel@tonic-gate 983*0Sstevel@tonic-gate=head2 POSIX character class syntax [: :] supported 984*0Sstevel@tonic-gate 985*0Sstevel@tonic-gateFor example to match alphabetic characters use /[[:alpha:]]/. 986*0Sstevel@tonic-gateSee L<perlre> for details. 987*0Sstevel@tonic-gate 988*0Sstevel@tonic-gate=head2 Better pseudo-random number generator 989*0Sstevel@tonic-gate 990*0Sstevel@tonic-gateIn 5.005_0x and earlier, perl's rand() function used the C library 991*0Sstevel@tonic-gaterand(3) function. As of 5.005_52, Configure tests for drand48(), 992*0Sstevel@tonic-gaterandom(), and rand() (in that order) and picks the first one it finds. 993*0Sstevel@tonic-gate 994*0Sstevel@tonic-gateThese changes should result in better random numbers from rand(). 995*0Sstevel@tonic-gate 996*0Sstevel@tonic-gate=head2 Improved C<qw//> operator 997*0Sstevel@tonic-gate 998*0Sstevel@tonic-gateThe C<qw//> operator is now evaluated at compile time into a true list 999*0Sstevel@tonic-gateinstead of being replaced with a run time call to C<split()>. This 1000*0Sstevel@tonic-gateremoves the confusing misbehaviour of C<qw//> in scalar context, which 1001*0Sstevel@tonic-gatehad inherited that behaviour from split(). 1002*0Sstevel@tonic-gate 1003*0Sstevel@tonic-gateThus: 1004*0Sstevel@tonic-gate 1005*0Sstevel@tonic-gate $foo = ($bar) = qw(a b c); print "$foo|$bar\n"; 1006*0Sstevel@tonic-gate 1007*0Sstevel@tonic-gatenow correctly prints "3|a", instead of "2|a". 1008*0Sstevel@tonic-gate 1009*0Sstevel@tonic-gate=head2 Better worst-case behavior of hashes 1010*0Sstevel@tonic-gate 1011*0Sstevel@tonic-gateSmall changes in the hashing algorithm have been implemented in 1012*0Sstevel@tonic-gateorder to improve the distribution of lower order bits in the 1013*0Sstevel@tonic-gatehashed value. This is expected to yield better performance on 1014*0Sstevel@tonic-gatekeys that are repeated sequences. 1015*0Sstevel@tonic-gate 1016*0Sstevel@tonic-gate=head2 pack() format 'Z' supported 1017*0Sstevel@tonic-gate 1018*0Sstevel@tonic-gateThe new format type 'Z' is useful for packing and unpacking null-terminated 1019*0Sstevel@tonic-gatestrings. See L<perlfunc/"pack">. 1020*0Sstevel@tonic-gate 1021*0Sstevel@tonic-gate=head2 pack() format modifier '!' supported 1022*0Sstevel@tonic-gate 1023*0Sstevel@tonic-gateThe new format type modifier '!' is useful for packing and unpacking 1024*0Sstevel@tonic-gatenative shorts, ints, and longs. See L<perlfunc/"pack">. 1025*0Sstevel@tonic-gate 1026*0Sstevel@tonic-gate=head2 pack() and unpack() support counted strings 1027*0Sstevel@tonic-gate 1028*0Sstevel@tonic-gateThe template character '/' can be used to specify a counted string 1029*0Sstevel@tonic-gatetype to be packed or unpacked. See L<perlfunc/"pack">. 1030*0Sstevel@tonic-gate 1031*0Sstevel@tonic-gate=head2 Comments in pack() templates 1032*0Sstevel@tonic-gate 1033*0Sstevel@tonic-gateThe '#' character in a template introduces a comment up to 1034*0Sstevel@tonic-gateend of the line. This facilitates documentation of pack() 1035*0Sstevel@tonic-gatetemplates. 1036*0Sstevel@tonic-gate 1037*0Sstevel@tonic-gate=head2 Weak references 1038*0Sstevel@tonic-gate 1039*0Sstevel@tonic-gateIn previous versions of Perl, you couldn't cache objects so as 1040*0Sstevel@tonic-gateto allow them to be deleted if the last reference from outside 1041*0Sstevel@tonic-gatethe cache is deleted. The reference in the cache would hold a 1042*0Sstevel@tonic-gatereference count on the object and the objects would never be 1043*0Sstevel@tonic-gatedestroyed. 1044*0Sstevel@tonic-gate 1045*0Sstevel@tonic-gateAnother familiar problem is with circular references. When an 1046*0Sstevel@tonic-gateobject references itself, its reference count would never go 1047*0Sstevel@tonic-gatedown to zero, and it would not get destroyed until the program 1048*0Sstevel@tonic-gateis about to exit. 1049*0Sstevel@tonic-gate 1050*0Sstevel@tonic-gateWeak references solve this by allowing you to "weaken" any 1051*0Sstevel@tonic-gatereference, that is, make it not count towards the reference count. 1052*0Sstevel@tonic-gateWhen the last non-weak reference to an object is deleted, the object 1053*0Sstevel@tonic-gateis destroyed and all the weak references to the object are 1054*0Sstevel@tonic-gateautomatically undef-ed. 1055*0Sstevel@tonic-gate 1056*0Sstevel@tonic-gateTo use this feature, you need the Devel::WeakRef package from CPAN, which 1057*0Sstevel@tonic-gatecontains additional documentation. 1058*0Sstevel@tonic-gate 1059*0Sstevel@tonic-gate NOTE: This is an experimental feature. Details are subject to change. 1060*0Sstevel@tonic-gate 1061*0Sstevel@tonic-gate=head2 Binary numbers supported 1062*0Sstevel@tonic-gate 1063*0Sstevel@tonic-gateBinary numbers are now supported as literals, in s?printf formats, and 1064*0Sstevel@tonic-gateC<oct()>: 1065*0Sstevel@tonic-gate 1066*0Sstevel@tonic-gate $answer = 0b101010; 1067*0Sstevel@tonic-gate printf "The answer is: %b\n", oct("0b101010"); 1068*0Sstevel@tonic-gate 1069*0Sstevel@tonic-gate=head2 Lvalue subroutines 1070*0Sstevel@tonic-gate 1071*0Sstevel@tonic-gateSubroutines can now return modifiable lvalues. 1072*0Sstevel@tonic-gateSee L<perlsub/"Lvalue subroutines">. 1073*0Sstevel@tonic-gate 1074*0Sstevel@tonic-gate NOTE: This is an experimental feature. Details are subject to change. 1075*0Sstevel@tonic-gate 1076*0Sstevel@tonic-gate=head2 Some arrows may be omitted in calls through references 1077*0Sstevel@tonic-gate 1078*0Sstevel@tonic-gatePerl now allows the arrow to be omitted in many constructs 1079*0Sstevel@tonic-gateinvolving subroutine calls through references. For example, 1080*0Sstevel@tonic-gateC<< $foo[10]->('foo') >> may now be written C<$foo[10]('foo')>. 1081*0Sstevel@tonic-gateThis is rather similar to how the arrow may be omitted from 1082*0Sstevel@tonic-gateC<< $foo[10]->{'foo'} >>. Note however, that the arrow is still 1083*0Sstevel@tonic-gaterequired for C<< foo(10)->('bar') >>. 1084*0Sstevel@tonic-gate 1085*0Sstevel@tonic-gate=head2 Boolean assignment operators are legal lvalues 1086*0Sstevel@tonic-gate 1087*0Sstevel@tonic-gateConstructs such as C<($a ||= 2) += 1> are now allowed. 1088*0Sstevel@tonic-gate 1089*0Sstevel@tonic-gate=head2 exists() is supported on subroutine names 1090*0Sstevel@tonic-gate 1091*0Sstevel@tonic-gateThe exists() builtin now works on subroutine names. A subroutine 1092*0Sstevel@tonic-gateis considered to exist if it has been declared (even if implicitly). 1093*0Sstevel@tonic-gateSee L<perlfunc/exists> for examples. 1094*0Sstevel@tonic-gate 1095*0Sstevel@tonic-gate=head2 exists() and delete() are supported on array elements 1096*0Sstevel@tonic-gate 1097*0Sstevel@tonic-gateThe exists() and delete() builtins now work on simple arrays as well. 1098*0Sstevel@tonic-gateThe behavior is similar to that on hash elements. 1099*0Sstevel@tonic-gate 1100*0Sstevel@tonic-gateexists() can be used to check whether an array element has been 1101*0Sstevel@tonic-gateinitialized. This avoids autovivifying array elements that don't exist. 1102*0Sstevel@tonic-gateIf the array is tied, the EXISTS() method in the corresponding tied 1103*0Sstevel@tonic-gatepackage will be invoked. 1104*0Sstevel@tonic-gate 1105*0Sstevel@tonic-gatedelete() may be used to remove an element from the array and return 1106*0Sstevel@tonic-gateit. The array element at that position returns to its uninitialized 1107*0Sstevel@tonic-gatestate, so that testing for the same element with exists() will return 1108*0Sstevel@tonic-gatefalse. If the element happens to be the one at the end, the size of 1109*0Sstevel@tonic-gatethe array also shrinks up to the highest element that tests true for 1110*0Sstevel@tonic-gateexists(), or 0 if none such is found. If the array is tied, the DELETE() 1111*0Sstevel@tonic-gatemethod in the corresponding tied package will be invoked. 1112*0Sstevel@tonic-gate 1113*0Sstevel@tonic-gateSee L<perlfunc/exists> and L<perlfunc/delete> for examples. 1114*0Sstevel@tonic-gate 1115*0Sstevel@tonic-gate=head2 Pseudo-hashes work better 1116*0Sstevel@tonic-gate 1117*0Sstevel@tonic-gateDereferencing some types of reference values in a pseudo-hash, 1118*0Sstevel@tonic-gatesuch as C<< $ph->{foo}[1] >>, was accidentally disallowed. This has 1119*0Sstevel@tonic-gatebeen corrected. 1120*0Sstevel@tonic-gate 1121*0Sstevel@tonic-gateWhen applied to a pseudo-hash element, exists() now reports whether 1122*0Sstevel@tonic-gatethe specified value exists, not merely if the key is valid. 1123*0Sstevel@tonic-gate 1124*0Sstevel@tonic-gatedelete() now works on pseudo-hashes. When given a pseudo-hash element 1125*0Sstevel@tonic-gateor slice it deletes the values corresponding to the keys (but not the keys 1126*0Sstevel@tonic-gatethemselves). See L<perlref/"Pseudo-hashes: Using an array as a hash">. 1127*0Sstevel@tonic-gate 1128*0Sstevel@tonic-gatePseudo-hash slices with constant keys are now optimized to array lookups 1129*0Sstevel@tonic-gateat compile-time. 1130*0Sstevel@tonic-gate 1131*0Sstevel@tonic-gateList assignments to pseudo-hash slices are now supported. 1132*0Sstevel@tonic-gate 1133*0Sstevel@tonic-gateThe C<fields> pragma now provides ways to create pseudo-hashes, via 1134*0Sstevel@tonic-gatefields::new() and fields::phash(). See L<fields>. 1135*0Sstevel@tonic-gate 1136*0Sstevel@tonic-gate NOTE: The pseudo-hash data type continues to be experimental. 1137*0Sstevel@tonic-gate Limiting oneself to the interface elements provided by the 1138*0Sstevel@tonic-gate fields pragma will provide protection from any future changes. 1139*0Sstevel@tonic-gate 1140*0Sstevel@tonic-gate=head2 Automatic flushing of output buffers 1141*0Sstevel@tonic-gate 1142*0Sstevel@tonic-gatefork(), exec(), system(), qx//, and pipe open()s now flush buffers 1143*0Sstevel@tonic-gateof all files opened for output when the operation was attempted. This 1144*0Sstevel@tonic-gatemostly eliminates confusing buffering mishaps suffered by users unaware 1145*0Sstevel@tonic-gateof how Perl internally handles I/O. 1146*0Sstevel@tonic-gate 1147*0Sstevel@tonic-gateThis is not supported on some platforms like Solaris where a suitably 1148*0Sstevel@tonic-gatecorrect implementation of fflush(NULL) isn't available. 1149*0Sstevel@tonic-gate 1150*0Sstevel@tonic-gate=head2 Better diagnostics on meaningless filehandle operations 1151*0Sstevel@tonic-gate 1152*0Sstevel@tonic-gateConstructs such as C<< open(<FH>) >> and C<< close(<FH>) >> 1153*0Sstevel@tonic-gateare compile time errors. Attempting to read from filehandles that 1154*0Sstevel@tonic-gatewere opened only for writing will now produce warnings (just as 1155*0Sstevel@tonic-gatewriting to read-only filehandles does). 1156*0Sstevel@tonic-gate 1157*0Sstevel@tonic-gate=head2 Where possible, buffered data discarded from duped input filehandle 1158*0Sstevel@tonic-gate 1159*0Sstevel@tonic-gateC<< open(NEW, "<&OLD") >> now attempts to discard any data that 1160*0Sstevel@tonic-gatewas previously read and buffered in C<OLD> before duping the handle. 1161*0Sstevel@tonic-gateOn platforms where doing this is allowed, the next read operation 1162*0Sstevel@tonic-gateon C<NEW> will return the same data as the corresponding operation 1163*0Sstevel@tonic-gateon C<OLD>. Formerly, it would have returned the data from the start 1164*0Sstevel@tonic-gateof the following disk block instead. 1165*0Sstevel@tonic-gate 1166*0Sstevel@tonic-gate=head2 eof() has the same old magic as <> 1167*0Sstevel@tonic-gate 1168*0Sstevel@tonic-gateC<eof()> would return true if no attempt to read from C<< <> >> had 1169*0Sstevel@tonic-gateyet been made. C<eof()> has been changed to have a little magic of its 1170*0Sstevel@tonic-gateown, it now opens the C<< <> >> files. 1171*0Sstevel@tonic-gate 1172*0Sstevel@tonic-gate=head2 binmode() can be used to set :crlf and :raw modes 1173*0Sstevel@tonic-gate 1174*0Sstevel@tonic-gatebinmode() now accepts a second argument that specifies a discipline 1175*0Sstevel@tonic-gatefor the handle in question. The two pseudo-disciplines ":raw" and 1176*0Sstevel@tonic-gate":crlf" are currently supported on DOS-derivative platforms. 1177*0Sstevel@tonic-gateSee L<perlfunc/"binmode"> and L<open>. 1178*0Sstevel@tonic-gate 1179*0Sstevel@tonic-gate=head2 C<-T> filetest recognizes UTF-8 encoded files as "text" 1180*0Sstevel@tonic-gate 1181*0Sstevel@tonic-gateThe algorithm used for the C<-T> filetest has been enhanced to 1182*0Sstevel@tonic-gatecorrectly identify UTF-8 content as "text". 1183*0Sstevel@tonic-gate 1184*0Sstevel@tonic-gate=head2 system(), backticks and pipe open now reflect exec() failure 1185*0Sstevel@tonic-gate 1186*0Sstevel@tonic-gateOn Unix and similar platforms, system(), qx() and open(FOO, "cmd |") 1187*0Sstevel@tonic-gateetc., are implemented via fork() and exec(). When the underlying 1188*0Sstevel@tonic-gateexec() fails, earlier versions did not report the error properly, 1189*0Sstevel@tonic-gatesince the exec() happened to be in a different process. 1190*0Sstevel@tonic-gate 1191*0Sstevel@tonic-gateThe child process now communicates with the parent about the 1192*0Sstevel@tonic-gateerror in launching the external command, which allows these 1193*0Sstevel@tonic-gateconstructs to return with their usual error value and set $!. 1194*0Sstevel@tonic-gate 1195*0Sstevel@tonic-gate=head2 Improved diagnostics 1196*0Sstevel@tonic-gate 1197*0Sstevel@tonic-gateLine numbers are no longer suppressed (under most likely circumstances) 1198*0Sstevel@tonic-gateduring the global destruction phase. 1199*0Sstevel@tonic-gate 1200*0Sstevel@tonic-gateDiagnostics emitted from code running in threads other than the main 1201*0Sstevel@tonic-gatethread are now accompanied by the thread ID. 1202*0Sstevel@tonic-gate 1203*0Sstevel@tonic-gateEmbedded null characters in diagnostics now actually show up. They 1204*0Sstevel@tonic-gateused to truncate the message in prior versions. 1205*0Sstevel@tonic-gate 1206*0Sstevel@tonic-gate$foo::a and $foo::b are now exempt from "possible typo" warnings only 1207*0Sstevel@tonic-gateif sort() is encountered in package C<foo>. 1208*0Sstevel@tonic-gate 1209*0Sstevel@tonic-gateUnrecognized alphabetic escapes encountered when parsing quote 1210*0Sstevel@tonic-gateconstructs now generate a warning, since they may take on new 1211*0Sstevel@tonic-gatesemantics in later versions of Perl. 1212*0Sstevel@tonic-gate 1213*0Sstevel@tonic-gateMany diagnostics now report the internal operation in which the warning 1214*0Sstevel@tonic-gatewas provoked, like so: 1215*0Sstevel@tonic-gate 1216*0Sstevel@tonic-gate Use of uninitialized value in concatenation (.) at (eval 1) line 1. 1217*0Sstevel@tonic-gate Use of uninitialized value in print at (eval 1) line 1. 1218*0Sstevel@tonic-gate 1219*0Sstevel@tonic-gateDiagnostics that occur within eval may also report the file and line 1220*0Sstevel@tonic-gatenumber where the eval is located, in addition to the eval sequence 1221*0Sstevel@tonic-gatenumber and the line number within the evaluated text itself. For 1222*0Sstevel@tonic-gateexample: 1223*0Sstevel@tonic-gate 1224*0Sstevel@tonic-gate Not enough arguments for scalar at (eval 4)[newlib/perl5db.pl:1411] line 2, at EOF 1225*0Sstevel@tonic-gate 1226*0Sstevel@tonic-gate=head2 Diagnostics follow STDERR 1227*0Sstevel@tonic-gate 1228*0Sstevel@tonic-gateDiagnostic output now goes to whichever file the C<STDERR> handle 1229*0Sstevel@tonic-gateis pointing at, instead of always going to the underlying C runtime 1230*0Sstevel@tonic-gatelibrary's C<stderr>. 1231*0Sstevel@tonic-gate 1232*0Sstevel@tonic-gate=head2 More consistent close-on-exec behavior 1233*0Sstevel@tonic-gate 1234*0Sstevel@tonic-gateOn systems that support a close-on-exec flag on filehandles, the 1235*0Sstevel@tonic-gateflag is now set for any handles created by pipe(), socketpair(), 1236*0Sstevel@tonic-gatesocket(), and accept(), if that is warranted by the value of $^F 1237*0Sstevel@tonic-gatethat may be in effect. Earlier versions neglected to set the flag 1238*0Sstevel@tonic-gatefor handles created with these operators. See L<perlfunc/pipe>, 1239*0Sstevel@tonic-gateL<perlfunc/socketpair>, L<perlfunc/socket>, L<perlfunc/accept>, 1240*0Sstevel@tonic-gateand L<perlvar/$^F>. 1241*0Sstevel@tonic-gate 1242*0Sstevel@tonic-gate=head2 syswrite() ease-of-use 1243*0Sstevel@tonic-gate 1244*0Sstevel@tonic-gateThe length argument of C<syswrite()> has become optional. 1245*0Sstevel@tonic-gate 1246*0Sstevel@tonic-gate=head2 Better syntax checks on parenthesized unary operators 1247*0Sstevel@tonic-gate 1248*0Sstevel@tonic-gateExpressions such as: 1249*0Sstevel@tonic-gate 1250*0Sstevel@tonic-gate print defined(&foo,&bar,&baz); 1251*0Sstevel@tonic-gate print uc("foo","bar","baz"); 1252*0Sstevel@tonic-gate undef($foo,&bar); 1253*0Sstevel@tonic-gate 1254*0Sstevel@tonic-gateused to be accidentally allowed in earlier versions, and produced 1255*0Sstevel@tonic-gateunpredictable behaviour. Some produced ancillary warnings 1256*0Sstevel@tonic-gatewhen used in this way; others silently did the wrong thing. 1257*0Sstevel@tonic-gate 1258*0Sstevel@tonic-gateThe parenthesized forms of most unary operators that expect a single 1259*0Sstevel@tonic-gateargument now ensure that they are not called with more than one 1260*0Sstevel@tonic-gateargument, making the cases shown above syntax errors. The usual 1261*0Sstevel@tonic-gatebehaviour of: 1262*0Sstevel@tonic-gate 1263*0Sstevel@tonic-gate print defined &foo, &bar, &baz; 1264*0Sstevel@tonic-gate print uc "foo", "bar", "baz"; 1265*0Sstevel@tonic-gate undef $foo, &bar; 1266*0Sstevel@tonic-gate 1267*0Sstevel@tonic-gateremains unchanged. See L<perlop>. 1268*0Sstevel@tonic-gate 1269*0Sstevel@tonic-gate=head2 Bit operators support full native integer width 1270*0Sstevel@tonic-gate 1271*0Sstevel@tonic-gateThe bit operators (& | ^ ~ << >>) now operate on the full native 1272*0Sstevel@tonic-gateintegral width (the exact size of which is available in $Config{ivsize}). 1273*0Sstevel@tonic-gateFor example, if your platform is either natively 64-bit or if Perl 1274*0Sstevel@tonic-gatehas been configured to use 64-bit integers, these operations apply 1275*0Sstevel@tonic-gateto 8 bytes (as opposed to 4 bytes on 32-bit platforms). 1276*0Sstevel@tonic-gateFor portability, be sure to mask off the excess bits in the result of 1277*0Sstevel@tonic-gateunary C<~>, e.g., C<~$x & 0xffffffff>. 1278*0Sstevel@tonic-gate 1279*0Sstevel@tonic-gate=head2 Improved security features 1280*0Sstevel@tonic-gate 1281*0Sstevel@tonic-gateMore potentially unsafe operations taint their results for improved 1282*0Sstevel@tonic-gatesecurity. 1283*0Sstevel@tonic-gate 1284*0Sstevel@tonic-gateThe C<passwd> and C<shell> fields returned by the getpwent(), getpwnam(), 1285*0Sstevel@tonic-gateand getpwuid() are now tainted, because the user can affect their own 1286*0Sstevel@tonic-gateencrypted password and login shell. 1287*0Sstevel@tonic-gate 1288*0Sstevel@tonic-gateThe variable modified by shmread(), and messages returned by msgrcv() 1289*0Sstevel@tonic-gate(and its object-oriented interface IPC::SysV::Msg::rcv) are also tainted, 1290*0Sstevel@tonic-gatebecause other untrusted processes can modify messages and shared memory 1291*0Sstevel@tonic-gatesegments for their own nefarious purposes. 1292*0Sstevel@tonic-gate 1293*0Sstevel@tonic-gate=head2 More functional bareword prototype (*) 1294*0Sstevel@tonic-gate 1295*0Sstevel@tonic-gateBareword prototypes have been rationalized to enable them to be used 1296*0Sstevel@tonic-gateto override builtins that accept barewords and interpret them in 1297*0Sstevel@tonic-gatea special way, such as C<require> or C<do>. 1298*0Sstevel@tonic-gate 1299*0Sstevel@tonic-gateArguments prototyped as C<*> will now be visible within the subroutine 1300*0Sstevel@tonic-gateas either a simple scalar or as a reference to a typeglob. 1301*0Sstevel@tonic-gateSee L<perlsub/Prototypes>. 1302*0Sstevel@tonic-gate 1303*0Sstevel@tonic-gate=head2 C<require> and C<do> may be overridden 1304*0Sstevel@tonic-gate 1305*0Sstevel@tonic-gateC<require> and C<do 'file'> operations may be overridden locally 1306*0Sstevel@tonic-gateby importing subroutines of the same name into the current package 1307*0Sstevel@tonic-gate(or globally by importing them into the CORE::GLOBAL:: namespace). 1308*0Sstevel@tonic-gateOverriding C<require> will also affect C<use>, provided the override 1309*0Sstevel@tonic-gateis visible at compile-time. 1310*0Sstevel@tonic-gateSee L<perlsub/"Overriding Built-in Functions">. 1311*0Sstevel@tonic-gate 1312*0Sstevel@tonic-gate=head2 $^X variables may now have names longer than one character 1313*0Sstevel@tonic-gate 1314*0Sstevel@tonic-gateFormerly, $^X was synonymous with ${"\cX"}, but $^XY was a syntax 1315*0Sstevel@tonic-gateerror. Now variable names that begin with a control character may be 1316*0Sstevel@tonic-gatearbitrarily long. However, for compatibility reasons, these variables 1317*0Sstevel@tonic-gateI<must> be written with explicit braces, as C<${^XY}> for example. 1318*0Sstevel@tonic-gateC<${^XYZ}> is synonymous with ${"\cXYZ"}. Variable names with more 1319*0Sstevel@tonic-gatethan one control character, such as C<${^XY^Z}>, are illegal. 1320*0Sstevel@tonic-gate 1321*0Sstevel@tonic-gateThe old syntax has not changed. As before, `^X' may be either a 1322*0Sstevel@tonic-gateliteral control-X character or the two-character sequence `caret' plus 1323*0Sstevel@tonic-gate`X'. When braces are omitted, the variable name stops after the 1324*0Sstevel@tonic-gatecontrol character. Thus C<"$^XYZ"> continues to be synonymous with 1325*0Sstevel@tonic-gateC<$^X . "YZ"> as before. 1326*0Sstevel@tonic-gate 1327*0Sstevel@tonic-gateAs before, lexical variables may not have names beginning with control 1328*0Sstevel@tonic-gatecharacters. As before, variables whose names begin with a control 1329*0Sstevel@tonic-gatecharacter are always forced to be in package `main'. All such variables 1330*0Sstevel@tonic-gateare reserved for future extensions, except those that begin with 1331*0Sstevel@tonic-gateC<^_>, which may be used by user programs and are guaranteed not to 1332*0Sstevel@tonic-gateacquire special meaning in any future version of Perl. 1333*0Sstevel@tonic-gate 1334*0Sstevel@tonic-gate=head2 New variable $^C reflects C<-c> switch 1335*0Sstevel@tonic-gate 1336*0Sstevel@tonic-gateC<$^C> has a boolean value that reflects whether perl is being run 1337*0Sstevel@tonic-gatein compile-only mode (i.e. via the C<-c> switch). Since 1338*0Sstevel@tonic-gateBEGIN blocks are executed under such conditions, this variable 1339*0Sstevel@tonic-gateenables perl code to determine whether actions that make sense 1340*0Sstevel@tonic-gateonly during normal running are warranted. See L<perlvar>. 1341*0Sstevel@tonic-gate 1342*0Sstevel@tonic-gate=head2 New variable $^V contains Perl version as a string 1343*0Sstevel@tonic-gate 1344*0Sstevel@tonic-gateC<$^V> contains the Perl version number as a string composed of 1345*0Sstevel@tonic-gatecharacters whose ordinals match the version numbers, i.e. v5.6.0. 1346*0Sstevel@tonic-gateThis may be used in string comparisons. 1347*0Sstevel@tonic-gate 1348*0Sstevel@tonic-gateSee C<Support for strings represented as a vector of ordinals> for an 1349*0Sstevel@tonic-gateexample. 1350*0Sstevel@tonic-gate 1351*0Sstevel@tonic-gate=head2 Optional Y2K warnings 1352*0Sstevel@tonic-gate 1353*0Sstevel@tonic-gateIf Perl is built with the cpp macro C<PERL_Y2KWARN> defined, 1354*0Sstevel@tonic-gateit emits optional warnings when concatenating the number 19 1355*0Sstevel@tonic-gatewith another number. 1356*0Sstevel@tonic-gate 1357*0Sstevel@tonic-gateThis behavior must be specifically enabled when running Configure. 1358*0Sstevel@tonic-gateSee F<INSTALL> and F<README.Y2K>. 1359*0Sstevel@tonic-gate 1360*0Sstevel@tonic-gate=head2 Arrays now always interpolate into double-quoted strings 1361*0Sstevel@tonic-gate 1362*0Sstevel@tonic-gateIn double-quoted strings, arrays now interpolate, no matter what. The 1363*0Sstevel@tonic-gatebehavior in earlier versions of perl 5 was that arrays would interpolate 1364*0Sstevel@tonic-gateinto strings if the array had been mentioned before the string was 1365*0Sstevel@tonic-gatecompiled, and otherwise Perl would raise a fatal compile-time error. 1366*0Sstevel@tonic-gateIn versions 5.000 through 5.003, the error was 1367*0Sstevel@tonic-gate 1368*0Sstevel@tonic-gate Literal @example now requires backslash 1369*0Sstevel@tonic-gate 1370*0Sstevel@tonic-gateIn versions 5.004_01 through 5.6.0, the error was 1371*0Sstevel@tonic-gate 1372*0Sstevel@tonic-gate In string, @example now must be written as \@example 1373*0Sstevel@tonic-gate 1374*0Sstevel@tonic-gateThe idea here was to get people into the habit of writing 1375*0Sstevel@tonic-gateC<"fred\@example.com"> when they wanted a literal C<@> sign, just as 1376*0Sstevel@tonic-gatethey have always written C<"Give me back my \$5"> when they wanted a 1377*0Sstevel@tonic-gateliteral C<$> sign. 1378*0Sstevel@tonic-gate 1379*0Sstevel@tonic-gateStarting with 5.6.1, when Perl now sees an C<@> sign in a 1380*0Sstevel@tonic-gatedouble-quoted string, it I<always> attempts to interpolate an array, 1381*0Sstevel@tonic-gateregardless of whether or not the array has been used or declared 1382*0Sstevel@tonic-gatealready. The fatal error has been downgraded to an optional warning: 1383*0Sstevel@tonic-gate 1384*0Sstevel@tonic-gate Possible unintended interpolation of @example in string 1385*0Sstevel@tonic-gate 1386*0Sstevel@tonic-gateThis warns you that C<"fred@example.com"> is going to turn into 1387*0Sstevel@tonic-gateC<fred.com> if you don't backslash the C<@>. 1388*0Sstevel@tonic-gateSee http://www.plover.com/~mjd/perl/at-error.html for more details 1389*0Sstevel@tonic-gateabout the history here. 1390*0Sstevel@tonic-gate 1391*0Sstevel@tonic-gate=head1 Modules and Pragmata 1392*0Sstevel@tonic-gate 1393*0Sstevel@tonic-gate=head2 Modules 1394*0Sstevel@tonic-gate 1395*0Sstevel@tonic-gate=over 4 1396*0Sstevel@tonic-gate 1397*0Sstevel@tonic-gate=item attributes 1398*0Sstevel@tonic-gate 1399*0Sstevel@tonic-gateWhile used internally by Perl as a pragma, this module also 1400*0Sstevel@tonic-gateprovides a way to fetch subroutine and variable attributes. 1401*0Sstevel@tonic-gateSee L<attributes>. 1402*0Sstevel@tonic-gate 1403*0Sstevel@tonic-gate=item B 1404*0Sstevel@tonic-gate 1405*0Sstevel@tonic-gateThe Perl Compiler suite has been extensively reworked for this 1406*0Sstevel@tonic-gaterelease. More of the standard Perl testsuite passes when run 1407*0Sstevel@tonic-gateunder the Compiler, but there is still a significant way to 1408*0Sstevel@tonic-gatego to achieve production quality compiled executables. 1409*0Sstevel@tonic-gate 1410*0Sstevel@tonic-gate NOTE: The Compiler suite remains highly experimental. The 1411*0Sstevel@tonic-gate generated code may not be correct, even when it manages to execute 1412*0Sstevel@tonic-gate without errors. 1413*0Sstevel@tonic-gate 1414*0Sstevel@tonic-gate=item Benchmark 1415*0Sstevel@tonic-gate 1416*0Sstevel@tonic-gateOverall, Benchmark results exhibit lower average error and better timing 1417*0Sstevel@tonic-gateaccuracy. 1418*0Sstevel@tonic-gate 1419*0Sstevel@tonic-gateYou can now run tests for I<n> seconds instead of guessing the right 1420*0Sstevel@tonic-gatenumber of tests to run: e.g., timethese(-5, ...) will run each 1421*0Sstevel@tonic-gatecode for at least 5 CPU seconds. Zero as the "number of repetitions" 1422*0Sstevel@tonic-gatemeans "for at least 3 CPU seconds". The output format has also 1423*0Sstevel@tonic-gatechanged. For example: 1424*0Sstevel@tonic-gate 1425*0Sstevel@tonic-gate use Benchmark;$x=3;timethese(-5,{a=>sub{$x*$x},b=>sub{$x**2}}) 1426*0Sstevel@tonic-gate 1427*0Sstevel@tonic-gatewill now output something like this: 1428*0Sstevel@tonic-gate 1429*0Sstevel@tonic-gate Benchmark: running a, b, each for at least 5 CPU seconds... 1430*0Sstevel@tonic-gate a: 5 wallclock secs ( 5.77 usr + 0.00 sys = 5.77 CPU) @ 200551.91/s (n=1156516) 1431*0Sstevel@tonic-gate b: 4 wallclock secs ( 5.00 usr + 0.02 sys = 5.02 CPU) @ 159605.18/s (n=800686) 1432*0Sstevel@tonic-gate 1433*0Sstevel@tonic-gateNew features: "each for at least N CPU seconds...", "wallclock secs", 1434*0Sstevel@tonic-gateand the "@ operations/CPU second (n=operations)". 1435*0Sstevel@tonic-gate 1436*0Sstevel@tonic-gatetimethese() now returns a reference to a hash of Benchmark objects containing 1437*0Sstevel@tonic-gatethe test results, keyed on the names of the tests. 1438*0Sstevel@tonic-gate 1439*0Sstevel@tonic-gatetimethis() now returns the iterations field in the Benchmark result object 1440*0Sstevel@tonic-gateinstead of 0. 1441*0Sstevel@tonic-gate 1442*0Sstevel@tonic-gatetimethese(), timethis(), and the new cmpthese() (see below) can also take 1443*0Sstevel@tonic-gatea format specifier of 'none' to suppress output. 1444*0Sstevel@tonic-gate 1445*0Sstevel@tonic-gateA new function countit() is just like timeit() except that it takes a 1446*0Sstevel@tonic-gateTIME instead of a COUNT. 1447*0Sstevel@tonic-gate 1448*0Sstevel@tonic-gateA new function cmpthese() prints a chart comparing the results of each test 1449*0Sstevel@tonic-gatereturned from a timethese() call. For each possible pair of tests, the 1450*0Sstevel@tonic-gatepercentage speed difference (iters/sec or seconds/iter) is shown. 1451*0Sstevel@tonic-gate 1452*0Sstevel@tonic-gateFor other details, see L<Benchmark>. 1453*0Sstevel@tonic-gate 1454*0Sstevel@tonic-gate=item ByteLoader 1455*0Sstevel@tonic-gate 1456*0Sstevel@tonic-gateThe ByteLoader is a dedicated extension to generate and run 1457*0Sstevel@tonic-gatePerl bytecode. See L<ByteLoader>. 1458*0Sstevel@tonic-gate 1459*0Sstevel@tonic-gate=item constant 1460*0Sstevel@tonic-gate 1461*0Sstevel@tonic-gateReferences can now be used. 1462*0Sstevel@tonic-gate 1463*0Sstevel@tonic-gateThe new version also allows a leading underscore in constant names, but 1464*0Sstevel@tonic-gatedisallows a double leading underscore (as in "__LINE__"). Some other names 1465*0Sstevel@tonic-gateare disallowed or warned against, including BEGIN, END, etc. Some names 1466*0Sstevel@tonic-gatewhich were forced into main:: used to fail silently in some cases; now they're 1467*0Sstevel@tonic-gatefatal (outside of main::) and an optional warning (inside of main::). 1468*0Sstevel@tonic-gateThe ability to detect whether a constant had been set with a given name has 1469*0Sstevel@tonic-gatebeen added. 1470*0Sstevel@tonic-gate 1471*0Sstevel@tonic-gateSee L<constant>. 1472*0Sstevel@tonic-gate 1473*0Sstevel@tonic-gate=item charnames 1474*0Sstevel@tonic-gate 1475*0Sstevel@tonic-gateThis pragma implements the C<\N> string escape. See L<charnames>. 1476*0Sstevel@tonic-gate 1477*0Sstevel@tonic-gate=item Data::Dumper 1478*0Sstevel@tonic-gate 1479*0Sstevel@tonic-gateA C<Maxdepth> setting can be specified to avoid venturing 1480*0Sstevel@tonic-gatetoo deeply into deep data structures. See L<Data::Dumper>. 1481*0Sstevel@tonic-gate 1482*0Sstevel@tonic-gateThe XSUB implementation of Dump() is now automatically called if the 1483*0Sstevel@tonic-gateC<Useqq> setting is not in use. 1484*0Sstevel@tonic-gate 1485*0Sstevel@tonic-gateDumping C<qr//> objects works correctly. 1486*0Sstevel@tonic-gate 1487*0Sstevel@tonic-gate=item DB 1488*0Sstevel@tonic-gate 1489*0Sstevel@tonic-gateC<DB> is an experimental module that exposes a clean abstraction 1490*0Sstevel@tonic-gateto Perl's debugging API. 1491*0Sstevel@tonic-gate 1492*0Sstevel@tonic-gate=item DB_File 1493*0Sstevel@tonic-gate 1494*0Sstevel@tonic-gateDB_File can now be built with Berkeley DB versions 1, 2 or 3. 1495*0Sstevel@tonic-gateSee C<ext/DB_File/Changes>. 1496*0Sstevel@tonic-gate 1497*0Sstevel@tonic-gate=item Devel::DProf 1498*0Sstevel@tonic-gate 1499*0Sstevel@tonic-gateDevel::DProf, a Perl source code profiler has been added. See 1500*0Sstevel@tonic-gateL<Devel::DProf> and L<dprofpp>. 1501*0Sstevel@tonic-gate 1502*0Sstevel@tonic-gate=item Devel::Peek 1503*0Sstevel@tonic-gate 1504*0Sstevel@tonic-gateThe Devel::Peek module provides access to the internal representation 1505*0Sstevel@tonic-gateof Perl variables and data. It is a data debugging tool for the XS programmer. 1506*0Sstevel@tonic-gate 1507*0Sstevel@tonic-gate=item Dumpvalue 1508*0Sstevel@tonic-gate 1509*0Sstevel@tonic-gateThe Dumpvalue module provides screen dumps of Perl data. 1510*0Sstevel@tonic-gate 1511*0Sstevel@tonic-gate=item DynaLoader 1512*0Sstevel@tonic-gate 1513*0Sstevel@tonic-gateDynaLoader now supports a dl_unload_file() function on platforms that 1514*0Sstevel@tonic-gatesupport unloading shared objects using dlclose(). 1515*0Sstevel@tonic-gate 1516*0Sstevel@tonic-gatePerl can also optionally arrange to unload all extension shared objects 1517*0Sstevel@tonic-gateloaded by Perl. To enable this, build Perl with the Configure option 1518*0Sstevel@tonic-gateC<-Accflags=-DDL_UNLOAD_ALL_AT_EXIT>. (This maybe useful if you are 1519*0Sstevel@tonic-gateusing Apache with mod_perl.) 1520*0Sstevel@tonic-gate 1521*0Sstevel@tonic-gate=item English 1522*0Sstevel@tonic-gate 1523*0Sstevel@tonic-gate$PERL_VERSION now stands for C<$^V> (a string value) rather than for C<$]> 1524*0Sstevel@tonic-gate(a numeric value). 1525*0Sstevel@tonic-gate 1526*0Sstevel@tonic-gate=item Env 1527*0Sstevel@tonic-gate 1528*0Sstevel@tonic-gateEnv now supports accessing environment variables like PATH as array 1529*0Sstevel@tonic-gatevariables. 1530*0Sstevel@tonic-gate 1531*0Sstevel@tonic-gate=item Fcntl 1532*0Sstevel@tonic-gate 1533*0Sstevel@tonic-gateMore Fcntl constants added: F_SETLK64, F_SETLKW64, O_LARGEFILE for 1534*0Sstevel@tonic-gatelarge file (more than 4GB) access (NOTE: the O_LARGEFILE is 1535*0Sstevel@tonic-gateautomatically added to sysopen() flags if large file support has been 1536*0Sstevel@tonic-gateconfigured, as is the default), Free/Net/OpenBSD locking behaviour 1537*0Sstevel@tonic-gateflags F_FLOCK, F_POSIX, Linux F_SHLCK, and O_ACCMODE: the combined 1538*0Sstevel@tonic-gatemask of O_RDONLY, O_WRONLY, and O_RDWR. The seek()/sysseek() 1539*0Sstevel@tonic-gateconstants SEEK_SET, SEEK_CUR, and SEEK_END are available via the 1540*0Sstevel@tonic-gateC<:seek> tag. The chmod()/stat() S_IF* constants and S_IS* functions 1541*0Sstevel@tonic-gateare available via the C<:mode> tag. 1542*0Sstevel@tonic-gate 1543*0Sstevel@tonic-gate=item File::Compare 1544*0Sstevel@tonic-gate 1545*0Sstevel@tonic-gateA compare_text() function has been added, which allows custom 1546*0Sstevel@tonic-gatecomparison functions. See L<File::Compare>. 1547*0Sstevel@tonic-gate 1548*0Sstevel@tonic-gate=item File::Find 1549*0Sstevel@tonic-gate 1550*0Sstevel@tonic-gateFile::Find now works correctly when the wanted() function is either 1551*0Sstevel@tonic-gateautoloaded or is a symbolic reference. 1552*0Sstevel@tonic-gate 1553*0Sstevel@tonic-gateA bug that caused File::Find to lose track of the working directory 1554*0Sstevel@tonic-gatewhen pruning top-level directories has been fixed. 1555*0Sstevel@tonic-gate 1556*0Sstevel@tonic-gateFile::Find now also supports several other options to control its 1557*0Sstevel@tonic-gatebehavior. It can follow symbolic links if the C<follow> option is 1558*0Sstevel@tonic-gatespecified. Enabling the C<no_chdir> option will make File::Find skip 1559*0Sstevel@tonic-gatechanging the current directory when walking directories. The C<untaint> 1560*0Sstevel@tonic-gateflag can be useful when running with taint checks enabled. 1561*0Sstevel@tonic-gate 1562*0Sstevel@tonic-gateSee L<File::Find>. 1563*0Sstevel@tonic-gate 1564*0Sstevel@tonic-gate=item File::Glob 1565*0Sstevel@tonic-gate 1566*0Sstevel@tonic-gateThis extension implements BSD-style file globbing. By default, 1567*0Sstevel@tonic-gateit will also be used for the internal implementation of the glob() 1568*0Sstevel@tonic-gateoperator. See L<File::Glob>. 1569*0Sstevel@tonic-gate 1570*0Sstevel@tonic-gate=item File::Spec 1571*0Sstevel@tonic-gate 1572*0Sstevel@tonic-gateNew methods have been added to the File::Spec module: devnull() returns 1573*0Sstevel@tonic-gatethe name of the null device (/dev/null on Unix) and tmpdir() the name of 1574*0Sstevel@tonic-gatethe temp directory (normally /tmp on Unix). There are now also methods 1575*0Sstevel@tonic-gateto convert between absolute and relative filenames: abs2rel() and 1576*0Sstevel@tonic-gaterel2abs(). For compatibility with operating systems that specify volume 1577*0Sstevel@tonic-gatenames in file paths, the splitpath(), splitdir(), and catdir() methods 1578*0Sstevel@tonic-gatehave been added. 1579*0Sstevel@tonic-gate 1580*0Sstevel@tonic-gate=item File::Spec::Functions 1581*0Sstevel@tonic-gate 1582*0Sstevel@tonic-gateThe new File::Spec::Functions modules provides a function interface 1583*0Sstevel@tonic-gateto the File::Spec module. Allows shorthand 1584*0Sstevel@tonic-gate 1585*0Sstevel@tonic-gate $fullname = catfile($dir1, $dir2, $file); 1586*0Sstevel@tonic-gate 1587*0Sstevel@tonic-gateinstead of 1588*0Sstevel@tonic-gate 1589*0Sstevel@tonic-gate $fullname = File::Spec->catfile($dir1, $dir2, $file); 1590*0Sstevel@tonic-gate 1591*0Sstevel@tonic-gate=item Getopt::Long 1592*0Sstevel@tonic-gate 1593*0Sstevel@tonic-gateGetopt::Long licensing has changed to allow the Perl Artistic License 1594*0Sstevel@tonic-gateas well as the GPL. It used to be GPL only, which got in the way of 1595*0Sstevel@tonic-gatenon-GPL applications that wanted to use Getopt::Long. 1596*0Sstevel@tonic-gate 1597*0Sstevel@tonic-gateGetopt::Long encourages the use of Pod::Usage to produce help 1598*0Sstevel@tonic-gatemessages. For example: 1599*0Sstevel@tonic-gate 1600*0Sstevel@tonic-gate use Getopt::Long; 1601*0Sstevel@tonic-gate use Pod::Usage; 1602*0Sstevel@tonic-gate my $man = 0; 1603*0Sstevel@tonic-gate my $help = 0; 1604*0Sstevel@tonic-gate GetOptions('help|?' => \$help, man => \$man) or pod2usage(2); 1605*0Sstevel@tonic-gate pod2usage(1) if $help; 1606*0Sstevel@tonic-gate pod2usage(-exitstatus => 0, -verbose => 2) if $man; 1607*0Sstevel@tonic-gate 1608*0Sstevel@tonic-gate __END__ 1609*0Sstevel@tonic-gate 1610*0Sstevel@tonic-gate =head1 NAME 1611*0Sstevel@tonic-gate 1612*0Sstevel@tonic-gate sample - Using Getopt::Long and Pod::Usage 1613*0Sstevel@tonic-gate 1614*0Sstevel@tonic-gate =head1 SYNOPSIS 1615*0Sstevel@tonic-gate 1616*0Sstevel@tonic-gate sample [options] [file ...] 1617*0Sstevel@tonic-gate 1618*0Sstevel@tonic-gate Options: 1619*0Sstevel@tonic-gate -help brief help message 1620*0Sstevel@tonic-gate -man full documentation 1621*0Sstevel@tonic-gate 1622*0Sstevel@tonic-gate =head1 OPTIONS 1623*0Sstevel@tonic-gate 1624*0Sstevel@tonic-gate =over 8 1625*0Sstevel@tonic-gate 1626*0Sstevel@tonic-gate =item B<-help> 1627*0Sstevel@tonic-gate 1628*0Sstevel@tonic-gate Print a brief help message and exits. 1629*0Sstevel@tonic-gate 1630*0Sstevel@tonic-gate =item B<-man> 1631*0Sstevel@tonic-gate 1632*0Sstevel@tonic-gate Prints the manual page and exits. 1633*0Sstevel@tonic-gate 1634*0Sstevel@tonic-gate =back 1635*0Sstevel@tonic-gate 1636*0Sstevel@tonic-gate =head1 DESCRIPTION 1637*0Sstevel@tonic-gate 1638*0Sstevel@tonic-gate B<This program> will read the given input file(s) and do something 1639*0Sstevel@tonic-gate useful with the contents thereof. 1640*0Sstevel@tonic-gate 1641*0Sstevel@tonic-gate =cut 1642*0Sstevel@tonic-gate 1643*0Sstevel@tonic-gateSee L<Pod::Usage> for details. 1644*0Sstevel@tonic-gate 1645*0Sstevel@tonic-gateA bug that prevented the non-option call-back <> from being 1646*0Sstevel@tonic-gatespecified as the first argument has been fixed. 1647*0Sstevel@tonic-gate 1648*0Sstevel@tonic-gateTo specify the characters < and > as option starters, use ><. Note, 1649*0Sstevel@tonic-gatehowever, that changing option starters is strongly deprecated. 1650*0Sstevel@tonic-gate 1651*0Sstevel@tonic-gate=item IO 1652*0Sstevel@tonic-gate 1653*0Sstevel@tonic-gatewrite() and syswrite() will now accept a single-argument 1654*0Sstevel@tonic-gateform of the call, for consistency with Perl's syswrite(). 1655*0Sstevel@tonic-gate 1656*0Sstevel@tonic-gateYou can now create a TCP-based IO::Socket::INET without forcing 1657*0Sstevel@tonic-gatea connect attempt. This allows you to configure its options 1658*0Sstevel@tonic-gate(like making it non-blocking) and then call connect() manually. 1659*0Sstevel@tonic-gate 1660*0Sstevel@tonic-gateA bug that prevented the IO::Socket::protocol() accessor 1661*0Sstevel@tonic-gatefrom ever returning the correct value has been corrected. 1662*0Sstevel@tonic-gate 1663*0Sstevel@tonic-gateIO::Socket::connect now uses non-blocking IO instead of alarm() 1664*0Sstevel@tonic-gateto do connect timeouts. 1665*0Sstevel@tonic-gate 1666*0Sstevel@tonic-gateIO::Socket::accept now uses select() instead of alarm() for doing 1667*0Sstevel@tonic-gatetimeouts. 1668*0Sstevel@tonic-gate 1669*0Sstevel@tonic-gateIO::Socket::INET->new now sets $! correctly on failure. $@ is 1670*0Sstevel@tonic-gatestill set for backwards compatibility. 1671*0Sstevel@tonic-gate 1672*0Sstevel@tonic-gate=item JPL 1673*0Sstevel@tonic-gate 1674*0Sstevel@tonic-gateJava Perl Lingo is now distributed with Perl. See jpl/README 1675*0Sstevel@tonic-gatefor more information. 1676*0Sstevel@tonic-gate 1677*0Sstevel@tonic-gate=item lib 1678*0Sstevel@tonic-gate 1679*0Sstevel@tonic-gateC<use lib> now weeds out any trailing duplicate entries. 1680*0Sstevel@tonic-gateC<no lib> removes all named entries. 1681*0Sstevel@tonic-gate 1682*0Sstevel@tonic-gate=item Math::BigInt 1683*0Sstevel@tonic-gate 1684*0Sstevel@tonic-gateThe bitwise operations C<<< << >>>, C<<< >> >>>, C<&>, C<|>, 1685*0Sstevel@tonic-gateand C<~> are now supported on bigints. 1686*0Sstevel@tonic-gate 1687*0Sstevel@tonic-gate=item Math::Complex 1688*0Sstevel@tonic-gate 1689*0Sstevel@tonic-gateThe accessor methods Re, Im, arg, abs, rho, and theta can now also 1690*0Sstevel@tonic-gateact as mutators (accessor $z->Re(), mutator $z->Re(3)). 1691*0Sstevel@tonic-gate 1692*0Sstevel@tonic-gateThe class method C<display_format> and the corresponding object method 1693*0Sstevel@tonic-gateC<display_format>, in addition to accepting just one argument, now can 1694*0Sstevel@tonic-gatealso accept a parameter hash. Recognized keys of a parameter hash are 1695*0Sstevel@tonic-gateC<"style">, which corresponds to the old one parameter case, and two 1696*0Sstevel@tonic-gatenew parameters: C<"format">, which is a printf()-style format string 1697*0Sstevel@tonic-gate(defaults usually to C<"%.15g">, you can revert to the default by 1698*0Sstevel@tonic-gatesetting the format string to C<undef>) used for both parts of a 1699*0Sstevel@tonic-gatecomplex number, and C<"polar_pretty_print"> (defaults to true), 1700*0Sstevel@tonic-gatewhich controls whether an attempt is made to try to recognize small 1701*0Sstevel@tonic-gatemultiples and rationals of pi (2pi, pi/2) at the argument (angle) of a 1702*0Sstevel@tonic-gatepolar complex number. 1703*0Sstevel@tonic-gate 1704*0Sstevel@tonic-gateThe potentially disruptive change is that in list context both methods 1705*0Sstevel@tonic-gatenow I<return the parameter hash>, instead of only the value of the 1706*0Sstevel@tonic-gateC<"style"> parameter. 1707*0Sstevel@tonic-gate 1708*0Sstevel@tonic-gate=item Math::Trig 1709*0Sstevel@tonic-gate 1710*0Sstevel@tonic-gateA little bit of radial trigonometry (cylindrical and spherical), 1711*0Sstevel@tonic-gateradial coordinate conversions, and the great circle distance were added. 1712*0Sstevel@tonic-gate 1713*0Sstevel@tonic-gate=item Pod::Parser, Pod::InputObjects 1714*0Sstevel@tonic-gate 1715*0Sstevel@tonic-gatePod::Parser is a base class for parsing and selecting sections of 1716*0Sstevel@tonic-gatepod documentation from an input stream. This module takes care of 1717*0Sstevel@tonic-gateidentifying pod paragraphs and commands in the input and hands off the 1718*0Sstevel@tonic-gateparsed paragraphs and commands to user-defined methods which are free 1719*0Sstevel@tonic-gateto interpret or translate them as they see fit. 1720*0Sstevel@tonic-gate 1721*0Sstevel@tonic-gatePod::InputObjects defines some input objects needed by Pod::Parser, and 1722*0Sstevel@tonic-gatefor advanced users of Pod::Parser that need more about a command besides 1723*0Sstevel@tonic-gateits name and text. 1724*0Sstevel@tonic-gate 1725*0Sstevel@tonic-gateAs of release 5.6.0 of Perl, Pod::Parser is now the officially sanctioned 1726*0Sstevel@tonic-gate"base parser code" recommended for use by all pod2xxx translators. 1727*0Sstevel@tonic-gatePod::Text (pod2text) and Pod::Man (pod2man) have already been converted 1728*0Sstevel@tonic-gateto use Pod::Parser and efforts to convert Pod::HTML (pod2html) are already 1729*0Sstevel@tonic-gateunderway. For any questions or comments about pod parsing and translating 1730*0Sstevel@tonic-gateissues and utilities, please use the pod-people@perl.org mailing list. 1731*0Sstevel@tonic-gate 1732*0Sstevel@tonic-gateFor further information, please see L<Pod::Parser> and L<Pod::InputObjects>. 1733*0Sstevel@tonic-gate 1734*0Sstevel@tonic-gate=item Pod::Checker, podchecker 1735*0Sstevel@tonic-gate 1736*0Sstevel@tonic-gateThis utility checks pod files for correct syntax, according to 1737*0Sstevel@tonic-gateL<perlpod>. Obvious errors are flagged as such, while warnings are 1738*0Sstevel@tonic-gateprinted for mistakes that can be handled gracefully. The checklist is 1739*0Sstevel@tonic-gatenot complete yet. See L<Pod::Checker>. 1740*0Sstevel@tonic-gate 1741*0Sstevel@tonic-gate=item Pod::ParseUtils, Pod::Find 1742*0Sstevel@tonic-gate 1743*0Sstevel@tonic-gateThese modules provide a set of gizmos that are useful mainly for pod 1744*0Sstevel@tonic-gatetranslators. L<Pod::Find|Pod::Find> traverses directory structures and 1745*0Sstevel@tonic-gatereturns found pod files, along with their canonical names (like 1746*0Sstevel@tonic-gateC<File::Spec::Unix>). L<Pod::ParseUtils|Pod::ParseUtils> contains 1747*0Sstevel@tonic-gateB<Pod::List> (useful for storing pod list information), B<Pod::Hyperlink> 1748*0Sstevel@tonic-gate(for parsing the contents of C<LE<lt>E<gt>> sequences) and B<Pod::Cache> 1749*0Sstevel@tonic-gate(for caching information about pod files, e.g., link nodes). 1750*0Sstevel@tonic-gate 1751*0Sstevel@tonic-gate=item Pod::Select, podselect 1752*0Sstevel@tonic-gate 1753*0Sstevel@tonic-gatePod::Select is a subclass of Pod::Parser which provides a function 1754*0Sstevel@tonic-gatenamed "podselect()" to filter out user-specified sections of raw pod 1755*0Sstevel@tonic-gatedocumentation from an input stream. podselect is a script that provides 1756*0Sstevel@tonic-gateaccess to Pod::Select from other scripts to be used as a filter. 1757*0Sstevel@tonic-gateSee L<Pod::Select>. 1758*0Sstevel@tonic-gate 1759*0Sstevel@tonic-gate=item Pod::Usage, pod2usage 1760*0Sstevel@tonic-gate 1761*0Sstevel@tonic-gatePod::Usage provides the function "pod2usage()" to print usage messages for 1762*0Sstevel@tonic-gatea Perl script based on its embedded pod documentation. The pod2usage() 1763*0Sstevel@tonic-gatefunction is generally useful to all script authors since it lets them 1764*0Sstevel@tonic-gatewrite and maintain a single source (the pods) for documentation, thus 1765*0Sstevel@tonic-gateremoving the need to create and maintain redundant usage message text 1766*0Sstevel@tonic-gateconsisting of information already in the pods. 1767*0Sstevel@tonic-gate 1768*0Sstevel@tonic-gateThere is also a pod2usage script which can be used from other kinds of 1769*0Sstevel@tonic-gatescripts to print usage messages from pods (even for non-Perl scripts 1770*0Sstevel@tonic-gatewith pods embedded in comments). 1771*0Sstevel@tonic-gate 1772*0Sstevel@tonic-gateFor details and examples, please see L<Pod::Usage>. 1773*0Sstevel@tonic-gate 1774*0Sstevel@tonic-gate=item Pod::Text and Pod::Man 1775*0Sstevel@tonic-gate 1776*0Sstevel@tonic-gatePod::Text has been rewritten to use Pod::Parser. While pod2text() is 1777*0Sstevel@tonic-gatestill available for backwards compatibility, the module now has a new 1778*0Sstevel@tonic-gatepreferred interface. See L<Pod::Text> for the details. The new Pod::Text 1779*0Sstevel@tonic-gatemodule is easily subclassed for tweaks to the output, and two such 1780*0Sstevel@tonic-gatesubclasses (Pod::Text::Termcap for man-page-style bold and underlining 1781*0Sstevel@tonic-gateusing termcap information, and Pod::Text::Color for markup with ANSI color 1782*0Sstevel@tonic-gatesequences) are now standard. 1783*0Sstevel@tonic-gate 1784*0Sstevel@tonic-gatepod2man has been turned into a module, Pod::Man, which also uses 1785*0Sstevel@tonic-gatePod::Parser. In the process, several outstanding bugs related to quotes 1786*0Sstevel@tonic-gatein section headers, quoting of code escapes, and nested lists have been 1787*0Sstevel@tonic-gatefixed. pod2man is now a wrapper script around this module. 1788*0Sstevel@tonic-gate 1789*0Sstevel@tonic-gate=item SDBM_File 1790*0Sstevel@tonic-gate 1791*0Sstevel@tonic-gateAn EXISTS method has been added to this module (and sdbm_exists() has 1792*0Sstevel@tonic-gatebeen added to the underlying sdbm library), so one can now call exists 1793*0Sstevel@tonic-gateon an SDBM_File tied hash and get the correct result, rather than a 1794*0Sstevel@tonic-gateruntime error. 1795*0Sstevel@tonic-gate 1796*0Sstevel@tonic-gateA bug that may have caused data loss when more than one disk block 1797*0Sstevel@tonic-gatehappens to be read from the database in a single FETCH() has been 1798*0Sstevel@tonic-gatefixed. 1799*0Sstevel@tonic-gate 1800*0Sstevel@tonic-gate=item Sys::Syslog 1801*0Sstevel@tonic-gate 1802*0Sstevel@tonic-gateSys::Syslog now uses XSUBs to access facilities from syslog.h so it 1803*0Sstevel@tonic-gateno longer requires syslog.ph to exist. 1804*0Sstevel@tonic-gate 1805*0Sstevel@tonic-gate=item Sys::Hostname 1806*0Sstevel@tonic-gate 1807*0Sstevel@tonic-gateSys::Hostname now uses XSUBs to call the C library's gethostname() or 1808*0Sstevel@tonic-gateuname() if they exist. 1809*0Sstevel@tonic-gate 1810*0Sstevel@tonic-gate=item Term::ANSIColor 1811*0Sstevel@tonic-gate 1812*0Sstevel@tonic-gateTerm::ANSIColor is a very simple module to provide easy and readable 1813*0Sstevel@tonic-gateaccess to the ANSI color and highlighting escape sequences, supported by 1814*0Sstevel@tonic-gatemost ANSI terminal emulators. It is now included standard. 1815*0Sstevel@tonic-gate 1816*0Sstevel@tonic-gate=item Time::Local 1817*0Sstevel@tonic-gate 1818*0Sstevel@tonic-gateThe timelocal() and timegm() functions used to silently return bogus 1819*0Sstevel@tonic-gateresults when the date fell outside the machine's integer range. They 1820*0Sstevel@tonic-gatenow consistently croak() if the date falls in an unsupported range. 1821*0Sstevel@tonic-gate 1822*0Sstevel@tonic-gate=item Win32 1823*0Sstevel@tonic-gate 1824*0Sstevel@tonic-gateThe error return value in list context has been changed for all functions 1825*0Sstevel@tonic-gatethat return a list of values. Previously these functions returned a list 1826*0Sstevel@tonic-gatewith a single element C<undef> if an error occurred. Now these functions 1827*0Sstevel@tonic-gatereturn the empty list in these situations. This applies to the following 1828*0Sstevel@tonic-gatefunctions: 1829*0Sstevel@tonic-gate 1830*0Sstevel@tonic-gate Win32::FsType 1831*0Sstevel@tonic-gate Win32::GetOSVersion 1832*0Sstevel@tonic-gate 1833*0Sstevel@tonic-gateThe remaining functions are unchanged and continue to return C<undef> on 1834*0Sstevel@tonic-gateerror even in list context. 1835*0Sstevel@tonic-gate 1836*0Sstevel@tonic-gateThe Win32::SetLastError(ERROR) function has been added as a complement 1837*0Sstevel@tonic-gateto the Win32::GetLastError() function. 1838*0Sstevel@tonic-gate 1839*0Sstevel@tonic-gateThe new Win32::GetFullPathName(FILENAME) returns the full absolute 1840*0Sstevel@tonic-gatepathname for FILENAME in scalar context. In list context it returns 1841*0Sstevel@tonic-gatea two-element list containing the fully qualified directory name and 1842*0Sstevel@tonic-gatethe filename. See L<Win32>. 1843*0Sstevel@tonic-gate 1844*0Sstevel@tonic-gate=item XSLoader 1845*0Sstevel@tonic-gate 1846*0Sstevel@tonic-gateThe XSLoader extension is a simpler alternative to DynaLoader. 1847*0Sstevel@tonic-gateSee L<XSLoader>. 1848*0Sstevel@tonic-gate 1849*0Sstevel@tonic-gate=item DBM Filters 1850*0Sstevel@tonic-gate 1851*0Sstevel@tonic-gateA new feature called "DBM Filters" has been added to all the 1852*0Sstevel@tonic-gateDBM modules--DB_File, GDBM_File, NDBM_File, ODBM_File, and SDBM_File. 1853*0Sstevel@tonic-gateDBM Filters add four new methods to each DBM module: 1854*0Sstevel@tonic-gate 1855*0Sstevel@tonic-gate filter_store_key 1856*0Sstevel@tonic-gate filter_store_value 1857*0Sstevel@tonic-gate filter_fetch_key 1858*0Sstevel@tonic-gate filter_fetch_value 1859*0Sstevel@tonic-gate 1860*0Sstevel@tonic-gateThese can be used to filter key-value pairs before the pairs are 1861*0Sstevel@tonic-gatewritten to the database or just after they are read from the database. 1862*0Sstevel@tonic-gateSee L<perldbmfilter> for further information. 1863*0Sstevel@tonic-gate 1864*0Sstevel@tonic-gate=back 1865*0Sstevel@tonic-gate 1866*0Sstevel@tonic-gate=head2 Pragmata 1867*0Sstevel@tonic-gate 1868*0Sstevel@tonic-gateC<use attrs> is now obsolete, and is only provided for 1869*0Sstevel@tonic-gatebackward-compatibility. It's been replaced by the C<sub : attributes> 1870*0Sstevel@tonic-gatesyntax. See L<perlsub/"Subroutine Attributes"> and L<attributes>. 1871*0Sstevel@tonic-gate 1872*0Sstevel@tonic-gateLexical warnings pragma, C<use warnings;>, to control optional warnings. 1873*0Sstevel@tonic-gateSee L<perllexwarn>. 1874*0Sstevel@tonic-gate 1875*0Sstevel@tonic-gateC<use filetest> to control the behaviour of filetests (C<-r> C<-w> 1876*0Sstevel@tonic-gate...). Currently only one subpragma implemented, "use filetest 1877*0Sstevel@tonic-gate'access';", that uses access(2) or equivalent to check permissions 1878*0Sstevel@tonic-gateinstead of using stat(2) as usual. This matters in filesystems 1879*0Sstevel@tonic-gatewhere there are ACLs (access control lists): the stat(2) might lie, 1880*0Sstevel@tonic-gatebut access(2) knows better. 1881*0Sstevel@tonic-gate 1882*0Sstevel@tonic-gateThe C<open> pragma can be used to specify default disciplines for 1883*0Sstevel@tonic-gatehandle constructors (e.g. open()) and for qx//. The two 1884*0Sstevel@tonic-gatepseudo-disciplines C<:raw> and C<:crlf> are currently supported on 1885*0Sstevel@tonic-gateDOS-derivative platforms (i.e. where binmode is not a no-op). 1886*0Sstevel@tonic-gateSee also L</"binmode() can be used to set :crlf and :raw modes">. 1887*0Sstevel@tonic-gate 1888*0Sstevel@tonic-gate=head1 Utility Changes 1889*0Sstevel@tonic-gate 1890*0Sstevel@tonic-gate=head2 dprofpp 1891*0Sstevel@tonic-gate 1892*0Sstevel@tonic-gateC<dprofpp> is used to display profile data generated using C<Devel::DProf>. 1893*0Sstevel@tonic-gateSee L<dprofpp>. 1894*0Sstevel@tonic-gate 1895*0Sstevel@tonic-gate=head2 find2perl 1896*0Sstevel@tonic-gate 1897*0Sstevel@tonic-gateThe C<find2perl> utility now uses the enhanced features of the File::Find 1898*0Sstevel@tonic-gatemodule. The -depth and -follow options are supported. Pod documentation 1899*0Sstevel@tonic-gateis also included in the script. 1900*0Sstevel@tonic-gate 1901*0Sstevel@tonic-gate=head2 h2xs 1902*0Sstevel@tonic-gate 1903*0Sstevel@tonic-gateThe C<h2xs> tool can now work in conjunction with C<C::Scan> (available 1904*0Sstevel@tonic-gatefrom CPAN) to automatically parse real-life header files. The C<-M>, 1905*0Sstevel@tonic-gateC<-a>, C<-k>, and C<-o> options are new. 1906*0Sstevel@tonic-gate 1907*0Sstevel@tonic-gate=head2 perlcc 1908*0Sstevel@tonic-gate 1909*0Sstevel@tonic-gateC<perlcc> now supports the C and Bytecode backends. By default, 1910*0Sstevel@tonic-gateit generates output from the simple C backend rather than the 1911*0Sstevel@tonic-gateoptimized C backend. 1912*0Sstevel@tonic-gate 1913*0Sstevel@tonic-gateSupport for non-Unix platforms has been improved. 1914*0Sstevel@tonic-gate 1915*0Sstevel@tonic-gate=head2 perldoc 1916*0Sstevel@tonic-gate 1917*0Sstevel@tonic-gateC<perldoc> has been reworked to avoid possible security holes. 1918*0Sstevel@tonic-gateIt will not by default let itself be run as the superuser, but you 1919*0Sstevel@tonic-gatemay still use the B<-U> switch to try to make it drop privileges 1920*0Sstevel@tonic-gatefirst. 1921*0Sstevel@tonic-gate 1922*0Sstevel@tonic-gate=head2 The Perl Debugger 1923*0Sstevel@tonic-gate 1924*0Sstevel@tonic-gateMany bug fixes and enhancements were added to F<perl5db.pl>, the 1925*0Sstevel@tonic-gatePerl debugger. The help documentation was rearranged. New commands 1926*0Sstevel@tonic-gateinclude C<< < ? >>, C<< > ? >>, and C<< { ? >> to list out current 1927*0Sstevel@tonic-gateactions, C<man I<docpage>> to run your doc viewer on some perl 1928*0Sstevel@tonic-gatedocset, and support for quoted options. The help information was 1929*0Sstevel@tonic-gaterearranged, and should be viewable once again if you're using B<less> 1930*0Sstevel@tonic-gateas your pager. A serious security hole was plugged--you should 1931*0Sstevel@tonic-gateimmediately remove all older versions of the Perl debugger as 1932*0Sstevel@tonic-gateinstalled in previous releases, all the way back to perl3, from 1933*0Sstevel@tonic-gateyour system to avoid being bitten by this. 1934*0Sstevel@tonic-gate 1935*0Sstevel@tonic-gate=head1 Improved Documentation 1936*0Sstevel@tonic-gate 1937*0Sstevel@tonic-gateMany of the platform-specific README files are now part of the perl 1938*0Sstevel@tonic-gateinstallation. See L<perl> for the complete list. 1939*0Sstevel@tonic-gate 1940*0Sstevel@tonic-gate=over 4 1941*0Sstevel@tonic-gate 1942*0Sstevel@tonic-gate=item perlapi.pod 1943*0Sstevel@tonic-gate 1944*0Sstevel@tonic-gateThe official list of public Perl API functions. 1945*0Sstevel@tonic-gate 1946*0Sstevel@tonic-gate=item perlboot.pod 1947*0Sstevel@tonic-gate 1948*0Sstevel@tonic-gateA tutorial for beginners on object-oriented Perl. 1949*0Sstevel@tonic-gate 1950*0Sstevel@tonic-gate=item perlcompile.pod 1951*0Sstevel@tonic-gate 1952*0Sstevel@tonic-gateAn introduction to using the Perl Compiler suite. 1953*0Sstevel@tonic-gate 1954*0Sstevel@tonic-gate=item perldbmfilter.pod 1955*0Sstevel@tonic-gate 1956*0Sstevel@tonic-gateA howto document on using the DBM filter facility. 1957*0Sstevel@tonic-gate 1958*0Sstevel@tonic-gate=item perldebug.pod 1959*0Sstevel@tonic-gate 1960*0Sstevel@tonic-gateAll material unrelated to running the Perl debugger, plus all 1961*0Sstevel@tonic-gatelow-level guts-like details that risked crushing the casual user 1962*0Sstevel@tonic-gateof the debugger, have been relocated from the old manpage to the 1963*0Sstevel@tonic-gatenext entry below. 1964*0Sstevel@tonic-gate 1965*0Sstevel@tonic-gate=item perldebguts.pod 1966*0Sstevel@tonic-gate 1967*0Sstevel@tonic-gateThis new manpage contains excessively low-level material not related 1968*0Sstevel@tonic-gateto the Perl debugger, but slightly related to debugging Perl itself. 1969*0Sstevel@tonic-gateIt also contains some arcane internal details of how the debugging 1970*0Sstevel@tonic-gateprocess works that may only be of interest to developers of Perl 1971*0Sstevel@tonic-gatedebuggers. 1972*0Sstevel@tonic-gate 1973*0Sstevel@tonic-gate=item perlfork.pod 1974*0Sstevel@tonic-gate 1975*0Sstevel@tonic-gateNotes on the fork() emulation currently available for the Windows platform. 1976*0Sstevel@tonic-gate 1977*0Sstevel@tonic-gate=item perlfilter.pod 1978*0Sstevel@tonic-gate 1979*0Sstevel@tonic-gateAn introduction to writing Perl source filters. 1980*0Sstevel@tonic-gate 1981*0Sstevel@tonic-gate=item perlhack.pod 1982*0Sstevel@tonic-gate 1983*0Sstevel@tonic-gateSome guidelines for hacking the Perl source code. 1984*0Sstevel@tonic-gate 1985*0Sstevel@tonic-gate=item perlintern.pod 1986*0Sstevel@tonic-gate 1987*0Sstevel@tonic-gateA list of internal functions in the Perl source code. 1988*0Sstevel@tonic-gate(List is currently empty.) 1989*0Sstevel@tonic-gate 1990*0Sstevel@tonic-gate=item perllexwarn.pod 1991*0Sstevel@tonic-gate 1992*0Sstevel@tonic-gateIntroduction and reference information about lexically scoped 1993*0Sstevel@tonic-gatewarning categories. 1994*0Sstevel@tonic-gate 1995*0Sstevel@tonic-gate=item perlnumber.pod 1996*0Sstevel@tonic-gate 1997*0Sstevel@tonic-gateDetailed information about numbers as they are represented in Perl. 1998*0Sstevel@tonic-gate 1999*0Sstevel@tonic-gate=item perlopentut.pod 2000*0Sstevel@tonic-gate 2001*0Sstevel@tonic-gateA tutorial on using open() effectively. 2002*0Sstevel@tonic-gate 2003*0Sstevel@tonic-gate=item perlreftut.pod 2004*0Sstevel@tonic-gate 2005*0Sstevel@tonic-gateA tutorial that introduces the essentials of references. 2006*0Sstevel@tonic-gate 2007*0Sstevel@tonic-gate=item perltootc.pod 2008*0Sstevel@tonic-gate 2009*0Sstevel@tonic-gateA tutorial on managing class data for object modules. 2010*0Sstevel@tonic-gate 2011*0Sstevel@tonic-gate=item perltodo.pod 2012*0Sstevel@tonic-gate 2013*0Sstevel@tonic-gateDiscussion of the most often wanted features that may someday be 2014*0Sstevel@tonic-gatesupported in Perl. 2015*0Sstevel@tonic-gate 2016*0Sstevel@tonic-gate=item perlunicode.pod 2017*0Sstevel@tonic-gate 2018*0Sstevel@tonic-gateAn introduction to Unicode support features in Perl. 2019*0Sstevel@tonic-gate 2020*0Sstevel@tonic-gate=back 2021*0Sstevel@tonic-gate 2022*0Sstevel@tonic-gate=head1 Performance enhancements 2023*0Sstevel@tonic-gate 2024*0Sstevel@tonic-gate=head2 Simple sort() using { $a <=> $b } and the like are optimized 2025*0Sstevel@tonic-gate 2026*0Sstevel@tonic-gateMany common sort() operations using a simple inlined block are now 2027*0Sstevel@tonic-gateoptimized for faster performance. 2028*0Sstevel@tonic-gate 2029*0Sstevel@tonic-gate=head2 Optimized assignments to lexical variables 2030*0Sstevel@tonic-gate 2031*0Sstevel@tonic-gateCertain operations in the RHS of assignment statements have been 2032*0Sstevel@tonic-gateoptimized to directly set the lexical variable on the LHS, 2033*0Sstevel@tonic-gateeliminating redundant copying overheads. 2034*0Sstevel@tonic-gate 2035*0Sstevel@tonic-gate=head2 Faster subroutine calls 2036*0Sstevel@tonic-gate 2037*0Sstevel@tonic-gateMinor changes in how subroutine calls are handled internally 2038*0Sstevel@tonic-gateprovide marginal improvements in performance. 2039*0Sstevel@tonic-gate 2040*0Sstevel@tonic-gate=head2 delete(), each(), values() and hash iteration are faster 2041*0Sstevel@tonic-gate 2042*0Sstevel@tonic-gateThe hash values returned by delete(), each(), values() and hashes in a 2043*0Sstevel@tonic-gatelist context are the actual values in the hash, instead of copies. 2044*0Sstevel@tonic-gateThis results in significantly better performance, because it eliminates 2045*0Sstevel@tonic-gateneedless copying in most situations. 2046*0Sstevel@tonic-gate 2047*0Sstevel@tonic-gate=head1 Installation and Configuration Improvements 2048*0Sstevel@tonic-gate 2049*0Sstevel@tonic-gate=head2 -Dusethreads means something different 2050*0Sstevel@tonic-gate 2051*0Sstevel@tonic-gateThe -Dusethreads flag now enables the experimental interpreter-based thread 2052*0Sstevel@tonic-gatesupport by default. To get the flavor of experimental threads that was in 2053*0Sstevel@tonic-gate5.005 instead, you need to run Configure with "-Dusethreads -Duse5005threads". 2054*0Sstevel@tonic-gate 2055*0Sstevel@tonic-gateAs of v5.6.0, interpreter-threads support is still lacking a way to 2056*0Sstevel@tonic-gatecreate new threads from Perl (i.e., C<use Thread;> will not work with 2057*0Sstevel@tonic-gateinterpreter threads). C<use Thread;> continues to be available when you 2058*0Sstevel@tonic-gatespecify the -Duse5005threads option to Configure, bugs and all. 2059*0Sstevel@tonic-gate 2060*0Sstevel@tonic-gate NOTE: Support for threads continues to be an experimental feature. 2061*0Sstevel@tonic-gate Interfaces and implementation are subject to sudden and drastic changes. 2062*0Sstevel@tonic-gate 2063*0Sstevel@tonic-gate=head2 New Configure flags 2064*0Sstevel@tonic-gate 2065*0Sstevel@tonic-gateThe following new flags may be enabled on the Configure command line 2066*0Sstevel@tonic-gateby running Configure with C<-Dflag>. 2067*0Sstevel@tonic-gate 2068*0Sstevel@tonic-gate usemultiplicity 2069*0Sstevel@tonic-gate usethreads useithreads (new interpreter threads: no Perl API yet) 2070*0Sstevel@tonic-gate usethreads use5005threads (threads as they were in 5.005) 2071*0Sstevel@tonic-gate 2072*0Sstevel@tonic-gate use64bitint (equal to now deprecated 'use64bits') 2073*0Sstevel@tonic-gate use64bitall 2074*0Sstevel@tonic-gate 2075*0Sstevel@tonic-gate uselongdouble 2076*0Sstevel@tonic-gate usemorebits 2077*0Sstevel@tonic-gate uselargefiles 2078*0Sstevel@tonic-gate usesocks (only SOCKS v5 supported) 2079*0Sstevel@tonic-gate 2080*0Sstevel@tonic-gate=head2 Threadedness and 64-bitness now more daring 2081*0Sstevel@tonic-gate 2082*0Sstevel@tonic-gateThe Configure options enabling the use of threads and the use of 2083*0Sstevel@tonic-gate64-bitness are now more daring in the sense that they no more have an 2084*0Sstevel@tonic-gateexplicit list of operating systems of known threads/64-bit 2085*0Sstevel@tonic-gatecapabilities. In other words: if your operating system has the 2086*0Sstevel@tonic-gatenecessary APIs and datatypes, you should be able just to go ahead and 2087*0Sstevel@tonic-gateuse them, for threads by Configure -Dusethreads, and for 64 bits 2088*0Sstevel@tonic-gateeither explicitly by Configure -Duse64bitint or implicitly if your 2089*0Sstevel@tonic-gatesystem has 64-bit wide datatypes. See also L<"64-bit support">. 2090*0Sstevel@tonic-gate 2091*0Sstevel@tonic-gate=head2 Long Doubles 2092*0Sstevel@tonic-gate 2093*0Sstevel@tonic-gateSome platforms have "long doubles", floating point numbers of even 2094*0Sstevel@tonic-gatelarger range than ordinary "doubles". To enable using long doubles for 2095*0Sstevel@tonic-gatePerl's scalars, use -Duselongdouble. 2096*0Sstevel@tonic-gate 2097*0Sstevel@tonic-gate=head2 -Dusemorebits 2098*0Sstevel@tonic-gate 2099*0Sstevel@tonic-gateYou can enable both -Duse64bitint and -Duselongdouble with -Dusemorebits. 2100*0Sstevel@tonic-gateSee also L<"64-bit support">. 2101*0Sstevel@tonic-gate 2102*0Sstevel@tonic-gate=head2 -Duselargefiles 2103*0Sstevel@tonic-gate 2104*0Sstevel@tonic-gateSome platforms support system APIs that are capable of handling large files 2105*0Sstevel@tonic-gate(typically, files larger than two gigabytes). Perl will try to use these 2106*0Sstevel@tonic-gateAPIs if you ask for -Duselargefiles. 2107*0Sstevel@tonic-gate 2108*0Sstevel@tonic-gateSee L<"Large file support"> for more information. 2109*0Sstevel@tonic-gate 2110*0Sstevel@tonic-gate=head2 installusrbinperl 2111*0Sstevel@tonic-gate 2112*0Sstevel@tonic-gateYou can use "Configure -Uinstallusrbinperl" which causes installperl 2113*0Sstevel@tonic-gateto skip installing perl also as /usr/bin/perl. This is useful if you 2114*0Sstevel@tonic-gateprefer not to modify /usr/bin for some reason or another but harmful 2115*0Sstevel@tonic-gatebecause many scripts assume to find Perl in /usr/bin/perl. 2116*0Sstevel@tonic-gate 2117*0Sstevel@tonic-gate=head2 SOCKS support 2118*0Sstevel@tonic-gate 2119*0Sstevel@tonic-gateYou can use "Configure -Dusesocks" which causes Perl to probe 2120*0Sstevel@tonic-gatefor the SOCKS proxy protocol library (v5, not v4). For more information 2121*0Sstevel@tonic-gateon SOCKS, see: 2122*0Sstevel@tonic-gate 2123*0Sstevel@tonic-gate http://www.socks.nec.com/ 2124*0Sstevel@tonic-gate 2125*0Sstevel@tonic-gate=head2 C<-A> flag 2126*0Sstevel@tonic-gate 2127*0Sstevel@tonic-gateYou can "post-edit" the Configure variables using the Configure C<-A> 2128*0Sstevel@tonic-gateswitch. The editing happens immediately after the platform specific 2129*0Sstevel@tonic-gatehints files have been processed but before the actual configuration 2130*0Sstevel@tonic-gateprocess starts. Run C<Configure -h> to find out the full C<-A> syntax. 2131*0Sstevel@tonic-gate 2132*0Sstevel@tonic-gate=head2 Enhanced Installation Directories 2133*0Sstevel@tonic-gate 2134*0Sstevel@tonic-gateThe installation structure has been enriched to improve the support 2135*0Sstevel@tonic-gatefor maintaining multiple versions of perl, to provide locations for 2136*0Sstevel@tonic-gatevendor-supplied modules, scripts, and manpages, and to ease maintenance 2137*0Sstevel@tonic-gateof locally-added modules, scripts, and manpages. See the section on 2138*0Sstevel@tonic-gateInstallation Directories in the INSTALL file for complete details. 2139*0Sstevel@tonic-gateFor most users building and installing from source, the defaults should 2140*0Sstevel@tonic-gatebe fine. 2141*0Sstevel@tonic-gate 2142*0Sstevel@tonic-gateIf you previously used C<Configure -Dsitelib> or C<-Dsitearch> to set 2143*0Sstevel@tonic-gatespecial values for library directories, you might wish to consider using 2144*0Sstevel@tonic-gatethe new C<-Dsiteprefix> setting instead. Also, if you wish to re-use a 2145*0Sstevel@tonic-gateconfig.sh file from an earlier version of perl, you should be sure to 2146*0Sstevel@tonic-gatecheck that Configure makes sensible choices for the new directories. 2147*0Sstevel@tonic-gateSee INSTALL for complete details. 2148*0Sstevel@tonic-gate 2149*0Sstevel@tonic-gate=head2 gcc automatically tried if 'cc' does not seem to be working 2150*0Sstevel@tonic-gate 2151*0Sstevel@tonic-gateIn many platforms the vendor-supplied 'cc' is too stripped-down to 2152*0Sstevel@tonic-gatebuild Perl (basically, the 'cc' doesn't do ANSI C). If this seems 2153*0Sstevel@tonic-gateto be the case and the 'cc' does not seem to be the GNU C compiler 2154*0Sstevel@tonic-gate'gcc', an automatic attempt is made to find and use 'gcc' instead. 2155*0Sstevel@tonic-gate 2156*0Sstevel@tonic-gate=head1 Platform specific changes 2157*0Sstevel@tonic-gate 2158*0Sstevel@tonic-gate=head2 Supported platforms 2159*0Sstevel@tonic-gate 2160*0Sstevel@tonic-gate=over 4 2161*0Sstevel@tonic-gate 2162*0Sstevel@tonic-gate=item * 2163*0Sstevel@tonic-gate 2164*0Sstevel@tonic-gateThe Mach CThreads (NEXTSTEP, OPENSTEP) are now supported by the Thread 2165*0Sstevel@tonic-gateextension. 2166*0Sstevel@tonic-gate 2167*0Sstevel@tonic-gate=item * 2168*0Sstevel@tonic-gate 2169*0Sstevel@tonic-gateGNU/Hurd is now supported. 2170*0Sstevel@tonic-gate 2171*0Sstevel@tonic-gate=item * 2172*0Sstevel@tonic-gate 2173*0Sstevel@tonic-gateRhapsody/Darwin is now supported. 2174*0Sstevel@tonic-gate 2175*0Sstevel@tonic-gate=item * 2176*0Sstevel@tonic-gate 2177*0Sstevel@tonic-gateEPOC is now supported (on Psion 5). 2178*0Sstevel@tonic-gate 2179*0Sstevel@tonic-gate=item * 2180*0Sstevel@tonic-gate 2181*0Sstevel@tonic-gateThe cygwin port (formerly cygwin32) has been greatly improved. 2182*0Sstevel@tonic-gate 2183*0Sstevel@tonic-gate=back 2184*0Sstevel@tonic-gate 2185*0Sstevel@tonic-gate=head2 DOS 2186*0Sstevel@tonic-gate 2187*0Sstevel@tonic-gate=over 4 2188*0Sstevel@tonic-gate 2189*0Sstevel@tonic-gate=item * 2190*0Sstevel@tonic-gate 2191*0Sstevel@tonic-gatePerl now works with djgpp 2.02 (and 2.03 alpha). 2192*0Sstevel@tonic-gate 2193*0Sstevel@tonic-gate=item * 2194*0Sstevel@tonic-gate 2195*0Sstevel@tonic-gateEnvironment variable names are not converted to uppercase any more. 2196*0Sstevel@tonic-gate 2197*0Sstevel@tonic-gate=item * 2198*0Sstevel@tonic-gate 2199*0Sstevel@tonic-gateIncorrect exit codes from backticks have been fixed. 2200*0Sstevel@tonic-gate 2201*0Sstevel@tonic-gate=item * 2202*0Sstevel@tonic-gate 2203*0Sstevel@tonic-gateThis port continues to use its own builtin globbing (not File::Glob). 2204*0Sstevel@tonic-gate 2205*0Sstevel@tonic-gate=back 2206*0Sstevel@tonic-gate 2207*0Sstevel@tonic-gate=head2 OS390 (OpenEdition MVS) 2208*0Sstevel@tonic-gate 2209*0Sstevel@tonic-gateSupport for this EBCDIC platform has not been renewed in this release. 2210*0Sstevel@tonic-gateThere are difficulties in reconciling Perl's standardization on UTF-8 2211*0Sstevel@tonic-gateas its internal representation for characters with the EBCDIC character 2212*0Sstevel@tonic-gateset, because the two are incompatible. 2213*0Sstevel@tonic-gate 2214*0Sstevel@tonic-gateIt is unclear whether future versions will renew support for this 2215*0Sstevel@tonic-gateplatform, but the possibility exists. 2216*0Sstevel@tonic-gate 2217*0Sstevel@tonic-gate=head2 VMS 2218*0Sstevel@tonic-gate 2219*0Sstevel@tonic-gateNumerous revisions and extensions to configuration, build, testing, and 2220*0Sstevel@tonic-gateinstallation process to accommodate core changes and VMS-specific options. 2221*0Sstevel@tonic-gate 2222*0Sstevel@tonic-gateExpand %ENV-handling code to allow runtime mapping to logical names, 2223*0Sstevel@tonic-gateCLI symbols, and CRTL environ array. 2224*0Sstevel@tonic-gate 2225*0Sstevel@tonic-gateExtension of subprocess invocation code to accept filespecs as command 2226*0Sstevel@tonic-gate"verbs". 2227*0Sstevel@tonic-gate 2228*0Sstevel@tonic-gateAdd to Perl command line processing the ability to use default file types and 2229*0Sstevel@tonic-gateto recognize Unix-style C<2E<gt>&1>. 2230*0Sstevel@tonic-gate 2231*0Sstevel@tonic-gateExpansion of File::Spec::VMS routines, and integration into ExtUtils::MM_VMS. 2232*0Sstevel@tonic-gate 2233*0Sstevel@tonic-gateExtension of ExtUtils::MM_VMS to handle complex extensions more flexibly. 2234*0Sstevel@tonic-gate 2235*0Sstevel@tonic-gateBarewords at start of Unix-syntax paths may be treated as text rather than 2236*0Sstevel@tonic-gateonly as logical names. 2237*0Sstevel@tonic-gate 2238*0Sstevel@tonic-gateOptional secure translation of several logical names used internally by Perl. 2239*0Sstevel@tonic-gate 2240*0Sstevel@tonic-gateMiscellaneous bugfixing and porting of new core code to VMS. 2241*0Sstevel@tonic-gate 2242*0Sstevel@tonic-gateThanks are gladly extended to the many people who have contributed VMS 2243*0Sstevel@tonic-gatepatches, testing, and ideas. 2244*0Sstevel@tonic-gate 2245*0Sstevel@tonic-gate=head2 Win32 2246*0Sstevel@tonic-gate 2247*0Sstevel@tonic-gatePerl can now emulate fork() internally, using multiple interpreters running 2248*0Sstevel@tonic-gatein different concurrent threads. This support must be enabled at build 2249*0Sstevel@tonic-gatetime. See L<perlfork> for detailed information. 2250*0Sstevel@tonic-gate 2251*0Sstevel@tonic-gateWhen given a pathname that consists only of a drivename, such as C<A:>, 2252*0Sstevel@tonic-gateopendir() and stat() now use the current working directory for the drive 2253*0Sstevel@tonic-gaterather than the drive root. 2254*0Sstevel@tonic-gate 2255*0Sstevel@tonic-gateThe builtin XSUB functions in the Win32:: namespace are documented. See 2256*0Sstevel@tonic-gateL<Win32>. 2257*0Sstevel@tonic-gate 2258*0Sstevel@tonic-gate$^X now contains the full path name of the running executable. 2259*0Sstevel@tonic-gate 2260*0Sstevel@tonic-gateA Win32::GetLongPathName() function is provided to complement 2261*0Sstevel@tonic-gateWin32::GetFullPathName() and Win32::GetShortPathName(). See L<Win32>. 2262*0Sstevel@tonic-gate 2263*0Sstevel@tonic-gatePOSIX::uname() is supported. 2264*0Sstevel@tonic-gate 2265*0Sstevel@tonic-gatesystem(1,...) now returns true process IDs rather than process 2266*0Sstevel@tonic-gatehandles. kill() accepts any real process id, rather than strictly 2267*0Sstevel@tonic-gatereturn values from system(1,...). 2268*0Sstevel@tonic-gate 2269*0Sstevel@tonic-gateFor better compatibility with Unix, C<kill(0, $pid)> can now be used to 2270*0Sstevel@tonic-gatetest whether a process exists. 2271*0Sstevel@tonic-gate 2272*0Sstevel@tonic-gateThe C<Shell> module is supported. 2273*0Sstevel@tonic-gate 2274*0Sstevel@tonic-gateBetter support for building Perl under command.com in Windows 95 2275*0Sstevel@tonic-gatehas been added. 2276*0Sstevel@tonic-gate 2277*0Sstevel@tonic-gateScripts are read in binary mode by default to allow ByteLoader (and 2278*0Sstevel@tonic-gatethe filter mechanism in general) to work properly. For compatibility, 2279*0Sstevel@tonic-gatethe DATA filehandle will be set to text mode if a carriage return is 2280*0Sstevel@tonic-gatedetected at the end of the line containing the __END__ or __DATA__ 2281*0Sstevel@tonic-gatetoken; if not, the DATA filehandle will be left open in binary mode. 2282*0Sstevel@tonic-gateEarlier versions always opened the DATA filehandle in text mode. 2283*0Sstevel@tonic-gate 2284*0Sstevel@tonic-gateThe glob() operator is implemented via the C<File::Glob> extension, 2285*0Sstevel@tonic-gatewhich supports glob syntax of the C shell. This increases the flexibility 2286*0Sstevel@tonic-gateof the glob() operator, but there may be compatibility issues for 2287*0Sstevel@tonic-gateprograms that relied on the older globbing syntax. If you want to 2288*0Sstevel@tonic-gatepreserve compatibility with the older syntax, you might want to run 2289*0Sstevel@tonic-gateperl with C<-MFile::DosGlob>. For details and compatibility information, 2290*0Sstevel@tonic-gatesee L<File::Glob>. 2291*0Sstevel@tonic-gate 2292*0Sstevel@tonic-gate=head1 Significant bug fixes 2293*0Sstevel@tonic-gate 2294*0Sstevel@tonic-gate=head2 <HANDLE> on empty files 2295*0Sstevel@tonic-gate 2296*0Sstevel@tonic-gateWith C<$/> set to C<undef>, "slurping" an empty file returns a string of 2297*0Sstevel@tonic-gatezero length (instead of C<undef>, as it used to) the first time the 2298*0Sstevel@tonic-gateHANDLE is read after C<$/> is set to C<undef>. Further reads yield 2299*0Sstevel@tonic-gateC<undef>. 2300*0Sstevel@tonic-gate 2301*0Sstevel@tonic-gateThis means that the following will append "foo" to an empty file (it used 2302*0Sstevel@tonic-gateto do nothing): 2303*0Sstevel@tonic-gate 2304*0Sstevel@tonic-gate perl -0777 -pi -e 's/^/foo/' empty_file 2305*0Sstevel@tonic-gate 2306*0Sstevel@tonic-gateThe behaviour of: 2307*0Sstevel@tonic-gate 2308*0Sstevel@tonic-gate perl -pi -e 's/^/foo/' empty_file 2309*0Sstevel@tonic-gate 2310*0Sstevel@tonic-gateis unchanged (it continues to leave the file empty). 2311*0Sstevel@tonic-gate 2312*0Sstevel@tonic-gate=head2 C<eval '...'> improvements 2313*0Sstevel@tonic-gate 2314*0Sstevel@tonic-gateLine numbers (as reflected by caller() and most diagnostics) within 2315*0Sstevel@tonic-gateC<eval '...'> were often incorrect where here documents were involved. 2316*0Sstevel@tonic-gateThis has been corrected. 2317*0Sstevel@tonic-gate 2318*0Sstevel@tonic-gateLexical lookups for variables appearing in C<eval '...'> within 2319*0Sstevel@tonic-gatefunctions that were themselves called within an C<eval '...'> were 2320*0Sstevel@tonic-gatesearching the wrong place for lexicals. The lexical search now 2321*0Sstevel@tonic-gatecorrectly ends at the subroutine's block boundary. 2322*0Sstevel@tonic-gate 2323*0Sstevel@tonic-gateThe use of C<return> within C<eval {...}> caused $@ not to be reset 2324*0Sstevel@tonic-gatecorrectly when no exception occurred within the eval. This has 2325*0Sstevel@tonic-gatebeen fixed. 2326*0Sstevel@tonic-gate 2327*0Sstevel@tonic-gateParsing of here documents used to be flawed when they appeared as 2328*0Sstevel@tonic-gatethe replacement expression in C<eval 's/.../.../e'>. This has 2329*0Sstevel@tonic-gatebeen fixed. 2330*0Sstevel@tonic-gate 2331*0Sstevel@tonic-gate=head2 All compilation errors are true errors 2332*0Sstevel@tonic-gate 2333*0Sstevel@tonic-gateSome "errors" encountered at compile time were by necessity 2334*0Sstevel@tonic-gategenerated as warnings followed by eventual termination of the 2335*0Sstevel@tonic-gateprogram. This enabled more such errors to be reported in a 2336*0Sstevel@tonic-gatesingle run, rather than causing a hard stop at the first error 2337*0Sstevel@tonic-gatethat was encountered. 2338*0Sstevel@tonic-gate 2339*0Sstevel@tonic-gateThe mechanism for reporting such errors has been reimplemented 2340*0Sstevel@tonic-gateto queue compile-time errors and report them at the end of the 2341*0Sstevel@tonic-gatecompilation as true errors rather than as warnings. This fixes 2342*0Sstevel@tonic-gatecases where error messages leaked through in the form of warnings 2343*0Sstevel@tonic-gatewhen code was compiled at run time using C<eval STRING>, and 2344*0Sstevel@tonic-gatealso allows such errors to be reliably trapped using C<eval "...">. 2345*0Sstevel@tonic-gate 2346*0Sstevel@tonic-gate=head2 Implicitly closed filehandles are safer 2347*0Sstevel@tonic-gate 2348*0Sstevel@tonic-gateSometimes implicitly closed filehandles (as when they are localized, 2349*0Sstevel@tonic-gateand Perl automatically closes them on exiting the scope) could 2350*0Sstevel@tonic-gateinadvertently set $? or $!. This has been corrected. 2351*0Sstevel@tonic-gate 2352*0Sstevel@tonic-gate 2353*0Sstevel@tonic-gate=head2 Behavior of list slices is more consistent 2354*0Sstevel@tonic-gate 2355*0Sstevel@tonic-gateWhen taking a slice of a literal list (as opposed to a slice of 2356*0Sstevel@tonic-gatean array or hash), Perl used to return an empty list if the 2357*0Sstevel@tonic-gateresult happened to be composed of all undef values. 2358*0Sstevel@tonic-gate 2359*0Sstevel@tonic-gateThe new behavior is to produce an empty list if (and only if) 2360*0Sstevel@tonic-gatethe original list was empty. Consider the following example: 2361*0Sstevel@tonic-gate 2362*0Sstevel@tonic-gate @a = (1,undef,undef,2)[2,1,2]; 2363*0Sstevel@tonic-gate 2364*0Sstevel@tonic-gateThe old behavior would have resulted in @a having no elements. 2365*0Sstevel@tonic-gateThe new behavior ensures it has three undefined elements. 2366*0Sstevel@tonic-gate 2367*0Sstevel@tonic-gateNote in particular that the behavior of slices of the following 2368*0Sstevel@tonic-gatecases remains unchanged: 2369*0Sstevel@tonic-gate 2370*0Sstevel@tonic-gate @a = ()[1,2]; 2371*0Sstevel@tonic-gate @a = (getpwent)[7,0]; 2372*0Sstevel@tonic-gate @a = (anything_returning_empty_list())[2,1,2]; 2373*0Sstevel@tonic-gate @a = @b[2,1,2]; 2374*0Sstevel@tonic-gate @a = @c{'a','b','c'}; 2375*0Sstevel@tonic-gate 2376*0Sstevel@tonic-gateSee L<perldata>. 2377*0Sstevel@tonic-gate 2378*0Sstevel@tonic-gate=head2 C<(\$)> prototype and C<$foo{a}> 2379*0Sstevel@tonic-gate 2380*0Sstevel@tonic-gateA scalar reference prototype now correctly allows a hash or 2381*0Sstevel@tonic-gatearray element in that slot. 2382*0Sstevel@tonic-gate 2383*0Sstevel@tonic-gate=head2 C<goto &sub> and AUTOLOAD 2384*0Sstevel@tonic-gate 2385*0Sstevel@tonic-gateThe C<goto &sub> construct works correctly when C<&sub> happens 2386*0Sstevel@tonic-gateto be autoloaded. 2387*0Sstevel@tonic-gate 2388*0Sstevel@tonic-gate=head2 C<-bareword> allowed under C<use integer> 2389*0Sstevel@tonic-gate 2390*0Sstevel@tonic-gateThe autoquoting of barewords preceded by C<-> did not work 2391*0Sstevel@tonic-gatein prior versions when the C<integer> pragma was enabled. 2392*0Sstevel@tonic-gateThis has been fixed. 2393*0Sstevel@tonic-gate 2394*0Sstevel@tonic-gate=head2 Failures in DESTROY() 2395*0Sstevel@tonic-gate 2396*0Sstevel@tonic-gateWhen code in a destructor threw an exception, it went unnoticed 2397*0Sstevel@tonic-gatein earlier versions of Perl, unless someone happened to be 2398*0Sstevel@tonic-gatelooking in $@ just after the point the destructor happened to 2399*0Sstevel@tonic-gaterun. Such failures are now visible as warnings when warnings are 2400*0Sstevel@tonic-gateenabled. 2401*0Sstevel@tonic-gate 2402*0Sstevel@tonic-gate=head2 Locale bugs fixed 2403*0Sstevel@tonic-gate 2404*0Sstevel@tonic-gateprintf() and sprintf() previously reset the numeric locale 2405*0Sstevel@tonic-gateback to the default "C" locale. This has been fixed. 2406*0Sstevel@tonic-gate 2407*0Sstevel@tonic-gateNumbers formatted according to the local numeric locale 2408*0Sstevel@tonic-gate(such as using a decimal comma instead of a decimal dot) caused 2409*0Sstevel@tonic-gate"isn't numeric" warnings, even while the operations accessing 2410*0Sstevel@tonic-gatethose numbers produced correct results. These warnings have been 2411*0Sstevel@tonic-gatediscontinued. 2412*0Sstevel@tonic-gate 2413*0Sstevel@tonic-gate=head2 Memory leaks 2414*0Sstevel@tonic-gate 2415*0Sstevel@tonic-gateThe C<eval 'return sub {...}'> construct could sometimes leak 2416*0Sstevel@tonic-gatememory. This has been fixed. 2417*0Sstevel@tonic-gate 2418*0Sstevel@tonic-gateOperations that aren't filehandle constructors used to leak memory 2419*0Sstevel@tonic-gatewhen used on invalid filehandles. This has been fixed. 2420*0Sstevel@tonic-gate 2421*0Sstevel@tonic-gateConstructs that modified C<@_> could fail to deallocate values 2422*0Sstevel@tonic-gatein C<@_> and thus leak memory. This has been corrected. 2423*0Sstevel@tonic-gate 2424*0Sstevel@tonic-gate=head2 Spurious subroutine stubs after failed subroutine calls 2425*0Sstevel@tonic-gate 2426*0Sstevel@tonic-gatePerl could sometimes create empty subroutine stubs when a 2427*0Sstevel@tonic-gatesubroutine was not found in the package. Such cases stopped 2428*0Sstevel@tonic-gatelater method lookups from progressing into base packages. 2429*0Sstevel@tonic-gateThis has been corrected. 2430*0Sstevel@tonic-gate 2431*0Sstevel@tonic-gate=head2 Taint failures under C<-U> 2432*0Sstevel@tonic-gate 2433*0Sstevel@tonic-gateWhen running in unsafe mode, taint violations could sometimes 2434*0Sstevel@tonic-gatecause silent failures. This has been fixed. 2435*0Sstevel@tonic-gate 2436*0Sstevel@tonic-gate=head2 END blocks and the C<-c> switch 2437*0Sstevel@tonic-gate 2438*0Sstevel@tonic-gatePrior versions used to run BEGIN B<and> END blocks when Perl was 2439*0Sstevel@tonic-gaterun in compile-only mode. Since this is typically not the expected 2440*0Sstevel@tonic-gatebehavior, END blocks are not executed anymore when the C<-c> switch 2441*0Sstevel@tonic-gateis used, or if compilation fails. 2442*0Sstevel@tonic-gate 2443*0Sstevel@tonic-gateSee L</"Support for CHECK blocks"> for how to run things when the compile 2444*0Sstevel@tonic-gatephase ends. 2445*0Sstevel@tonic-gate 2446*0Sstevel@tonic-gate=head2 Potential to leak DATA filehandles 2447*0Sstevel@tonic-gate 2448*0Sstevel@tonic-gateUsing the C<__DATA__> token creates an implicit filehandle to 2449*0Sstevel@tonic-gatethe file that contains the token. It is the program's 2450*0Sstevel@tonic-gateresponsibility to close it when it is done reading from it. 2451*0Sstevel@tonic-gate 2452*0Sstevel@tonic-gateThis caveat is now better explained in the documentation. 2453*0Sstevel@tonic-gateSee L<perldata>. 2454*0Sstevel@tonic-gate 2455*0Sstevel@tonic-gate=head1 New or Changed Diagnostics 2456*0Sstevel@tonic-gate 2457*0Sstevel@tonic-gate=over 4 2458*0Sstevel@tonic-gate 2459*0Sstevel@tonic-gate=item "%s" variable %s masks earlier declaration in same %s 2460*0Sstevel@tonic-gate 2461*0Sstevel@tonic-gate(W misc) A "my" or "our" variable has been redeclared in the current scope or statement, 2462*0Sstevel@tonic-gateeffectively eliminating all access to the previous instance. This is almost 2463*0Sstevel@tonic-gatealways a typographical error. Note that the earlier variable will still exist 2464*0Sstevel@tonic-gateuntil the end of the scope or until all closure referents to it are 2465*0Sstevel@tonic-gatedestroyed. 2466*0Sstevel@tonic-gate 2467*0Sstevel@tonic-gate=item "my sub" not yet implemented 2468*0Sstevel@tonic-gate 2469*0Sstevel@tonic-gate(F) Lexically scoped subroutines are not yet implemented. Don't try that 2470*0Sstevel@tonic-gateyet. 2471*0Sstevel@tonic-gate 2472*0Sstevel@tonic-gate=item "our" variable %s redeclared 2473*0Sstevel@tonic-gate 2474*0Sstevel@tonic-gate(W misc) You seem to have already declared the same global once before in the 2475*0Sstevel@tonic-gatecurrent lexical scope. 2476*0Sstevel@tonic-gate 2477*0Sstevel@tonic-gate=item '!' allowed only after types %s 2478*0Sstevel@tonic-gate 2479*0Sstevel@tonic-gate(F) The '!' is allowed in pack() and unpack() only after certain types. 2480*0Sstevel@tonic-gateSee L<perlfunc/pack>. 2481*0Sstevel@tonic-gate 2482*0Sstevel@tonic-gate=item / cannot take a count 2483*0Sstevel@tonic-gate 2484*0Sstevel@tonic-gate(F) You had an unpack template indicating a counted-length string, 2485*0Sstevel@tonic-gatebut you have also specified an explicit size for the string. 2486*0Sstevel@tonic-gateSee L<perlfunc/pack>. 2487*0Sstevel@tonic-gate 2488*0Sstevel@tonic-gate=item / must be followed by a, A or Z 2489*0Sstevel@tonic-gate 2490*0Sstevel@tonic-gate(F) You had an unpack template indicating a counted-length string, 2491*0Sstevel@tonic-gatewhich must be followed by one of the letters a, A or Z 2492*0Sstevel@tonic-gateto indicate what sort of string is to be unpacked. 2493*0Sstevel@tonic-gateSee L<perlfunc/pack>. 2494*0Sstevel@tonic-gate 2495*0Sstevel@tonic-gate=item / must be followed by a*, A* or Z* 2496*0Sstevel@tonic-gate 2497*0Sstevel@tonic-gate(F) You had a pack template indicating a counted-length string, 2498*0Sstevel@tonic-gateCurrently the only things that can have their length counted are a*, A* or Z*. 2499*0Sstevel@tonic-gateSee L<perlfunc/pack>. 2500*0Sstevel@tonic-gate 2501*0Sstevel@tonic-gate=item / must follow a numeric type 2502*0Sstevel@tonic-gate 2503*0Sstevel@tonic-gate(F) You had an unpack template that contained a '#', 2504*0Sstevel@tonic-gatebut this did not follow some numeric unpack specification. 2505*0Sstevel@tonic-gateSee L<perlfunc/pack>. 2506*0Sstevel@tonic-gate 2507*0Sstevel@tonic-gate=item /%s/: Unrecognized escape \\%c passed through 2508*0Sstevel@tonic-gate 2509*0Sstevel@tonic-gate(W regexp) You used a backslash-character combination which is not recognized 2510*0Sstevel@tonic-gateby Perl. This combination appears in an interpolated variable or a 2511*0Sstevel@tonic-gateC<'>-delimited regular expression. The character was understood literally. 2512*0Sstevel@tonic-gate 2513*0Sstevel@tonic-gate=item /%s/: Unrecognized escape \\%c in character class passed through 2514*0Sstevel@tonic-gate 2515*0Sstevel@tonic-gate(W regexp) You used a backslash-character combination which is not recognized 2516*0Sstevel@tonic-gateby Perl inside character classes. The character was understood literally. 2517*0Sstevel@tonic-gate 2518*0Sstevel@tonic-gate=item /%s/ should probably be written as "%s" 2519*0Sstevel@tonic-gate 2520*0Sstevel@tonic-gate(W syntax) You have used a pattern where Perl expected to find a string, 2521*0Sstevel@tonic-gateas in the first argument to C<join>. Perl will treat the true 2522*0Sstevel@tonic-gateor false result of matching the pattern against $_ as the string, 2523*0Sstevel@tonic-gatewhich is probably not what you had in mind. 2524*0Sstevel@tonic-gate 2525*0Sstevel@tonic-gate=item %s() called too early to check prototype 2526*0Sstevel@tonic-gate 2527*0Sstevel@tonic-gate(W prototype) You've called a function that has a prototype before the parser saw a 2528*0Sstevel@tonic-gatedefinition or declaration for it, and Perl could not check that the call 2529*0Sstevel@tonic-gateconforms to the prototype. You need to either add an early prototype 2530*0Sstevel@tonic-gatedeclaration for the subroutine in question, or move the subroutine 2531*0Sstevel@tonic-gatedefinition ahead of the call to get proper prototype checking. Alternatively, 2532*0Sstevel@tonic-gateif you are certain that you're calling the function correctly, you may put 2533*0Sstevel@tonic-gatean ampersand before the name to avoid the warning. See L<perlsub>. 2534*0Sstevel@tonic-gate 2535*0Sstevel@tonic-gate=item %s argument is not a HASH or ARRAY element 2536*0Sstevel@tonic-gate 2537*0Sstevel@tonic-gate(F) The argument to exists() must be a hash or array element, such as: 2538*0Sstevel@tonic-gate 2539*0Sstevel@tonic-gate $foo{$bar} 2540*0Sstevel@tonic-gate $ref->{"susie"}[12] 2541*0Sstevel@tonic-gate 2542*0Sstevel@tonic-gate=item %s argument is not a HASH or ARRAY element or slice 2543*0Sstevel@tonic-gate 2544*0Sstevel@tonic-gate(F) The argument to delete() must be either a hash or array element, such as: 2545*0Sstevel@tonic-gate 2546*0Sstevel@tonic-gate $foo{$bar} 2547*0Sstevel@tonic-gate $ref->{"susie"}[12] 2548*0Sstevel@tonic-gate 2549*0Sstevel@tonic-gateor a hash or array slice, such as: 2550*0Sstevel@tonic-gate 2551*0Sstevel@tonic-gate @foo[$bar, $baz, $xyzzy] 2552*0Sstevel@tonic-gate @{$ref->[12]}{"susie", "queue"} 2553*0Sstevel@tonic-gate 2554*0Sstevel@tonic-gate=item %s argument is not a subroutine name 2555*0Sstevel@tonic-gate 2556*0Sstevel@tonic-gate(F) The argument to exists() for C<exists &sub> must be a subroutine 2557*0Sstevel@tonic-gatename, and not a subroutine call. C<exists &sub()> will generate this error. 2558*0Sstevel@tonic-gate 2559*0Sstevel@tonic-gate=item %s package attribute may clash with future reserved word: %s 2560*0Sstevel@tonic-gate 2561*0Sstevel@tonic-gate(W reserved) A lowercase attribute name was used that had a package-specific handler. 2562*0Sstevel@tonic-gateThat name might have a meaning to Perl itself some day, even though it 2563*0Sstevel@tonic-gatedoesn't yet. Perhaps you should use a mixed-case attribute name, instead. 2564*0Sstevel@tonic-gateSee L<attributes>. 2565*0Sstevel@tonic-gate 2566*0Sstevel@tonic-gate=item (in cleanup) %s 2567*0Sstevel@tonic-gate 2568*0Sstevel@tonic-gate(W misc) This prefix usually indicates that a DESTROY() method raised 2569*0Sstevel@tonic-gatethe indicated exception. Since destructors are usually called by 2570*0Sstevel@tonic-gatethe system at arbitrary points during execution, and often a vast 2571*0Sstevel@tonic-gatenumber of times, the warning is issued only once for any number 2572*0Sstevel@tonic-gateof failures that would otherwise result in the same message being 2573*0Sstevel@tonic-gaterepeated. 2574*0Sstevel@tonic-gate 2575*0Sstevel@tonic-gateFailure of user callbacks dispatched using the C<G_KEEPERR> flag 2576*0Sstevel@tonic-gatecould also result in this warning. See L<perlcall/G_KEEPERR>. 2577*0Sstevel@tonic-gate 2578*0Sstevel@tonic-gate=item <> should be quotes 2579*0Sstevel@tonic-gate 2580*0Sstevel@tonic-gate(F) You wrote C<< require <file> >> when you should have written 2581*0Sstevel@tonic-gateC<require 'file'>. 2582*0Sstevel@tonic-gate 2583*0Sstevel@tonic-gate=item Attempt to join self 2584*0Sstevel@tonic-gate 2585*0Sstevel@tonic-gate(F) You tried to join a thread from within itself, which is an 2586*0Sstevel@tonic-gateimpossible task. You may be joining the wrong thread, or you may 2587*0Sstevel@tonic-gateneed to move the join() to some other thread. 2588*0Sstevel@tonic-gate 2589*0Sstevel@tonic-gate=item Bad evalled substitution pattern 2590*0Sstevel@tonic-gate 2591*0Sstevel@tonic-gate(F) You've used the /e switch to evaluate the replacement for a 2592*0Sstevel@tonic-gatesubstitution, but perl found a syntax error in the code to evaluate, 2593*0Sstevel@tonic-gatemost likely an unexpected right brace '}'. 2594*0Sstevel@tonic-gate 2595*0Sstevel@tonic-gate=item Bad realloc() ignored 2596*0Sstevel@tonic-gate 2597*0Sstevel@tonic-gate(S) An internal routine called realloc() on something that had never been 2598*0Sstevel@tonic-gatemalloc()ed in the first place. Mandatory, but can be disabled by 2599*0Sstevel@tonic-gatesetting environment variable C<PERL_BADFREE> to 1. 2600*0Sstevel@tonic-gate 2601*0Sstevel@tonic-gate=item Bareword found in conditional 2602*0Sstevel@tonic-gate 2603*0Sstevel@tonic-gate(W bareword) The compiler found a bareword where it expected a conditional, 2604*0Sstevel@tonic-gatewhich often indicates that an || or && was parsed as part of the 2605*0Sstevel@tonic-gatelast argument of the previous construct, for example: 2606*0Sstevel@tonic-gate 2607*0Sstevel@tonic-gate open FOO || die; 2608*0Sstevel@tonic-gate 2609*0Sstevel@tonic-gateIt may also indicate a misspelled constant that has been interpreted 2610*0Sstevel@tonic-gateas a bareword: 2611*0Sstevel@tonic-gate 2612*0Sstevel@tonic-gate use constant TYPO => 1; 2613*0Sstevel@tonic-gate if (TYOP) { print "foo" } 2614*0Sstevel@tonic-gate 2615*0Sstevel@tonic-gateThe C<strict> pragma is useful in avoiding such errors. 2616*0Sstevel@tonic-gate 2617*0Sstevel@tonic-gate=item Binary number > 0b11111111111111111111111111111111 non-portable 2618*0Sstevel@tonic-gate 2619*0Sstevel@tonic-gate(W portable) The binary number you specified is larger than 2**32-1 2620*0Sstevel@tonic-gate(4294967295) and therefore non-portable between systems. See 2621*0Sstevel@tonic-gateL<perlport> for more on portability concerns. 2622*0Sstevel@tonic-gate 2623*0Sstevel@tonic-gate=item Bit vector size > 32 non-portable 2624*0Sstevel@tonic-gate 2625*0Sstevel@tonic-gate(W portable) Using bit vector sizes larger than 32 is non-portable. 2626*0Sstevel@tonic-gate 2627*0Sstevel@tonic-gate=item Buffer overflow in prime_env_iter: %s 2628*0Sstevel@tonic-gate 2629*0Sstevel@tonic-gate(W internal) A warning peculiar to VMS. While Perl was preparing to iterate over 2630*0Sstevel@tonic-gate%ENV, it encountered a logical name or symbol definition which was too long, 2631*0Sstevel@tonic-gateso it was truncated to the string shown. 2632*0Sstevel@tonic-gate 2633*0Sstevel@tonic-gate=item Can't check filesystem of script "%s" 2634*0Sstevel@tonic-gate 2635*0Sstevel@tonic-gate(P) For some reason you can't check the filesystem of the script for nosuid. 2636*0Sstevel@tonic-gate 2637*0Sstevel@tonic-gate=item Can't declare class for non-scalar %s in "%s" 2638*0Sstevel@tonic-gate 2639*0Sstevel@tonic-gate(S) Currently, only scalar variables can declared with a specific class 2640*0Sstevel@tonic-gatequalifier in a "my" or "our" declaration. The semantics may be extended 2641*0Sstevel@tonic-gatefor other types of variables in future. 2642*0Sstevel@tonic-gate 2643*0Sstevel@tonic-gate=item Can't declare %s in "%s" 2644*0Sstevel@tonic-gate 2645*0Sstevel@tonic-gate(F) Only scalar, array, and hash variables may be declared as "my" or 2646*0Sstevel@tonic-gate"our" variables. They must have ordinary identifiers as names. 2647*0Sstevel@tonic-gate 2648*0Sstevel@tonic-gate=item Can't ignore signal CHLD, forcing to default 2649*0Sstevel@tonic-gate 2650*0Sstevel@tonic-gate(W signal) Perl has detected that it is being run with the SIGCHLD signal 2651*0Sstevel@tonic-gate(sometimes known as SIGCLD) disabled. Since disabling this signal 2652*0Sstevel@tonic-gatewill interfere with proper determination of exit status of child 2653*0Sstevel@tonic-gateprocesses, Perl has reset the signal to its default value. 2654*0Sstevel@tonic-gateThis situation typically indicates that the parent program under 2655*0Sstevel@tonic-gatewhich Perl may be running (e.g., cron) is being very careless. 2656*0Sstevel@tonic-gate 2657*0Sstevel@tonic-gate=item Can't modify non-lvalue subroutine call 2658*0Sstevel@tonic-gate 2659*0Sstevel@tonic-gate(F) Subroutines meant to be used in lvalue context should be declared as 2660*0Sstevel@tonic-gatesuch, see L<perlsub/"Lvalue subroutines">. 2661*0Sstevel@tonic-gate 2662*0Sstevel@tonic-gate=item Can't read CRTL environ 2663*0Sstevel@tonic-gate 2664*0Sstevel@tonic-gate(S) A warning peculiar to VMS. Perl tried to read an element of %ENV 2665*0Sstevel@tonic-gatefrom the CRTL's internal environment array and discovered the array was 2666*0Sstevel@tonic-gatemissing. You need to figure out where your CRTL misplaced its environ 2667*0Sstevel@tonic-gateor define F<PERL_ENV_TABLES> (see L<perlvms>) so that environ is not searched. 2668*0Sstevel@tonic-gate 2669*0Sstevel@tonic-gate=item Can't remove %s: %s, skipping file 2670*0Sstevel@tonic-gate 2671*0Sstevel@tonic-gate(S) You requested an inplace edit without creating a backup file. Perl 2672*0Sstevel@tonic-gatewas unable to remove the original file to replace it with the modified 2673*0Sstevel@tonic-gatefile. The file was left unmodified. 2674*0Sstevel@tonic-gate 2675*0Sstevel@tonic-gate=item Can't return %s from lvalue subroutine 2676*0Sstevel@tonic-gate 2677*0Sstevel@tonic-gate(F) Perl detected an attempt to return illegal lvalues (such 2678*0Sstevel@tonic-gateas temporary or readonly values) from a subroutine used as an lvalue. 2679*0Sstevel@tonic-gateThis is not allowed. 2680*0Sstevel@tonic-gate 2681*0Sstevel@tonic-gate=item Can't weaken a nonreference 2682*0Sstevel@tonic-gate 2683*0Sstevel@tonic-gate(F) You attempted to weaken something that was not a reference. Only 2684*0Sstevel@tonic-gatereferences can be weakened. 2685*0Sstevel@tonic-gate 2686*0Sstevel@tonic-gate=item Character class [:%s:] unknown 2687*0Sstevel@tonic-gate 2688*0Sstevel@tonic-gate(F) The class in the character class [: :] syntax is unknown. 2689*0Sstevel@tonic-gateSee L<perlre>. 2690*0Sstevel@tonic-gate 2691*0Sstevel@tonic-gate=item Character class syntax [%s] belongs inside character classes 2692*0Sstevel@tonic-gate 2693*0Sstevel@tonic-gate(W unsafe) The character class constructs [: :], [= =], and [. .] go 2694*0Sstevel@tonic-gateI<inside> character classes, the [] are part of the construct, 2695*0Sstevel@tonic-gatefor example: /[012[:alpha:]345]/. Note that [= =] and [. .] 2696*0Sstevel@tonic-gateare not currently implemented; they are simply placeholders for 2697*0Sstevel@tonic-gatefuture extensions. 2698*0Sstevel@tonic-gate 2699*0Sstevel@tonic-gate=item Constant is not %s reference 2700*0Sstevel@tonic-gate 2701*0Sstevel@tonic-gate(F) A constant value (perhaps declared using the C<use constant> pragma) 2702*0Sstevel@tonic-gateis being dereferenced, but it amounts to the wrong type of reference. The 2703*0Sstevel@tonic-gatemessage indicates the type of reference that was expected. This usually 2704*0Sstevel@tonic-gateindicates a syntax error in dereferencing the constant value. 2705*0Sstevel@tonic-gateSee L<perlsub/"Constant Functions"> and L<constant>. 2706*0Sstevel@tonic-gate 2707*0Sstevel@tonic-gate=item constant(%s): %s 2708*0Sstevel@tonic-gate 2709*0Sstevel@tonic-gate(F) The parser found inconsistencies either while attempting to define an 2710*0Sstevel@tonic-gateoverloaded constant, or when trying to find the character name specified 2711*0Sstevel@tonic-gatein the C<\N{...}> escape. Perhaps you forgot to load the corresponding 2712*0Sstevel@tonic-gateC<overload> or C<charnames> pragma? See L<charnames> and L<overload>. 2713*0Sstevel@tonic-gate 2714*0Sstevel@tonic-gate=item CORE::%s is not a keyword 2715*0Sstevel@tonic-gate 2716*0Sstevel@tonic-gate(F) The CORE:: namespace is reserved for Perl keywords. 2717*0Sstevel@tonic-gate 2718*0Sstevel@tonic-gate=item defined(@array) is deprecated 2719*0Sstevel@tonic-gate 2720*0Sstevel@tonic-gate(D) defined() is not usually useful on arrays because it checks for an 2721*0Sstevel@tonic-gateundefined I<scalar> value. If you want to see if the array is empty, 2722*0Sstevel@tonic-gatejust use C<if (@array) { # not empty }> for example. 2723*0Sstevel@tonic-gate 2724*0Sstevel@tonic-gate=item defined(%hash) is deprecated 2725*0Sstevel@tonic-gate 2726*0Sstevel@tonic-gate(D) defined() is not usually useful on hashes because it checks for an 2727*0Sstevel@tonic-gateundefined I<scalar> value. If you want to see if the hash is empty, 2728*0Sstevel@tonic-gatejust use C<if (%hash) { # not empty }> for example. 2729*0Sstevel@tonic-gate 2730*0Sstevel@tonic-gate=item Did not produce a valid header 2731*0Sstevel@tonic-gate 2732*0Sstevel@tonic-gateSee Server error. 2733*0Sstevel@tonic-gate 2734*0Sstevel@tonic-gate=item (Did you mean "local" instead of "our"?) 2735*0Sstevel@tonic-gate 2736*0Sstevel@tonic-gate(W misc) Remember that "our" does not localize the declared global variable. 2737*0Sstevel@tonic-gateYou have declared it again in the same lexical scope, which seems superfluous. 2738*0Sstevel@tonic-gate 2739*0Sstevel@tonic-gate=item Document contains no data 2740*0Sstevel@tonic-gate 2741*0Sstevel@tonic-gateSee Server error. 2742*0Sstevel@tonic-gate 2743*0Sstevel@tonic-gate=item entering effective %s failed 2744*0Sstevel@tonic-gate 2745*0Sstevel@tonic-gate(F) While under the C<use filetest> pragma, switching the real and 2746*0Sstevel@tonic-gateeffective uids or gids failed. 2747*0Sstevel@tonic-gate 2748*0Sstevel@tonic-gate=item false [] range "%s" in regexp 2749*0Sstevel@tonic-gate 2750*0Sstevel@tonic-gate(W regexp) A character class range must start and end at a literal character, not 2751*0Sstevel@tonic-gateanother character class like C<\d> or C<[:alpha:]>. The "-" in your false 2752*0Sstevel@tonic-gaterange is interpreted as a literal "-". Consider quoting the "-", "\-". 2753*0Sstevel@tonic-gateSee L<perlre>. 2754*0Sstevel@tonic-gate 2755*0Sstevel@tonic-gate=item Filehandle %s opened only for output 2756*0Sstevel@tonic-gate 2757*0Sstevel@tonic-gate(W io) You tried to read from a filehandle opened only for writing. If you 2758*0Sstevel@tonic-gateintended it to be a read/write filehandle, you needed to open it with 2759*0Sstevel@tonic-gate"+<" or "+>" or "+>>" instead of with "<" or nothing. If 2760*0Sstevel@tonic-gateyou intended only to read from the file, use "<". See 2761*0Sstevel@tonic-gateL<perlfunc/open>. 2762*0Sstevel@tonic-gate 2763*0Sstevel@tonic-gate=item flock() on closed filehandle %s 2764*0Sstevel@tonic-gate 2765*0Sstevel@tonic-gate(W closed) The filehandle you're attempting to flock() got itself closed some 2766*0Sstevel@tonic-gatetime before now. Check your logic flow. flock() operates on filehandles. 2767*0Sstevel@tonic-gateAre you attempting to call flock() on a dirhandle by the same name? 2768*0Sstevel@tonic-gate 2769*0Sstevel@tonic-gate=item Global symbol "%s" requires explicit package name 2770*0Sstevel@tonic-gate 2771*0Sstevel@tonic-gate(F) You've said "use strict vars", which indicates that all variables 2772*0Sstevel@tonic-gatemust either be lexically scoped (using "my"), declared beforehand using 2773*0Sstevel@tonic-gate"our", or explicitly qualified to say which package the global variable 2774*0Sstevel@tonic-gateis in (using "::"). 2775*0Sstevel@tonic-gate 2776*0Sstevel@tonic-gate=item Hexadecimal number > 0xffffffff non-portable 2777*0Sstevel@tonic-gate 2778*0Sstevel@tonic-gate(W portable) The hexadecimal number you specified is larger than 2**32-1 2779*0Sstevel@tonic-gate(4294967295) and therefore non-portable between systems. See 2780*0Sstevel@tonic-gateL<perlport> for more on portability concerns. 2781*0Sstevel@tonic-gate 2782*0Sstevel@tonic-gate=item Ill-formed CRTL environ value "%s" 2783*0Sstevel@tonic-gate 2784*0Sstevel@tonic-gate(W internal) A warning peculiar to VMS. Perl tried to read the CRTL's internal 2785*0Sstevel@tonic-gateenviron array, and encountered an element without the C<=> delimiter 2786*0Sstevel@tonic-gateused to separate keys from values. The element is ignored. 2787*0Sstevel@tonic-gate 2788*0Sstevel@tonic-gate=item Ill-formed message in prime_env_iter: |%s| 2789*0Sstevel@tonic-gate 2790*0Sstevel@tonic-gate(W internal) A warning peculiar to VMS. Perl tried to read a logical name 2791*0Sstevel@tonic-gateor CLI symbol definition when preparing to iterate over %ENV, and 2792*0Sstevel@tonic-gatedidn't see the expected delimiter between key and value, so the 2793*0Sstevel@tonic-gateline was ignored. 2794*0Sstevel@tonic-gate 2795*0Sstevel@tonic-gate=item Illegal binary digit %s 2796*0Sstevel@tonic-gate 2797*0Sstevel@tonic-gate(F) You used a digit other than 0 or 1 in a binary number. 2798*0Sstevel@tonic-gate 2799*0Sstevel@tonic-gate=item Illegal binary digit %s ignored 2800*0Sstevel@tonic-gate 2801*0Sstevel@tonic-gate(W digit) You may have tried to use a digit other than 0 or 1 in a binary number. 2802*0Sstevel@tonic-gateInterpretation of the binary number stopped before the offending digit. 2803*0Sstevel@tonic-gate 2804*0Sstevel@tonic-gate=item Illegal number of bits in vec 2805*0Sstevel@tonic-gate 2806*0Sstevel@tonic-gate(F) The number of bits in vec() (the third argument) must be a power of 2807*0Sstevel@tonic-gatetwo from 1 to 32 (or 64, if your platform supports that). 2808*0Sstevel@tonic-gate 2809*0Sstevel@tonic-gate=item Integer overflow in %s number 2810*0Sstevel@tonic-gate 2811*0Sstevel@tonic-gate(W overflow) The hexadecimal, octal or binary number you have specified either 2812*0Sstevel@tonic-gateas a literal or as an argument to hex() or oct() is too big for your 2813*0Sstevel@tonic-gatearchitecture, and has been converted to a floating point number. On a 2814*0Sstevel@tonic-gate32-bit architecture the largest hexadecimal, octal or binary number 2815*0Sstevel@tonic-gaterepresentable without overflow is 0xFFFFFFFF, 037777777777, or 2816*0Sstevel@tonic-gate0b11111111111111111111111111111111 respectively. Note that Perl 2817*0Sstevel@tonic-gatetransparently promotes all numbers to a floating point representation 2818*0Sstevel@tonic-gateinternally--subject to loss of precision errors in subsequent 2819*0Sstevel@tonic-gateoperations. 2820*0Sstevel@tonic-gate 2821*0Sstevel@tonic-gate=item Invalid %s attribute: %s 2822*0Sstevel@tonic-gate 2823*0Sstevel@tonic-gateThe indicated attribute for a subroutine or variable was not recognized 2824*0Sstevel@tonic-gateby Perl or by a user-supplied handler. See L<attributes>. 2825*0Sstevel@tonic-gate 2826*0Sstevel@tonic-gate=item Invalid %s attributes: %s 2827*0Sstevel@tonic-gate 2828*0Sstevel@tonic-gateThe indicated attributes for a subroutine or variable were not recognized 2829*0Sstevel@tonic-gateby Perl or by a user-supplied handler. See L<attributes>. 2830*0Sstevel@tonic-gate 2831*0Sstevel@tonic-gate=item invalid [] range "%s" in regexp 2832*0Sstevel@tonic-gate 2833*0Sstevel@tonic-gateThe offending range is now explicitly displayed. 2834*0Sstevel@tonic-gate 2835*0Sstevel@tonic-gate=item Invalid separator character %s in attribute list 2836*0Sstevel@tonic-gate 2837*0Sstevel@tonic-gate(F) Something other than a colon or whitespace was seen between the 2838*0Sstevel@tonic-gateelements of an attribute list. If the previous attribute 2839*0Sstevel@tonic-gatehad a parenthesised parameter list, perhaps that list was terminated 2840*0Sstevel@tonic-gatetoo soon. See L<attributes>. 2841*0Sstevel@tonic-gate 2842*0Sstevel@tonic-gate=item Invalid separator character %s in subroutine attribute list 2843*0Sstevel@tonic-gate 2844*0Sstevel@tonic-gate(F) Something other than a colon or whitespace was seen between the 2845*0Sstevel@tonic-gateelements of a subroutine attribute list. If the previous attribute 2846*0Sstevel@tonic-gatehad a parenthesised parameter list, perhaps that list was terminated 2847*0Sstevel@tonic-gatetoo soon. 2848*0Sstevel@tonic-gate 2849*0Sstevel@tonic-gate=item leaving effective %s failed 2850*0Sstevel@tonic-gate 2851*0Sstevel@tonic-gate(F) While under the C<use filetest> pragma, switching the real and 2852*0Sstevel@tonic-gateeffective uids or gids failed. 2853*0Sstevel@tonic-gate 2854*0Sstevel@tonic-gate=item Lvalue subs returning %s not implemented yet 2855*0Sstevel@tonic-gate 2856*0Sstevel@tonic-gate(F) Due to limitations in the current implementation, array and hash 2857*0Sstevel@tonic-gatevalues cannot be returned in subroutines used in lvalue context. 2858*0Sstevel@tonic-gateSee L<perlsub/"Lvalue subroutines">. 2859*0Sstevel@tonic-gate 2860*0Sstevel@tonic-gate=item Method %s not permitted 2861*0Sstevel@tonic-gate 2862*0Sstevel@tonic-gateSee Server error. 2863*0Sstevel@tonic-gate 2864*0Sstevel@tonic-gate=item Missing %sbrace%s on \N{} 2865*0Sstevel@tonic-gate 2866*0Sstevel@tonic-gate(F) Wrong syntax of character name literal C<\N{charname}> within 2867*0Sstevel@tonic-gatedouble-quotish context. 2868*0Sstevel@tonic-gate 2869*0Sstevel@tonic-gate=item Missing command in piped open 2870*0Sstevel@tonic-gate 2871*0Sstevel@tonic-gate(W pipe) You used the C<open(FH, "| command")> or C<open(FH, "command |")> 2872*0Sstevel@tonic-gateconstruction, but the command was missing or blank. 2873*0Sstevel@tonic-gate 2874*0Sstevel@tonic-gate=item Missing name in "my sub" 2875*0Sstevel@tonic-gate 2876*0Sstevel@tonic-gate(F) The reserved syntax for lexically scoped subroutines requires that they 2877*0Sstevel@tonic-gatehave a name with which they can be found. 2878*0Sstevel@tonic-gate 2879*0Sstevel@tonic-gate=item No %s specified for -%c 2880*0Sstevel@tonic-gate 2881*0Sstevel@tonic-gate(F) The indicated command line switch needs a mandatory argument, but 2882*0Sstevel@tonic-gateyou haven't specified one. 2883*0Sstevel@tonic-gate 2884*0Sstevel@tonic-gate=item No package name allowed for variable %s in "our" 2885*0Sstevel@tonic-gate 2886*0Sstevel@tonic-gate(F) Fully qualified variable names are not allowed in "our" declarations, 2887*0Sstevel@tonic-gatebecause that doesn't make much sense under existing semantics. Such 2888*0Sstevel@tonic-gatesyntax is reserved for future extensions. 2889*0Sstevel@tonic-gate 2890*0Sstevel@tonic-gate=item No space allowed after -%c 2891*0Sstevel@tonic-gate 2892*0Sstevel@tonic-gate(F) The argument to the indicated command line switch must follow immediately 2893*0Sstevel@tonic-gateafter the switch, without intervening spaces. 2894*0Sstevel@tonic-gate 2895*0Sstevel@tonic-gate=item no UTC offset information; assuming local time is UTC 2896*0Sstevel@tonic-gate 2897*0Sstevel@tonic-gate(S) A warning peculiar to VMS. Perl was unable to find the local 2898*0Sstevel@tonic-gatetimezone offset, so it's assuming that local system time is equivalent 2899*0Sstevel@tonic-gateto UTC. If it's not, define the logical name F<SYS$TIMEZONE_DIFFERENTIAL> 2900*0Sstevel@tonic-gateto translate to the number of seconds which need to be added to UTC to 2901*0Sstevel@tonic-gateget local time. 2902*0Sstevel@tonic-gate 2903*0Sstevel@tonic-gate=item Octal number > 037777777777 non-portable 2904*0Sstevel@tonic-gate 2905*0Sstevel@tonic-gate(W portable) The octal number you specified is larger than 2**32-1 (4294967295) 2906*0Sstevel@tonic-gateand therefore non-portable between systems. See L<perlport> for more 2907*0Sstevel@tonic-gateon portability concerns. 2908*0Sstevel@tonic-gate 2909*0Sstevel@tonic-gateSee also L<perlport> for writing portable code. 2910*0Sstevel@tonic-gate 2911*0Sstevel@tonic-gate=item panic: del_backref 2912*0Sstevel@tonic-gate 2913*0Sstevel@tonic-gate(P) Failed an internal consistency check while trying to reset a weak 2914*0Sstevel@tonic-gatereference. 2915*0Sstevel@tonic-gate 2916*0Sstevel@tonic-gate=item panic: kid popen errno read 2917*0Sstevel@tonic-gate 2918*0Sstevel@tonic-gate(F) forked child returned an incomprehensible message about its errno. 2919*0Sstevel@tonic-gate 2920*0Sstevel@tonic-gate=item panic: magic_killbackrefs 2921*0Sstevel@tonic-gate 2922*0Sstevel@tonic-gate(P) Failed an internal consistency check while trying to reset all weak 2923*0Sstevel@tonic-gatereferences to an object. 2924*0Sstevel@tonic-gate 2925*0Sstevel@tonic-gate=item Parentheses missing around "%s" list 2926*0Sstevel@tonic-gate 2927*0Sstevel@tonic-gate(W parenthesis) You said something like 2928*0Sstevel@tonic-gate 2929*0Sstevel@tonic-gate my $foo, $bar = @_; 2930*0Sstevel@tonic-gate 2931*0Sstevel@tonic-gatewhen you meant 2932*0Sstevel@tonic-gate 2933*0Sstevel@tonic-gate my ($foo, $bar) = @_; 2934*0Sstevel@tonic-gate 2935*0Sstevel@tonic-gateRemember that "my", "our", and "local" bind tighter than comma. 2936*0Sstevel@tonic-gate 2937*0Sstevel@tonic-gate=item Possible unintended interpolation of %s in string 2938*0Sstevel@tonic-gate 2939*0Sstevel@tonic-gate(W ambiguous) It used to be that Perl would try to guess whether you 2940*0Sstevel@tonic-gatewanted an array interpolated or a literal @. It no longer does this; 2941*0Sstevel@tonic-gatearrays are now I<always> interpolated into strings. This means that 2942*0Sstevel@tonic-gateif you try something like: 2943*0Sstevel@tonic-gate 2944*0Sstevel@tonic-gate print "fred@example.com"; 2945*0Sstevel@tonic-gate 2946*0Sstevel@tonic-gateand the array C<@example> doesn't exist, Perl is going to print 2947*0Sstevel@tonic-gateC<fred.com>, which is probably not what you wanted. To get a literal 2948*0Sstevel@tonic-gateC<@> sign in a string, put a backslash before it, just as you would 2949*0Sstevel@tonic-gateto get a literal C<$> sign. 2950*0Sstevel@tonic-gate 2951*0Sstevel@tonic-gate=item Possible Y2K bug: %s 2952*0Sstevel@tonic-gate 2953*0Sstevel@tonic-gate(W y2k) You are concatenating the number 19 with another number, which 2954*0Sstevel@tonic-gatecould be a potential Year 2000 problem. 2955*0Sstevel@tonic-gate 2956*0Sstevel@tonic-gate=item pragma "attrs" is deprecated, use "sub NAME : ATTRS" instead 2957*0Sstevel@tonic-gate 2958*0Sstevel@tonic-gate(W deprecated) You have written something like this: 2959*0Sstevel@tonic-gate 2960*0Sstevel@tonic-gate sub doit 2961*0Sstevel@tonic-gate { 2962*0Sstevel@tonic-gate use attrs qw(locked); 2963*0Sstevel@tonic-gate } 2964*0Sstevel@tonic-gate 2965*0Sstevel@tonic-gateYou should use the new declaration syntax instead. 2966*0Sstevel@tonic-gate 2967*0Sstevel@tonic-gate sub doit : locked 2968*0Sstevel@tonic-gate { 2969*0Sstevel@tonic-gate ... 2970*0Sstevel@tonic-gate 2971*0Sstevel@tonic-gateThe C<use attrs> pragma is now obsolete, and is only provided for 2972*0Sstevel@tonic-gatebackward-compatibility. See L<perlsub/"Subroutine Attributes">. 2973*0Sstevel@tonic-gate 2974*0Sstevel@tonic-gate 2975*0Sstevel@tonic-gate=item Premature end of script headers 2976*0Sstevel@tonic-gate 2977*0Sstevel@tonic-gateSee Server error. 2978*0Sstevel@tonic-gate 2979*0Sstevel@tonic-gate=item Repeat count in pack overflows 2980*0Sstevel@tonic-gate 2981*0Sstevel@tonic-gate(F) You can't specify a repeat count so large that it overflows 2982*0Sstevel@tonic-gateyour signed integers. See L<perlfunc/pack>. 2983*0Sstevel@tonic-gate 2984*0Sstevel@tonic-gate=item Repeat count in unpack overflows 2985*0Sstevel@tonic-gate 2986*0Sstevel@tonic-gate(F) You can't specify a repeat count so large that it overflows 2987*0Sstevel@tonic-gateyour signed integers. See L<perlfunc/unpack>. 2988*0Sstevel@tonic-gate 2989*0Sstevel@tonic-gate=item realloc() of freed memory ignored 2990*0Sstevel@tonic-gate 2991*0Sstevel@tonic-gate(S) An internal routine called realloc() on something that had already 2992*0Sstevel@tonic-gatebeen freed. 2993*0Sstevel@tonic-gate 2994*0Sstevel@tonic-gate=item Reference is already weak 2995*0Sstevel@tonic-gate 2996*0Sstevel@tonic-gate(W misc) You have attempted to weaken a reference that is already weak. 2997*0Sstevel@tonic-gateDoing so has no effect. 2998*0Sstevel@tonic-gate 2999*0Sstevel@tonic-gate=item setpgrp can't take arguments 3000*0Sstevel@tonic-gate 3001*0Sstevel@tonic-gate(F) Your system has the setpgrp() from BSD 4.2, which takes no arguments, 3002*0Sstevel@tonic-gateunlike POSIX setpgid(), which takes a process ID and process group ID. 3003*0Sstevel@tonic-gate 3004*0Sstevel@tonic-gate=item Strange *+?{} on zero-length expression 3005*0Sstevel@tonic-gate 3006*0Sstevel@tonic-gate(W regexp) You applied a regular expression quantifier in a place where it 3007*0Sstevel@tonic-gatemakes no sense, such as on a zero-width assertion. 3008*0Sstevel@tonic-gateTry putting the quantifier inside the assertion instead. For example, 3009*0Sstevel@tonic-gatethe way to match "abc" provided that it is followed by three 3010*0Sstevel@tonic-gaterepetitions of "xyz" is C</abc(?=(?:xyz){3})/>, not C</abc(?=xyz){3}/>. 3011*0Sstevel@tonic-gate 3012*0Sstevel@tonic-gate=item switching effective %s is not implemented 3013*0Sstevel@tonic-gate 3014*0Sstevel@tonic-gate(F) While under the C<use filetest> pragma, we cannot switch the 3015*0Sstevel@tonic-gatereal and effective uids or gids. 3016*0Sstevel@tonic-gate 3017*0Sstevel@tonic-gate=item This Perl can't reset CRTL environ elements (%s) 3018*0Sstevel@tonic-gate 3019*0Sstevel@tonic-gate=item This Perl can't set CRTL environ elements (%s=%s) 3020*0Sstevel@tonic-gate 3021*0Sstevel@tonic-gate(W internal) Warnings peculiar to VMS. You tried to change or delete an element 3022*0Sstevel@tonic-gateof the CRTL's internal environ array, but your copy of Perl wasn't 3023*0Sstevel@tonic-gatebuilt with a CRTL that contained the setenv() function. You'll need to 3024*0Sstevel@tonic-gaterebuild Perl with a CRTL that does, or redefine F<PERL_ENV_TABLES> (see 3025*0Sstevel@tonic-gateL<perlvms>) so that the environ array isn't the target of the change to 3026*0Sstevel@tonic-gate%ENV which produced the warning. 3027*0Sstevel@tonic-gate 3028*0Sstevel@tonic-gate=item Too late to run %s block 3029*0Sstevel@tonic-gate 3030*0Sstevel@tonic-gate(W void) A CHECK or INIT block is being defined during run time proper, 3031*0Sstevel@tonic-gatewhen the opportunity to run them has already passed. Perhaps you are 3032*0Sstevel@tonic-gateloading a file with C<require> or C<do> when you should be using 3033*0Sstevel@tonic-gateC<use> instead. Or perhaps you should put the C<require> or C<do> 3034*0Sstevel@tonic-gateinside a BEGIN block. 3035*0Sstevel@tonic-gate 3036*0Sstevel@tonic-gate=item Unknown open() mode '%s' 3037*0Sstevel@tonic-gate 3038*0Sstevel@tonic-gate(F) The second argument of 3-argument open() is not among the list 3039*0Sstevel@tonic-gateof valid modes: C<< < >>, C<< > >>, C<<< >> >>>, C<< +< >>, 3040*0Sstevel@tonic-gateC<< +> >>, C<<< +>> >>>, C<-|>, C<|->. 3041*0Sstevel@tonic-gate 3042*0Sstevel@tonic-gate=item Unknown process %x sent message to prime_env_iter: %s 3043*0Sstevel@tonic-gate 3044*0Sstevel@tonic-gate(P) An error peculiar to VMS. Perl was reading values for %ENV before 3045*0Sstevel@tonic-gateiterating over it, and someone else stuck a message in the stream of 3046*0Sstevel@tonic-gatedata Perl expected. Someone's very confused, or perhaps trying to 3047*0Sstevel@tonic-gatesubvert Perl's population of %ENV for nefarious purposes. 3048*0Sstevel@tonic-gate 3049*0Sstevel@tonic-gate=item Unrecognized escape \\%c passed through 3050*0Sstevel@tonic-gate 3051*0Sstevel@tonic-gate(W misc) You used a backslash-character combination which is not recognized 3052*0Sstevel@tonic-gateby Perl. The character was understood literally. 3053*0Sstevel@tonic-gate 3054*0Sstevel@tonic-gate=item Unterminated attribute parameter in attribute list 3055*0Sstevel@tonic-gate 3056*0Sstevel@tonic-gate(F) The lexer saw an opening (left) parenthesis character while parsing an 3057*0Sstevel@tonic-gateattribute list, but the matching closing (right) parenthesis 3058*0Sstevel@tonic-gatecharacter was not found. You may need to add (or remove) a backslash 3059*0Sstevel@tonic-gatecharacter to get your parentheses to balance. See L<attributes>. 3060*0Sstevel@tonic-gate 3061*0Sstevel@tonic-gate=item Unterminated attribute list 3062*0Sstevel@tonic-gate 3063*0Sstevel@tonic-gate(F) The lexer found something other than a simple identifier at the start 3064*0Sstevel@tonic-gateof an attribute, and it wasn't a semicolon or the start of a 3065*0Sstevel@tonic-gateblock. Perhaps you terminated the parameter list of the previous attribute 3066*0Sstevel@tonic-gatetoo soon. See L<attributes>. 3067*0Sstevel@tonic-gate 3068*0Sstevel@tonic-gate=item Unterminated attribute parameter in subroutine attribute list 3069*0Sstevel@tonic-gate 3070*0Sstevel@tonic-gate(F) The lexer saw an opening (left) parenthesis character while parsing a 3071*0Sstevel@tonic-gatesubroutine attribute list, but the matching closing (right) parenthesis 3072*0Sstevel@tonic-gatecharacter was not found. You may need to add (or remove) a backslash 3073*0Sstevel@tonic-gatecharacter to get your parentheses to balance. 3074*0Sstevel@tonic-gate 3075*0Sstevel@tonic-gate=item Unterminated subroutine attribute list 3076*0Sstevel@tonic-gate 3077*0Sstevel@tonic-gate(F) The lexer found something other than a simple identifier at the start 3078*0Sstevel@tonic-gateof a subroutine attribute, and it wasn't a semicolon or the start of a 3079*0Sstevel@tonic-gateblock. Perhaps you terminated the parameter list of the previous attribute 3080*0Sstevel@tonic-gatetoo soon. 3081*0Sstevel@tonic-gate 3082*0Sstevel@tonic-gate=item Value of CLI symbol "%s" too long 3083*0Sstevel@tonic-gate 3084*0Sstevel@tonic-gate(W misc) A warning peculiar to VMS. Perl tried to read the value of an %ENV 3085*0Sstevel@tonic-gateelement from a CLI symbol table, and found a resultant string longer 3086*0Sstevel@tonic-gatethan 1024 characters. The return value has been truncated to 1024 3087*0Sstevel@tonic-gatecharacters. 3088*0Sstevel@tonic-gate 3089*0Sstevel@tonic-gate=item Version number must be a constant number 3090*0Sstevel@tonic-gate 3091*0Sstevel@tonic-gate(P) The attempt to translate a C<use Module n.n LIST> statement into 3092*0Sstevel@tonic-gateits equivalent C<BEGIN> block found an internal inconsistency with 3093*0Sstevel@tonic-gatethe version number. 3094*0Sstevel@tonic-gate 3095*0Sstevel@tonic-gate=back 3096*0Sstevel@tonic-gate 3097*0Sstevel@tonic-gate=head1 New tests 3098*0Sstevel@tonic-gate 3099*0Sstevel@tonic-gate=over 4 3100*0Sstevel@tonic-gate 3101*0Sstevel@tonic-gate=item lib/attrs 3102*0Sstevel@tonic-gate 3103*0Sstevel@tonic-gateCompatibility tests for C<sub : attrs> vs the older C<use attrs>. 3104*0Sstevel@tonic-gate 3105*0Sstevel@tonic-gate=item lib/env 3106*0Sstevel@tonic-gate 3107*0Sstevel@tonic-gateTests for new environment scalar capability (e.g., C<use Env qw($BAR);>). 3108*0Sstevel@tonic-gate 3109*0Sstevel@tonic-gate=item lib/env-array 3110*0Sstevel@tonic-gate 3111*0Sstevel@tonic-gateTests for new environment array capability (e.g., C<use Env qw(@PATH);>). 3112*0Sstevel@tonic-gate 3113*0Sstevel@tonic-gate=item lib/io_const 3114*0Sstevel@tonic-gate 3115*0Sstevel@tonic-gateIO constants (SEEK_*, _IO*). 3116*0Sstevel@tonic-gate 3117*0Sstevel@tonic-gate=item lib/io_dir 3118*0Sstevel@tonic-gate 3119*0Sstevel@tonic-gateDirectory-related IO methods (new, read, close, rewind, tied delete). 3120*0Sstevel@tonic-gate 3121*0Sstevel@tonic-gate=item lib/io_multihomed 3122*0Sstevel@tonic-gate 3123*0Sstevel@tonic-gateINET sockets with multi-homed hosts. 3124*0Sstevel@tonic-gate 3125*0Sstevel@tonic-gate=item lib/io_poll 3126*0Sstevel@tonic-gate 3127*0Sstevel@tonic-gateIO poll(). 3128*0Sstevel@tonic-gate 3129*0Sstevel@tonic-gate=item lib/io_unix 3130*0Sstevel@tonic-gate 3131*0Sstevel@tonic-gateUNIX sockets. 3132*0Sstevel@tonic-gate 3133*0Sstevel@tonic-gate=item op/attrs 3134*0Sstevel@tonic-gate 3135*0Sstevel@tonic-gateRegression tests for C<my ($x,@y,%z) : attrs> and <sub : attrs>. 3136*0Sstevel@tonic-gate 3137*0Sstevel@tonic-gate=item op/filetest 3138*0Sstevel@tonic-gate 3139*0Sstevel@tonic-gateFile test operators. 3140*0Sstevel@tonic-gate 3141*0Sstevel@tonic-gate=item op/lex_assign 3142*0Sstevel@tonic-gate 3143*0Sstevel@tonic-gateVerify operations that access pad objects (lexicals and temporaries). 3144*0Sstevel@tonic-gate 3145*0Sstevel@tonic-gate=item op/exists_sub 3146*0Sstevel@tonic-gate 3147*0Sstevel@tonic-gateVerify C<exists &sub> operations. 3148*0Sstevel@tonic-gate 3149*0Sstevel@tonic-gate=back 3150*0Sstevel@tonic-gate 3151*0Sstevel@tonic-gate=head1 Incompatible Changes 3152*0Sstevel@tonic-gate 3153*0Sstevel@tonic-gate=head2 Perl Source Incompatibilities 3154*0Sstevel@tonic-gate 3155*0Sstevel@tonic-gateBeware that any new warnings that have been added or old ones 3156*0Sstevel@tonic-gatethat have been enhanced are B<not> considered incompatible changes. 3157*0Sstevel@tonic-gate 3158*0Sstevel@tonic-gateSince all new warnings must be explicitly requested via the C<-w> 3159*0Sstevel@tonic-gateswitch or the C<warnings> pragma, it is ultimately the programmer's 3160*0Sstevel@tonic-gateresponsibility to ensure that warnings are enabled judiciously. 3161*0Sstevel@tonic-gate 3162*0Sstevel@tonic-gate=over 4 3163*0Sstevel@tonic-gate 3164*0Sstevel@tonic-gate=item CHECK is a new keyword 3165*0Sstevel@tonic-gate 3166*0Sstevel@tonic-gateAll subroutine definitions named CHECK are now special. See 3167*0Sstevel@tonic-gateC</"Support for CHECK blocks"> for more information. 3168*0Sstevel@tonic-gate 3169*0Sstevel@tonic-gate=item Treatment of list slices of undef has changed 3170*0Sstevel@tonic-gate 3171*0Sstevel@tonic-gateThere is a potential incompatibility in the behavior of list slices 3172*0Sstevel@tonic-gatethat are comprised entirely of undefined values. 3173*0Sstevel@tonic-gateSee L</"Behavior of list slices is more consistent">. 3174*0Sstevel@tonic-gate 3175*0Sstevel@tonic-gate=item Format of $English::PERL_VERSION is different 3176*0Sstevel@tonic-gate 3177*0Sstevel@tonic-gateThe English module now sets $PERL_VERSION to $^V (a string value) rather 3178*0Sstevel@tonic-gatethan C<$]> (a numeric value). This is a potential incompatibility. 3179*0Sstevel@tonic-gateSend us a report via perlbug if you are affected by this. 3180*0Sstevel@tonic-gate 3181*0Sstevel@tonic-gateSee L</"Improved Perl version numbering system"> for the reasons for 3182*0Sstevel@tonic-gatethis change. 3183*0Sstevel@tonic-gate 3184*0Sstevel@tonic-gate=item Literals of the form C<1.2.3> parse differently 3185*0Sstevel@tonic-gate 3186*0Sstevel@tonic-gatePreviously, numeric literals with more than one dot in them were 3187*0Sstevel@tonic-gateinterpreted as a floating point number concatenated with one or more 3188*0Sstevel@tonic-gatenumbers. Such "numbers" are now parsed as strings composed of the 3189*0Sstevel@tonic-gatespecified ordinals. 3190*0Sstevel@tonic-gate 3191*0Sstevel@tonic-gateFor example, C<print 97.98.99> used to output C<97.9899> in earlier 3192*0Sstevel@tonic-gateversions, but now prints C<abc>. 3193*0Sstevel@tonic-gate 3194*0Sstevel@tonic-gateSee L</"Support for strings represented as a vector of ordinals">. 3195*0Sstevel@tonic-gate 3196*0Sstevel@tonic-gate=item Possibly changed pseudo-random number generator 3197*0Sstevel@tonic-gate 3198*0Sstevel@tonic-gatePerl programs that depend on reproducing a specific set of pseudo-random 3199*0Sstevel@tonic-gatenumbers may now produce different output due to improvements made to the 3200*0Sstevel@tonic-gaterand() builtin. You can use C<sh Configure -Drandfunc=rand> to obtain 3201*0Sstevel@tonic-gatethe old behavior. 3202*0Sstevel@tonic-gate 3203*0Sstevel@tonic-gateSee L</"Better pseudo-random number generator">. 3204*0Sstevel@tonic-gate 3205*0Sstevel@tonic-gate=item Hashing function for hash keys has changed 3206*0Sstevel@tonic-gate 3207*0Sstevel@tonic-gateEven though Perl hashes are not order preserving, the apparently 3208*0Sstevel@tonic-gaterandom order encountered when iterating on the contents of a hash 3209*0Sstevel@tonic-gateis actually determined by the hashing algorithm used. Improvements 3210*0Sstevel@tonic-gatein the algorithm may yield a random order that is B<different> from 3211*0Sstevel@tonic-gatethat of previous versions, especially when iterating on hashes. 3212*0Sstevel@tonic-gate 3213*0Sstevel@tonic-gateSee L</"Better worst-case behavior of hashes"> for additional 3214*0Sstevel@tonic-gateinformation. 3215*0Sstevel@tonic-gate 3216*0Sstevel@tonic-gate=item C<undef> fails on read only values 3217*0Sstevel@tonic-gate 3218*0Sstevel@tonic-gateUsing the C<undef> operator on a readonly value (such as $1) has 3219*0Sstevel@tonic-gatethe same effect as assigning C<undef> to the readonly value--it 3220*0Sstevel@tonic-gatethrows an exception. 3221*0Sstevel@tonic-gate 3222*0Sstevel@tonic-gate=item Close-on-exec bit may be set on pipe and socket handles 3223*0Sstevel@tonic-gate 3224*0Sstevel@tonic-gatePipe and socket handles are also now subject to the close-on-exec 3225*0Sstevel@tonic-gatebehavior determined by the special variable $^F. 3226*0Sstevel@tonic-gate 3227*0Sstevel@tonic-gateSee L</"More consistent close-on-exec behavior">. 3228*0Sstevel@tonic-gate 3229*0Sstevel@tonic-gate=item Writing C<"$$1"> to mean C<"${$}1"> is unsupported 3230*0Sstevel@tonic-gate 3231*0Sstevel@tonic-gatePerl 5.004 deprecated the interpretation of C<$$1> and 3232*0Sstevel@tonic-gatesimilar within interpolated strings to mean C<$$ . "1">, 3233*0Sstevel@tonic-gatebut still allowed it. 3234*0Sstevel@tonic-gate 3235*0Sstevel@tonic-gateIn Perl 5.6.0 and later, C<"$$1"> always means C<"${$1}">. 3236*0Sstevel@tonic-gate 3237*0Sstevel@tonic-gate=item delete(), each(), values() and C<\(%h)> 3238*0Sstevel@tonic-gate 3239*0Sstevel@tonic-gateoperate on aliases to values, not copies 3240*0Sstevel@tonic-gate 3241*0Sstevel@tonic-gatedelete(), each(), values() and hashes (e.g. C<\(%h)>) 3242*0Sstevel@tonic-gatein a list context return the actual 3243*0Sstevel@tonic-gatevalues in the hash, instead of copies (as they used to in earlier 3244*0Sstevel@tonic-gateversions). Typical idioms for using these constructs copy the 3245*0Sstevel@tonic-gatereturned values, but this can make a significant difference when 3246*0Sstevel@tonic-gatecreating references to the returned values. Keys in the hash are still 3247*0Sstevel@tonic-gatereturned as copies when iterating on a hash. 3248*0Sstevel@tonic-gate 3249*0Sstevel@tonic-gateSee also L</"delete(), each(), values() and hash iteration are faster">. 3250*0Sstevel@tonic-gate 3251*0Sstevel@tonic-gate=item vec(EXPR,OFFSET,BITS) enforces powers-of-two BITS 3252*0Sstevel@tonic-gate 3253*0Sstevel@tonic-gatevec() generates a run-time error if the BITS argument is not 3254*0Sstevel@tonic-gatea valid power-of-two integer. 3255*0Sstevel@tonic-gate 3256*0Sstevel@tonic-gate=item Text of some diagnostic output has changed 3257*0Sstevel@tonic-gate 3258*0Sstevel@tonic-gateMost references to internal Perl operations in diagnostics 3259*0Sstevel@tonic-gatehave been changed to be more descriptive. This may be an 3260*0Sstevel@tonic-gateissue for programs that may incorrectly rely on the exact 3261*0Sstevel@tonic-gatetext of diagnostics for proper functioning. 3262*0Sstevel@tonic-gate 3263*0Sstevel@tonic-gate=item C<%@> has been removed 3264*0Sstevel@tonic-gate 3265*0Sstevel@tonic-gateThe undocumented special variable C<%@> that used to accumulate 3266*0Sstevel@tonic-gate"background" errors (such as those that happen in DESTROY()) 3267*0Sstevel@tonic-gatehas been removed, because it could potentially result in memory 3268*0Sstevel@tonic-gateleaks. 3269*0Sstevel@tonic-gate 3270*0Sstevel@tonic-gate=item Parenthesized not() behaves like a list operator 3271*0Sstevel@tonic-gate 3272*0Sstevel@tonic-gateThe C<not> operator now falls under the "if it looks like a function, 3273*0Sstevel@tonic-gateit behaves like a function" rule. 3274*0Sstevel@tonic-gate 3275*0Sstevel@tonic-gateAs a result, the parenthesized form can be used with C<grep> and C<map>. 3276*0Sstevel@tonic-gateThe following construct used to be a syntax error before, but it works 3277*0Sstevel@tonic-gateas expected now: 3278*0Sstevel@tonic-gate 3279*0Sstevel@tonic-gate grep not($_), @things; 3280*0Sstevel@tonic-gate 3281*0Sstevel@tonic-gateOn the other hand, using C<not> with a literal list slice may not 3282*0Sstevel@tonic-gatework. The following previously allowed construct: 3283*0Sstevel@tonic-gate 3284*0Sstevel@tonic-gate print not (1,2,3)[0]; 3285*0Sstevel@tonic-gate 3286*0Sstevel@tonic-gateneeds to be written with additional parentheses now: 3287*0Sstevel@tonic-gate 3288*0Sstevel@tonic-gate print not((1,2,3)[0]); 3289*0Sstevel@tonic-gate 3290*0Sstevel@tonic-gateThe behavior remains unaffected when C<not> is not followed by parentheses. 3291*0Sstevel@tonic-gate 3292*0Sstevel@tonic-gate=item Semantics of bareword prototype C<(*)> have changed 3293*0Sstevel@tonic-gate 3294*0Sstevel@tonic-gateThe semantics of the bareword prototype C<*> have changed. Perl 5.005 3295*0Sstevel@tonic-gatealways coerced simple scalar arguments to a typeglob, which wasn't useful 3296*0Sstevel@tonic-gatein situations where the subroutine must distinguish between a simple 3297*0Sstevel@tonic-gatescalar and a typeglob. The new behavior is to not coerce bareword 3298*0Sstevel@tonic-gatearguments to a typeglob. The value will always be visible as either 3299*0Sstevel@tonic-gatea simple scalar or as a reference to a typeglob. 3300*0Sstevel@tonic-gate 3301*0Sstevel@tonic-gateSee L</"More functional bareword prototype (*)">. 3302*0Sstevel@tonic-gate 3303*0Sstevel@tonic-gate=item Semantics of bit operators may have changed on 64-bit platforms 3304*0Sstevel@tonic-gate 3305*0Sstevel@tonic-gateIf your platform is either natively 64-bit or if Perl has been 3306*0Sstevel@tonic-gateconfigured to used 64-bit integers, i.e., $Config{ivsize} is 8, 3307*0Sstevel@tonic-gatethere may be a potential incompatibility in the behavior of bitwise 3308*0Sstevel@tonic-gatenumeric operators (& | ^ ~ << >>). These operators used to strictly 3309*0Sstevel@tonic-gateoperate on the lower 32 bits of integers in previous versions, but now 3310*0Sstevel@tonic-gateoperate over the entire native integral width. In particular, note 3311*0Sstevel@tonic-gatethat unary C<~> will produce different results on platforms that have 3312*0Sstevel@tonic-gatedifferent $Config{ivsize}. For portability, be sure to mask off 3313*0Sstevel@tonic-gatethe excess bits in the result of unary C<~>, e.g., C<~$x & 0xffffffff>. 3314*0Sstevel@tonic-gate 3315*0Sstevel@tonic-gateSee L</"Bit operators support full native integer width">. 3316*0Sstevel@tonic-gate 3317*0Sstevel@tonic-gate=item More builtins taint their results 3318*0Sstevel@tonic-gate 3319*0Sstevel@tonic-gateAs described in L</"Improved security features">, there may be more 3320*0Sstevel@tonic-gatesources of taint in a Perl program. 3321*0Sstevel@tonic-gate 3322*0Sstevel@tonic-gateTo avoid these new tainting behaviors, you can build Perl with the 3323*0Sstevel@tonic-gateConfigure option C<-Accflags=-DINCOMPLETE_TAINTS>. Beware that the 3324*0Sstevel@tonic-gateensuing perl binary may be insecure. 3325*0Sstevel@tonic-gate 3326*0Sstevel@tonic-gate=back 3327*0Sstevel@tonic-gate 3328*0Sstevel@tonic-gate=head2 C Source Incompatibilities 3329*0Sstevel@tonic-gate 3330*0Sstevel@tonic-gate=over 4 3331*0Sstevel@tonic-gate 3332*0Sstevel@tonic-gate=item C<PERL_POLLUTE> 3333*0Sstevel@tonic-gate 3334*0Sstevel@tonic-gateRelease 5.005 grandfathered old global symbol names by providing preprocessor 3335*0Sstevel@tonic-gatemacros for extension source compatibility. As of release 5.6.0, these 3336*0Sstevel@tonic-gatepreprocessor definitions are not available by default. You need to explicitly 3337*0Sstevel@tonic-gatecompile perl with C<-DPERL_POLLUTE> to get these definitions. For 3338*0Sstevel@tonic-gateextensions still using the old symbols, this option can be 3339*0Sstevel@tonic-gatespecified via MakeMaker: 3340*0Sstevel@tonic-gate 3341*0Sstevel@tonic-gate perl Makefile.PL POLLUTE=1 3342*0Sstevel@tonic-gate 3343*0Sstevel@tonic-gate=item C<PERL_IMPLICIT_CONTEXT> 3344*0Sstevel@tonic-gate 3345*0Sstevel@tonic-gateThis new build option provides a set of macros for all API functions 3346*0Sstevel@tonic-gatesuch that an implicit interpreter/thread context argument is passed to 3347*0Sstevel@tonic-gateevery API function. As a result of this, something like C<sv_setsv(foo,bar)> 3348*0Sstevel@tonic-gateamounts to a macro invocation that actually translates to something like 3349*0Sstevel@tonic-gateC<Perl_sv_setsv(my_perl,foo,bar)>. While this is generally expected 3350*0Sstevel@tonic-gateto not have any significant source compatibility issues, the difference 3351*0Sstevel@tonic-gatebetween a macro and a real function call will need to be considered. 3352*0Sstevel@tonic-gate 3353*0Sstevel@tonic-gateThis means that there B<is> a source compatibility issue as a result of 3354*0Sstevel@tonic-gatethis if your extensions attempt to use pointers to any of the Perl API 3355*0Sstevel@tonic-gatefunctions. 3356*0Sstevel@tonic-gate 3357*0Sstevel@tonic-gateNote that the above issue is not relevant to the default build of 3358*0Sstevel@tonic-gatePerl, whose interfaces continue to match those of prior versions 3359*0Sstevel@tonic-gate(but subject to the other options described here). 3360*0Sstevel@tonic-gate 3361*0Sstevel@tonic-gateSee L<perlguts/"The Perl API"> for detailed information on the 3362*0Sstevel@tonic-gateramifications of building Perl with this option. 3363*0Sstevel@tonic-gate 3364*0Sstevel@tonic-gate NOTE: PERL_IMPLICIT_CONTEXT is automatically enabled whenever Perl is built 3365*0Sstevel@tonic-gate with one of -Dusethreads, -Dusemultiplicity, or both. It is not 3366*0Sstevel@tonic-gate intended to be enabled by users at this time. 3367*0Sstevel@tonic-gate 3368*0Sstevel@tonic-gate=item C<PERL_POLLUTE_MALLOC> 3369*0Sstevel@tonic-gate 3370*0Sstevel@tonic-gateEnabling Perl's malloc in release 5.005 and earlier caused the namespace of 3371*0Sstevel@tonic-gatethe system's malloc family of functions to be usurped by the Perl versions, 3372*0Sstevel@tonic-gatesince by default they used the same names. Besides causing problems on 3373*0Sstevel@tonic-gateplatforms that do not allow these functions to be cleanly replaced, this 3374*0Sstevel@tonic-gatealso meant that the system versions could not be called in programs that 3375*0Sstevel@tonic-gateused Perl's malloc. Previous versions of Perl have allowed this behaviour 3376*0Sstevel@tonic-gateto be suppressed with the HIDEMYMALLOC and EMBEDMYMALLOC preprocessor 3377*0Sstevel@tonic-gatedefinitions. 3378*0Sstevel@tonic-gate 3379*0Sstevel@tonic-gateAs of release 5.6.0, Perl's malloc family of functions have default names 3380*0Sstevel@tonic-gatedistinct from the system versions. You need to explicitly compile perl with 3381*0Sstevel@tonic-gateC<-DPERL_POLLUTE_MALLOC> to get the older behaviour. HIDEMYMALLOC 3382*0Sstevel@tonic-gateand EMBEDMYMALLOC have no effect, since the behaviour they enabled is now 3383*0Sstevel@tonic-gatethe default. 3384*0Sstevel@tonic-gate 3385*0Sstevel@tonic-gateNote that these functions do B<not> constitute Perl's memory allocation API. 3386*0Sstevel@tonic-gateSee L<perlguts/"Memory Allocation"> for further information about that. 3387*0Sstevel@tonic-gate 3388*0Sstevel@tonic-gate=back 3389*0Sstevel@tonic-gate 3390*0Sstevel@tonic-gate=head2 Compatible C Source API Changes 3391*0Sstevel@tonic-gate 3392*0Sstevel@tonic-gate=over 4 3393*0Sstevel@tonic-gate 3394*0Sstevel@tonic-gate=item C<PATCHLEVEL> is now C<PERL_VERSION> 3395*0Sstevel@tonic-gate 3396*0Sstevel@tonic-gateThe cpp macros C<PERL_REVISION>, C<PERL_VERSION>, and C<PERL_SUBVERSION> 3397*0Sstevel@tonic-gateare now available by default from perl.h, and reflect the base revision, 3398*0Sstevel@tonic-gatepatchlevel, and subversion respectively. C<PERL_REVISION> had no 3399*0Sstevel@tonic-gateprior equivalent, while C<PERL_VERSION> and C<PERL_SUBVERSION> were 3400*0Sstevel@tonic-gatepreviously available as C<PATCHLEVEL> and C<SUBVERSION>. 3401*0Sstevel@tonic-gate 3402*0Sstevel@tonic-gateThe new names cause less pollution of the B<cpp> namespace and reflect what 3403*0Sstevel@tonic-gatethe numbers have come to stand for in common practice. For compatibility, 3404*0Sstevel@tonic-gatethe old names are still supported when F<patchlevel.h> is explicitly 3405*0Sstevel@tonic-gateincluded (as required before), so there is no source incompatibility 3406*0Sstevel@tonic-gatefrom the change. 3407*0Sstevel@tonic-gate 3408*0Sstevel@tonic-gate=back 3409*0Sstevel@tonic-gate 3410*0Sstevel@tonic-gate=head2 Binary Incompatibilities 3411*0Sstevel@tonic-gate 3412*0Sstevel@tonic-gateIn general, the default build of this release is expected to be binary 3413*0Sstevel@tonic-gatecompatible for extensions built with the 5.005 release or its maintenance 3414*0Sstevel@tonic-gateversions. However, specific platforms may have broken binary compatibility 3415*0Sstevel@tonic-gatedue to changes in the defaults used in hints files. Therefore, please be 3416*0Sstevel@tonic-gatesure to always check the platform-specific README files for any notes to 3417*0Sstevel@tonic-gatethe contrary. 3418*0Sstevel@tonic-gate 3419*0Sstevel@tonic-gateThe usethreads or usemultiplicity builds are B<not> binary compatible 3420*0Sstevel@tonic-gatewith the corresponding builds in 5.005. 3421*0Sstevel@tonic-gate 3422*0Sstevel@tonic-gateOn platforms that require an explicit list of exports (AIX, OS/2 and Windows, 3423*0Sstevel@tonic-gateamong others), purely internal symbols such as parser functions and the 3424*0Sstevel@tonic-gaterun time opcodes are not exported by default. Perl 5.005 used to export 3425*0Sstevel@tonic-gateall functions irrespective of whether they were considered part of the 3426*0Sstevel@tonic-gatepublic API or not. 3427*0Sstevel@tonic-gate 3428*0Sstevel@tonic-gateFor the full list of public API functions, see L<perlapi>. 3429*0Sstevel@tonic-gate 3430*0Sstevel@tonic-gate=head1 Known Problems 3431*0Sstevel@tonic-gate 3432*0Sstevel@tonic-gate=head2 Localizing a tied hash element may leak memory 3433*0Sstevel@tonic-gate 3434*0Sstevel@tonic-gateAs of the 5.6.1 release, there is a known leak when code such as this 3435*0Sstevel@tonic-gateis executed: 3436*0Sstevel@tonic-gate 3437*0Sstevel@tonic-gate use Tie::Hash; 3438*0Sstevel@tonic-gate tie my %tie_hash => 'Tie::StdHash'; 3439*0Sstevel@tonic-gate 3440*0Sstevel@tonic-gate ... 3441*0Sstevel@tonic-gate 3442*0Sstevel@tonic-gate local($tie_hash{Foo}) = 1; # leaks 3443*0Sstevel@tonic-gate 3444*0Sstevel@tonic-gate=head2 Known test failures 3445*0Sstevel@tonic-gate 3446*0Sstevel@tonic-gate=over 3447*0Sstevel@tonic-gate 3448*0Sstevel@tonic-gate=item * 3449*0Sstevel@tonic-gate 3450*0Sstevel@tonic-gate64-bit builds 3451*0Sstevel@tonic-gate 3452*0Sstevel@tonic-gateSubtest #15 of lib/b.t may fail under 64-bit builds on platforms such 3453*0Sstevel@tonic-gateas HP-UX PA64 and Linux IA64. The issue is still being investigated. 3454*0Sstevel@tonic-gate 3455*0Sstevel@tonic-gateThe lib/io_multihomed test may hang in HP-UX if Perl has been 3456*0Sstevel@tonic-gateconfigured to be 64-bit. Because other 64-bit platforms do not 3457*0Sstevel@tonic-gatehang in this test, HP-UX is suspect. All other tests pass 3458*0Sstevel@tonic-gatein 64-bit HP-UX. The test attempts to create and connect to 3459*0Sstevel@tonic-gate"multihomed" sockets (sockets which have multiple IP addresses). 3460*0Sstevel@tonic-gate 3461*0Sstevel@tonic-gateNote that 64-bit support is still experimental. 3462*0Sstevel@tonic-gate 3463*0Sstevel@tonic-gate=item * 3464*0Sstevel@tonic-gate 3465*0Sstevel@tonic-gateFailure of Thread tests 3466*0Sstevel@tonic-gate 3467*0Sstevel@tonic-gateThe subtests 19 and 20 of lib/thr5005.t test are known to fail due to 3468*0Sstevel@tonic-gatefundamental problems in the 5.005 threading implementation. These are 3469*0Sstevel@tonic-gatenot new failures--Perl 5.005_0x has the same bugs, but didn't have these 3470*0Sstevel@tonic-gatetests. (Note that support for 5.005-style threading remains experimental.) 3471*0Sstevel@tonic-gate 3472*0Sstevel@tonic-gate=item * 3473*0Sstevel@tonic-gate 3474*0Sstevel@tonic-gateNEXTSTEP 3.3 POSIX test failure 3475*0Sstevel@tonic-gate 3476*0Sstevel@tonic-gateIn NEXTSTEP 3.3p2 the implementation of the strftime(3) in the 3477*0Sstevel@tonic-gateoperating system libraries is buggy: the %j format numbers the days of 3478*0Sstevel@tonic-gatea month starting from zero, which, while being logical to programmers, 3479*0Sstevel@tonic-gatewill cause the subtests 19 to 27 of the lib/posix test may fail. 3480*0Sstevel@tonic-gate 3481*0Sstevel@tonic-gate=item * 3482*0Sstevel@tonic-gate 3483*0Sstevel@tonic-gateTru64 (aka Digital UNIX, aka DEC OSF/1) lib/sdbm test failure with gcc 3484*0Sstevel@tonic-gate 3485*0Sstevel@tonic-gateIf compiled with gcc 2.95 the lib/sdbm test will fail (dump core). 3486*0Sstevel@tonic-gateThe cure is to use the vendor cc, it comes with the operating system 3487*0Sstevel@tonic-gateand produces good code. 3488*0Sstevel@tonic-gate 3489*0Sstevel@tonic-gate=back 3490*0Sstevel@tonic-gate 3491*0Sstevel@tonic-gate=head2 EBCDIC platforms not fully supported 3492*0Sstevel@tonic-gate 3493*0Sstevel@tonic-gateIn earlier releases of Perl, EBCDIC environments like OS390 (also 3494*0Sstevel@tonic-gateknown as Open Edition MVS) and VM-ESA were supported. Due to changes 3495*0Sstevel@tonic-gaterequired by the UTF-8 (Unicode) support, the EBCDIC platforms are not 3496*0Sstevel@tonic-gatesupported in Perl 5.6.0. 3497*0Sstevel@tonic-gate 3498*0Sstevel@tonic-gateThe 5.6.1 release improves support for EBCDIC platforms, but they 3499*0Sstevel@tonic-gateare not fully supported yet. 3500*0Sstevel@tonic-gate 3501*0Sstevel@tonic-gate=head2 UNICOS/mk CC failures during Configure run 3502*0Sstevel@tonic-gate 3503*0Sstevel@tonic-gateIn UNICOS/mk the following errors may appear during the Configure run: 3504*0Sstevel@tonic-gate 3505*0Sstevel@tonic-gate Guessing which symbols your C compiler and preprocessor define... 3506*0Sstevel@tonic-gate CC-20 cc: ERROR File = try.c, Line = 3 3507*0Sstevel@tonic-gate ... 3508*0Sstevel@tonic-gate bad switch yylook 79bad switch yylook 79bad switch yylook 79bad switch yylook 79#ifdef A29K 3509*0Sstevel@tonic-gate ... 3510*0Sstevel@tonic-gate 4 errors detected in the compilation of "try.c". 3511*0Sstevel@tonic-gate 3512*0Sstevel@tonic-gateThe culprit is the broken awk of UNICOS/mk. The effect is fortunately 3513*0Sstevel@tonic-gaterather mild: Perl itself is not adversely affected by the error, only 3514*0Sstevel@tonic-gatethe h2ph utility coming with Perl, and that is rather rarely needed 3515*0Sstevel@tonic-gatethese days. 3516*0Sstevel@tonic-gate 3517*0Sstevel@tonic-gate=head2 Arrow operator and arrays 3518*0Sstevel@tonic-gate 3519*0Sstevel@tonic-gateWhen the left argument to the arrow operator C<< -> >> is an array, or 3520*0Sstevel@tonic-gatethe C<scalar> operator operating on an array, the result of the 3521*0Sstevel@tonic-gateoperation must be considered erroneous. For example: 3522*0Sstevel@tonic-gate 3523*0Sstevel@tonic-gate @x->[2] 3524*0Sstevel@tonic-gate scalar(@x)->[2] 3525*0Sstevel@tonic-gate 3526*0Sstevel@tonic-gateThese expressions will get run-time errors in some future release of 3527*0Sstevel@tonic-gatePerl. 3528*0Sstevel@tonic-gate 3529*0Sstevel@tonic-gate=head2 Experimental features 3530*0Sstevel@tonic-gate 3531*0Sstevel@tonic-gateAs discussed above, many features are still experimental. Interfaces and 3532*0Sstevel@tonic-gateimplementation of these features are subject to change, and in extreme cases, 3533*0Sstevel@tonic-gateeven subject to removal in some future release of Perl. These features 3534*0Sstevel@tonic-gateinclude the following: 3535*0Sstevel@tonic-gate 3536*0Sstevel@tonic-gate=over 4 3537*0Sstevel@tonic-gate 3538*0Sstevel@tonic-gate=item Threads 3539*0Sstevel@tonic-gate 3540*0Sstevel@tonic-gate=item Unicode 3541*0Sstevel@tonic-gate 3542*0Sstevel@tonic-gate=item 64-bit support 3543*0Sstevel@tonic-gate 3544*0Sstevel@tonic-gate=item Lvalue subroutines 3545*0Sstevel@tonic-gate 3546*0Sstevel@tonic-gate=item Weak references 3547*0Sstevel@tonic-gate 3548*0Sstevel@tonic-gate=item The pseudo-hash data type 3549*0Sstevel@tonic-gate 3550*0Sstevel@tonic-gate=item The Compiler suite 3551*0Sstevel@tonic-gate 3552*0Sstevel@tonic-gate=item Internal implementation of file globbing 3553*0Sstevel@tonic-gate 3554*0Sstevel@tonic-gate=item The DB module 3555*0Sstevel@tonic-gate 3556*0Sstevel@tonic-gate=item The regular expression code constructs: 3557*0Sstevel@tonic-gate 3558*0Sstevel@tonic-gateC<(?{ code })> and C<(??{ code })> 3559*0Sstevel@tonic-gate 3560*0Sstevel@tonic-gate=back 3561*0Sstevel@tonic-gate 3562*0Sstevel@tonic-gate=head1 Obsolete Diagnostics 3563*0Sstevel@tonic-gate 3564*0Sstevel@tonic-gate=over 4 3565*0Sstevel@tonic-gate 3566*0Sstevel@tonic-gate=item Character class syntax [: :] is reserved for future extensions 3567*0Sstevel@tonic-gate 3568*0Sstevel@tonic-gate(W) Within regular expression character classes ([]) the syntax beginning 3569*0Sstevel@tonic-gatewith "[:" and ending with ":]" is reserved for future extensions. 3570*0Sstevel@tonic-gateIf you need to represent those character sequences inside a regular 3571*0Sstevel@tonic-gateexpression character class, just quote the square brackets with the 3572*0Sstevel@tonic-gatebackslash: "\[:" and ":\]". 3573*0Sstevel@tonic-gate 3574*0Sstevel@tonic-gate=item Ill-formed logical name |%s| in prime_env_iter 3575*0Sstevel@tonic-gate 3576*0Sstevel@tonic-gate(W) A warning peculiar to VMS. A logical name was encountered when preparing 3577*0Sstevel@tonic-gateto iterate over %ENV which violates the syntactic rules governing logical 3578*0Sstevel@tonic-gatenames. Because it cannot be translated normally, it is skipped, and will not 3579*0Sstevel@tonic-gateappear in %ENV. This may be a benign occurrence, as some software packages 3580*0Sstevel@tonic-gatemight directly modify logical name tables and introduce nonstandard names, 3581*0Sstevel@tonic-gateor it may indicate that a logical name table has been corrupted. 3582*0Sstevel@tonic-gate 3583*0Sstevel@tonic-gate=item In string, @%s now must be written as \@%s 3584*0Sstevel@tonic-gate 3585*0Sstevel@tonic-gateThe description of this error used to say: 3586*0Sstevel@tonic-gate 3587*0Sstevel@tonic-gate (Someday it will simply assume that an unbackslashed @ 3588*0Sstevel@tonic-gate interpolates an array.) 3589*0Sstevel@tonic-gate 3590*0Sstevel@tonic-gateThat day has come, and this fatal error has been removed. It has been 3591*0Sstevel@tonic-gatereplaced by a non-fatal warning instead. 3592*0Sstevel@tonic-gateSee L</Arrays now always interpolate into double-quoted strings> for 3593*0Sstevel@tonic-gatedetails. 3594*0Sstevel@tonic-gate 3595*0Sstevel@tonic-gate=item Probable precedence problem on %s 3596*0Sstevel@tonic-gate 3597*0Sstevel@tonic-gate(W) The compiler found a bareword where it expected a conditional, 3598*0Sstevel@tonic-gatewhich often indicates that an || or && was parsed as part of the 3599*0Sstevel@tonic-gatelast argument of the previous construct, for example: 3600*0Sstevel@tonic-gate 3601*0Sstevel@tonic-gate open FOO || die; 3602*0Sstevel@tonic-gate 3603*0Sstevel@tonic-gate=item regexp too big 3604*0Sstevel@tonic-gate 3605*0Sstevel@tonic-gate(F) The current implementation of regular expressions uses shorts as 3606*0Sstevel@tonic-gateaddress offsets within a string. Unfortunately this means that if 3607*0Sstevel@tonic-gatethe regular expression compiles to longer than 32767, it'll blow up. 3608*0Sstevel@tonic-gateUsually when you want a regular expression this big, there is a better 3609*0Sstevel@tonic-gateway to do it with multiple statements. See L<perlre>. 3610*0Sstevel@tonic-gate 3611*0Sstevel@tonic-gate=item Use of "$$<digit>" to mean "${$}<digit>" is deprecated 3612*0Sstevel@tonic-gate 3613*0Sstevel@tonic-gate(D) Perl versions before 5.004 misinterpreted any type marker followed 3614*0Sstevel@tonic-gateby "$" and a digit. For example, "$$0" was incorrectly taken to mean 3615*0Sstevel@tonic-gate"${$}0" instead of "${$0}". This bug is (mostly) fixed in Perl 5.004. 3616*0Sstevel@tonic-gate 3617*0Sstevel@tonic-gateHowever, the developers of Perl 5.004 could not fix this bug completely, 3618*0Sstevel@tonic-gatebecause at least two widely-used modules depend on the old meaning of 3619*0Sstevel@tonic-gate"$$0" in a string. So Perl 5.004 still interprets "$$<digit>" in the 3620*0Sstevel@tonic-gateold (broken) way inside strings; but it generates this message as a 3621*0Sstevel@tonic-gatewarning. And in Perl 5.005, this special treatment will cease. 3622*0Sstevel@tonic-gate 3623*0Sstevel@tonic-gate=back 3624*0Sstevel@tonic-gate 3625*0Sstevel@tonic-gate=head1 Reporting Bugs 3626*0Sstevel@tonic-gate 3627*0Sstevel@tonic-gateIf you find what you think is a bug, you might check the 3628*0Sstevel@tonic-gatearticles recently posted to the comp.lang.perl.misc newsgroup. 3629*0Sstevel@tonic-gateThere may also be information at http://www.perl.com/ , the Perl 3630*0Sstevel@tonic-gateHome Page. 3631*0Sstevel@tonic-gate 3632*0Sstevel@tonic-gateIf you believe you have an unreported bug, please run the B<perlbug> 3633*0Sstevel@tonic-gateprogram included with your release. Be sure to trim your bug down 3634*0Sstevel@tonic-gateto a tiny but sufficient test case. Your bug report, along with the 3635*0Sstevel@tonic-gateoutput of C<perl -V>, will be sent off to perlbug@perl.org to be 3636*0Sstevel@tonic-gateanalysed by the Perl porting team. 3637*0Sstevel@tonic-gate 3638*0Sstevel@tonic-gate=head1 SEE ALSO 3639*0Sstevel@tonic-gate 3640*0Sstevel@tonic-gateThe F<Changes> file for exhaustive details on what changed. 3641*0Sstevel@tonic-gate 3642*0Sstevel@tonic-gateThe F<INSTALL> file for how to build Perl. 3643*0Sstevel@tonic-gate 3644*0Sstevel@tonic-gateThe F<README> file for general stuff. 3645*0Sstevel@tonic-gate 3646*0Sstevel@tonic-gateThe F<Artistic> and F<Copying> files for copyright information. 3647*0Sstevel@tonic-gate 3648*0Sstevel@tonic-gate=head1 HISTORY 3649*0Sstevel@tonic-gate 3650*0Sstevel@tonic-gateWritten by Gurusamy Sarathy <F<gsar@ActiveState.com>>, with many 3651*0Sstevel@tonic-gatecontributions from The Perl Porters. 3652*0Sstevel@tonic-gate 3653*0Sstevel@tonic-gateSend omissions or corrections to <F<perlbug@perl.org>>. 3654*0Sstevel@tonic-gate 3655*0Sstevel@tonic-gate=cut 3656