xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/pod/perl56delta.pod (revision 0:68f95e015346)
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