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