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