xref: /openbsd-src/gnu/usr.bin/perl/cpan/Pod-Simple/t/perlfaq.pod (revision b39c515898423c8d899e35282f4b395f7cad3298)
1*b39c5158Smillert=head1 NAME
2*b39c5158Smillert
3*b39c5158Smillertperlfaq3 - Programming Tools ($Revision: 1.38 $, $Date: 1999/05/23 16:08:30 $)
4*b39c5158Smillert
5*b39c5158Smillert=head1 DESCRIPTION
6*b39c5158Smillert
7*b39c5158SmillertThis section of the FAQ answers questions related to programmer tools
8*b39c5158Smillertand programming support.
9*b39c5158Smillert
10*b39c5158Smillert=head2 How do I do (anything)?
11*b39c5158Smillert
12*b39c5158SmillertHave you looked at CPAN (see L<perlfaq2>)?  The chances are that
13*b39c5158Smillertsomeone has already written a module that can solve your problem.
14*b39c5158SmillertHave you read the appropriate man pages?  Here's a brief index:
15*b39c5158Smillert
16*b39c5158Smillert	Basics	        perldata, perlvar, perlsyn, perlop, perlsub
17*b39c5158Smillert	Execution	perlrun, perldebug
18*b39c5158Smillert	Functions	perlfunc
19*b39c5158Smillert	Objects		perlref, perlmod, perlobj, perltie
20*b39c5158Smillert	Data Structures	perlref, perllol, perldsc
21*b39c5158Smillert	Modules		perlmod, perlmodlib, perlsub
22*b39c5158Smillert	Regexes		perlre, perlfunc, perlop, perllocale
23*b39c5158Smillert	Moving to perl5	perltrap, perl
24*b39c5158Smillert	Linking w/C	perlxstut, perlxs, perlcall, perlguts, perlembed
25*b39c5158Smillert	Various 	http://www.perl.com/CPAN/doc/FMTEYEWTK/index.html
26*b39c5158Smillert			(not a man-page but still useful)
27*b39c5158Smillert
28*b39c5158SmillertA crude table of contents for the Perl man page set is found in L<perltoc>.
29*b39c5158Smillert
30*b39c5158Smillert=head2 How can I use Perl interactively?
31*b39c5158Smillert
32*b39c5158SmillertThe typical approach uses the Perl debugger, described in the
33*b39c5158Smillertperldebug(1) man page, on an ``empty'' program, like this:
34*b39c5158Smillert
35*b39c5158Smillert    perl -de 42
36*b39c5158Smillert
37*b39c5158SmillertNow just type in any legal Perl code, and it will be immediately
38*b39c5158Smillertevaluated.  You can also examine the symbol table, get stack
39*b39c5158Smillertbacktraces, check variable values, set breakpoints, and other
40*b39c5158Smillertoperations typically found in symbolic debuggers.
41*b39c5158Smillert
42*b39c5158Smillert=head2 Is there a Perl shell?
43*b39c5158Smillert
44*b39c5158SmillertIn general, no.  The Shell.pm module (distributed with Perl) makes
45*b39c5158SmillertPerl try commands which aren't part of the Perl language as shell
46*b39c5158Smillertcommands.  perlsh from the source distribution is simplistic and
47*b39c5158Smillertuninteresting, but may still be what you want.
48*b39c5158Smillert
49*b39c5158Smillert=head2 How do I debug my Perl programs?
50*b39c5158Smillert
51*b39c5158SmillertHave you tried C<use warnings> or used C<-w>?  They enable warnings
52*b39c5158Smillertto detect dubious practices.
53*b39c5158Smillert
54*b39c5158SmillertHave you tried C<use strict>?  It prevents you from using symbolic
55*b39c5158Smillertreferences, makes you predeclare any subroutines that you call as bare
56*b39c5158Smillertwords, and (probably most importantly) forces you to predeclare your
57*b39c5158Smillertvariables with C<my>, C<our>, or C<use vars>.
58*b39c5158Smillert
59*b39c5158SmillertDid you check the return values of each and every system call?  The operating
60*b39c5158Smillertsystem (and thus Perl) tells you whether they worked, and if not
61*b39c5158Smillertwhy.
62*b39c5158Smillert
63*b39c5158Smillert  open(FH, "> /etc/cantwrite")
64*b39c5158Smillert    or die "Couldn't write to /etc/cantwrite: $!\n";
65*b39c5158Smillert
66*b39c5158SmillertDid you read L<perltrap>?  It's full of gotchas for old and new Perl
67*b39c5158Smillertprogrammers and even has sections for those of you who are upgrading
68*b39c5158Smillertfrom languages like I<awk> and I<C>.
69*b39c5158Smillert
70*b39c5158SmillertHave you tried the Perl debugger, described in L<perldebug>?  You can
71*b39c5158Smillertstep through your program and see what it's doing and thus work out
72*b39c5158Smillertwhy what it's doing isn't what it should be doing.
73*b39c5158Smillert
74*b39c5158Smillert=head2 How do I profile my Perl programs?
75*b39c5158Smillert
76*b39c5158SmillertYou should get the Devel::DProf module from the standard distribution
77*b39c5158Smillert(or separately on CPAN) and also use Benchmark.pm from the standard
78*b39c5158Smillertdistribution.  The Benchmark module lets you time specific portions of
79*b39c5158Smillertyour code, while Devel::DProf gives detailed breakdowns of where your
80*b39c5158Smillertcode spends its time.
81*b39c5158Smillert
82*b39c5158SmillertHere's a sample use of Benchmark:
83*b39c5158Smillert
84*b39c5158Smillert  use Benchmark;
85*b39c5158Smillert
86*b39c5158Smillert  @junk = `cat /etc/motd`;
87*b39c5158Smillert  $count = 10_000;
88*b39c5158Smillert
89*b39c5158Smillert  timethese($count, {
90*b39c5158Smillert            'map' => sub { my @a = @junk;
91*b39c5158Smillert			   map { s/a/b/ } @a;
92*b39c5158Smillert			   return @a
93*b39c5158Smillert			 },
94*b39c5158Smillert            'for' => sub { my @a = @junk;
95*b39c5158Smillert			   local $_;
96*b39c5158Smillert			   for (@a) { s/a/b/ };
97*b39c5158Smillert			   return @a },
98*b39c5158Smillert           });
99*b39c5158Smillert
100*b39c5158SmillertThis is what it prints (on one machine--your results will be dependent
101*b39c5158Smillerton your hardware, operating system, and the load on your machine):
102*b39c5158Smillert
103*b39c5158Smillert  Benchmark: timing 10000 iterations of for, map...
104*b39c5158Smillert         for:  4 secs ( 3.97 usr  0.01 sys =  3.98 cpu)
105*b39c5158Smillert         map:  6 secs ( 4.97 usr  0.00 sys =  4.97 cpu)
106*b39c5158Smillert
107*b39c5158SmillertBe aware that a good benchmark is very hard to write.  It only tests the
108*b39c5158Smillertdata you give it and proves little about the differing complexities
109*b39c5158Smillertof contrasting algorithms.
110*b39c5158Smillert
111*b39c5158Smillert=head2 How do I cross-reference my Perl programs?
112*b39c5158Smillert
113*b39c5158SmillertThe B::Xref module, shipped with the new, alpha-release Perl compiler
114*b39c5158Smillert(not the general distribution prior to the 5.005 release), can be used
115*b39c5158Smillertto generate cross-reference reports for Perl programs.
116*b39c5158Smillert
117*b39c5158Smillert    perl -MO=Xref[,OPTIONS] scriptname.plx
118*b39c5158Smillert
119*b39c5158Smillert=head2 Is there a pretty-printer (formatter) for Perl?
120*b39c5158Smillert
121*b39c5158SmillertThere is no program that will reformat Perl as much as indent(1) does
122*b39c5158Smillertfor C.  The complex feedback between the scanner and the parser (this
123*b39c5158Smillertfeedback is what confuses the vgrind and emacs programs) makes it
124*b39c5158Smillertchallenging at best to write a stand-alone Perl parser.
125*b39c5158Smillert
126*b39c5158SmillertOf course, if you simply follow the guidelines in L<perlstyle>, you
127*b39c5158Smillertshouldn't need to reformat.  The habit of formatting your code as you
128*b39c5158Smillertwrite it will help prevent bugs.  Your editor can and should help you
129*b39c5158Smillertwith this.  The perl-mode or newer cperl-mode for emacs can provide
130*b39c5158Smillertremarkable amounts of help with most (but not all) code, and even less
131*b39c5158Smillertprogrammable editors can provide significant assistance.  Tom swears
132*b39c5158Smillertby the following settings in vi and its clones:
133*b39c5158Smillert
134*b39c5158Smillert    set ai sw=4
135*b39c5158Smillert    map! ^O {^M}^[O^T
136*b39c5158Smillert
137*b39c5158SmillertNow put that in your F<.exrc> file (replacing the caret characters
138*b39c5158Smillertwith control characters) and away you go.  In insert mode, ^T is
139*b39c5158Smillertfor indenting, ^D is for undenting, and ^O is for blockdenting--
140*b39c5158Smillertas it were.  If you haven't used the last one, you're missing
141*b39c5158Smillerta lot.  A more complete example, with comments, can be found at
142*b39c5158Smillerthttp://www.perl.com/CPAN-local/authors/id/TOMC/scripts/toms.exrc.gz
143*b39c5158Smillert
144*b39c5158SmillertIf you are used to using the I<vgrind> program for printing out nice code
145*b39c5158Smillertto a laser printer, you can take a stab at this using
146*b39c5158Smillerthttp://www.perl.com/CPAN/doc/misc/tips/working.vgrind.entry, but the
147*b39c5158Smillertresults are not particularly satisfying for sophisticated code.
148*b39c5158Smillert
149*b39c5158SmillertThe a2ps at http://www.infres.enst.fr/%7Edemaille/a2ps/ does lots of things
150*b39c5158Smillertrelated to generating nicely printed output of documents.
151*b39c5158Smillert
152*b39c5158Smillert=head2 Is there a ctags for Perl?
153*b39c5158Smillert
154*b39c5158SmillertThere's a simple one at
155*b39c5158Smillerthttp://www.perl.com/CPAN/authors/id/TOMC/scripts/ptags.gz which may do
156*b39c5158Smillertthe trick.  And if not, it's easy to hack into what you want.
157*b39c5158Smillert
158*b39c5158Smillert=head2 Is there an IDE or Windows Perl Editor?
159*b39c5158Smillert
160*b39c5158SmillertPerl programs are just plain text, so any editor will do.
161*b39c5158Smillert
162*b39c5158SmillertIf you're on Unix, you already have an IDE--Unix itself.  The UNIX
163*b39c5158Smillertphilosophy is the philosophy of several small tools that each do one
164*b39c5158Smillertthing and do it well.  It's like a carpenter's toolbox.
165*b39c5158Smillert
166*b39c5158SmillertIf you want a Windows IDE, check the following:
167*b39c5158Smillert
168*b39c5158Smillert=over 4
169*b39c5158Smillert
170*b39c5158Smillert=item CodeMagicCD
171*b39c5158Smillert
172*b39c5158Smillerthttp://www.codemagiccd.com/
173*b39c5158Smillert
174*b39c5158Smillert=item Komodo
175*b39c5158Smillert
176*b39c5158SmillertActiveState's cross-platform, multi-language IDE has Perl support,
177*b39c5158Smillertincluding a regular expression debugger and remote debugging
178*b39c5158Smillert(http://www.ActiveState.com/Products/Komodo/index.html).
179*b39c5158Smillert(Visual Perl, a Visual Studio.NET plug-in is currently (early 2001)
180*b39c5158Smillertin beta (http://www.ActiveState.com/Products/VisualPerl/index.html)).
181*b39c5158Smillert
182*b39c5158Smillert=item The Object System
183*b39c5158Smillert
184*b39c5158Smillert(http://www.castlelink.co.uk/object_system/) is a Perl web
185*b39c5158Smillertapplications development IDE.
186*b39c5158Smillert
187*b39c5158Smillert=item PerlBuilder
188*b39c5158Smillert
189*b39c5158Smillert(http://www.solutionsoft.com/perl.htm) is an integrated development
190*b39c5158Smillertenvironment for Windows that supports Perl development.
191*b39c5158Smillert
192*b39c5158Smillert=item Perl code magic
193*b39c5158Smillert
194*b39c5158Smillert(http://www.petes-place.com/codemagic.html).
195*b39c5158Smillert
196*b39c5158Smillert=item visiPerl+
197*b39c5158Smillert
198*b39c5158Smillerthttp://helpconsulting.net/visiperl/, from Help Consulting.
199*b39c5158Smillert
200*b39c5158Smillert=back
201*b39c5158Smillert
202*b39c5158SmillertFor editors: if you're on Unix you probably have vi or a vi clone already,
203*b39c5158Smillertand possibly an emacs too, so you may not need to download anything.
204*b39c5158SmillertIn any emacs the cperl-mode (M-x cperl-mode) gives you perhaps the
205*b39c5158Smillertbest available Perl editing mode in any editor.
206*b39c5158Smillert
207*b39c5158SmillertFor Windows editors: you can download an Emacs
208*b39c5158Smillert
209*b39c5158Smillert=over 4
210*b39c5158Smillert
211*b39c5158Smillert=item GNU Emacs
212*b39c5158Smillert
213*b39c5158Smillerthttp://www.gnu.org/software/emacs/windows/ntemacs.html
214*b39c5158Smillert
215*b39c5158Smillert=item MicroEMACS
216*b39c5158Smillert
217*b39c5158Smillerthttp://members.nbci.com/uemacs/
218*b39c5158Smillert
219*b39c5158Smillert=item XEmacs
220*b39c5158Smillert
221*b39c5158Smillerthttp://www.xemacs.org/Download/index.html
222*b39c5158Smillert
223*b39c5158Smillert=back
224*b39c5158Smillert
225*b39c5158Smillertor a vi clone such as
226*b39c5158Smillert
227*b39c5158Smillert=over 4
228*b39c5158Smillert
229*b39c5158Smillert=item Elvis
230*b39c5158Smillert
231*b39c5158Smillertftp://ftp.cs.pdx.edu/pub/elvis/ http://www.fh-wedel.de/elvis/
232*b39c5158Smillert
233*b39c5158Smillert=item Vile
234*b39c5158Smillert
235*b39c5158Smillerthttp://vile.cx/
236*b39c5158Smillert
237*b39c5158Smillert=item Vim
238*b39c5158Smillert
239*b39c5158Smillerthttp://www.vim.org/
240*b39c5158Smillert
241*b39c5158Smillertwin32: http://www.cs.vu.nl/%7Etmgil/vi.html
242*b39c5158Smillert
243*b39c5158Smillert=back
244*b39c5158Smillert
245*b39c5158SmillertFor vi lovers in general, Windows or elsewhere:
246*b39c5158Smillerthttp://www.thomer.com/thomer/vi/vi.html.
247*b39c5158Smillert
248*b39c5158Smillertnvi (http://www.bostic.com/vi/, available from CPAN in src/misc/) is
249*b39c5158Smillertyet another vi clone, unfortunately not available for Windows, but in
250*b39c5158SmillertUNIX platforms you might be interested in trying it out, firstly because
251*b39c5158Smillertstrictly speaking it is not a vi clone, it is the real vi, or the new
252*b39c5158Smillertincarnation of it, and secondly because you can embed Perl inside it
253*b39c5158Smillertto use Perl as the scripting language.  nvi is not alone in this,
254*b39c5158Smillertthough: at least also vim and vile offer an embedded Perl.
255*b39c5158Smillert
256*b39c5158SmillertThe following are Win32 multilanguage editor/IDESs that support Perl:
257*b39c5158Smillert
258*b39c5158Smillert=over 4
259*b39c5158Smillert
260*b39c5158Smillert=item Codewright
261*b39c5158Smillert
262*b39c5158Smillerthttp://www.starbase.com/
263*b39c5158Smillert
264*b39c5158Smillert=item MultiEdit
265*b39c5158Smillert
266*b39c5158Smillerthttp://www.MultiEdit.com/
267*b39c5158Smillert
268*b39c5158Smillert=item SlickEdit
269*b39c5158Smillert
270*b39c5158Smillerthttp://www.slickedit.com/
271*b39c5158Smillert
272*b39c5158Smillert=back
273*b39c5158Smillert
274*b39c5158SmillertThere is also a toyedit Text widget based editor written in Perl
275*b39c5158Smillertthat is distributed with the Tk module on CPAN.  The ptkdb
276*b39c5158Smillert(http://world.std.com/~aep/ptkdb/) is a Perl/tk based debugger that
277*b39c5158Smillertacts as a development environment of sorts.  Perl Composer
278*b39c5158Smillert(http://perlcomposer.sourceforge.net/vperl.html) is an IDE for Perl/Tk
279*b39c5158SmillertGUI creation.
280*b39c5158Smillert
281*b39c5158SmillertIn addition to an editor/IDE you might be interested in a more
282*b39c5158Smillertpowerful shell environment for Win32.  Your options include
283*b39c5158Smillert
284*b39c5158Smillert=over 4
285*b39c5158Smillert
286*b39c5158Smillert=item Bash
287*b39c5158Smillert
288*b39c5158Smillertfrom the Cygwin package (http://sources.redhat.com/cygwin/)
289*b39c5158Smillert
290*b39c5158Smillert=item Ksh
291*b39c5158Smillert
292*b39c5158Smillertfrom the MKS Toolkit (http://www.mks.com/), or the Bourne shell of
293*b39c5158Smillertthe U/WIN environment (http://www.research.att.com/sw/tools/uwin/)
294*b39c5158Smillert
295*b39c5158Smillert=item Tcsh
296*b39c5158Smillert
297*b39c5158Smillertftp://ftp.astron.com/pub/tcsh/, see also
298*b39c5158Smillerthttp://www.primate.wisc.edu/software/csh-tcsh-book/
299*b39c5158Smillert
300*b39c5158Smillert=item Zsh
301*b39c5158Smillert
302*b39c5158Smillertftp://ftp.blarg.net/users/amol/zsh/, see also http://www.zsh.org/
303*b39c5158Smillert
304*b39c5158Smillert=back
305*b39c5158Smillert
306*b39c5158SmillertMKS and U/WIN are commercial (U/WIN is free for educational and
307*b39c5158Smillertresearch purposes), Cygwin is covered by the GNU Public License (but
308*b39c5158Smillertthat shouldn't matter for Perl use).  The Cygwin, MKS, and U/WIN all
309*b39c5158Smillertcontain (in addition to the shells) a comprehensive set of standard
310*b39c5158SmillertUNIX toolkit utilities.
311*b39c5158Smillert
312*b39c5158SmillertIf you're transferring text files between Unix and Windows using FTP
313*b39c5158Smillertbe sure to transfer them in ASCII mode so the ends of lines are
314*b39c5158Smillertappropriately converted.
315*b39c5158Smillert
316*b39c5158SmillertOn Mac OS the MacPerl Application comes with a simple 32k text editor
317*b39c5158Smillertthat behaves like a rudimentary IDE.  In contrast to the MacPerl Application
318*b39c5158Smillertthe MPW Perl tool can make use of the MPW Shell itself as an editor (with
319*b39c5158Smillertno 32k limit).
320*b39c5158Smillert
321*b39c5158Smillert=over 4
322*b39c5158Smillert
323*b39c5158Smillert=item BBEdit and BBEdit Lite
324*b39c5158Smillert
325*b39c5158Smillertare text editors for Mac OS that have a Perl sensitivity mode
326*b39c5158Smillert(http://web.barebones.com/).
327*b39c5158Smillert
328*b39c5158Smillert=item Alpha
329*b39c5158Smillert
330*b39c5158Smillertis an editor, written and extensible in Tcl, that nonetheless has
331*b39c5158Smillertbuilt in support for several popular markup and programming languages
332*b39c5158Smillertincluding Perl and HTML (http://alpha.olm.net/).
333*b39c5158Smillert
334*b39c5158Smillert=back
335*b39c5158Smillert
336*b39c5158SmillertPepper and Pe are programming language sensitive text editors for Mac
337*b39c5158SmillertOS X and BeOS respectively (http://www.hekkelman.com/).
338*b39c5158Smillert
339*b39c5158Smillert=head2 Where can I get Perl macros for vi?
340*b39c5158Smillert
341*b39c5158SmillertFor a complete version of Tom Christiansen's vi configuration file,
342*b39c5158Smillertsee http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/toms.exrc.gz ,
343*b39c5158Smillertthe standard benchmark file for vi emulators.  The file runs best with nvi,
344*b39c5158Smillertthe current version of vi out of Berkeley, which incidentally can be built
345*b39c5158Smillertwith an embedded Perl interpreter--see http://www.perl.com/CPAN/src/misc.
346*b39c5158Smillert
347*b39c5158Smillert=head2 Where can I get perl-mode for emacs?
348*b39c5158Smillert
349*b39c5158SmillertSince Emacs version 19 patchlevel 22 or so, there have been both a
350*b39c5158Smillertperl-mode.el and support for the Perl debugger built in.  These should
351*b39c5158Smillertcome with the standard Emacs 19 distribution.
352*b39c5158Smillert
353*b39c5158SmillertIn the Perl source directory, you'll find a directory called "emacs",
354*b39c5158Smillertwhich contains a cperl-mode that color-codes keywords, provides
355*b39c5158Smillertcontext-sensitive help, and other nifty things.
356*b39c5158Smillert
357*b39c5158SmillertNote that the perl-mode of emacs will have fits with C<"main'foo">
358*b39c5158Smillert(single quote), and mess up the indentation and highlighting.  You
359*b39c5158Smillertare probably using C<"main::foo"> in new Perl code anyway, so this
360*b39c5158Smillertshouldn't be an issue.
361*b39c5158Smillert
362*b39c5158Smillert=head2 How can I use curses with Perl?
363*b39c5158Smillert
364*b39c5158SmillertThe Curses module from CPAN provides a dynamically loadable object
365*b39c5158Smillertmodule interface to a curses library.  A small demo can be found at the
366*b39c5158Smillertdirectory http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/rep;
367*b39c5158Smillertthis program repeats a command and updates the screen as needed, rendering
368*b39c5158SmillertB<rep ps axu> similar to B<top>.
369*b39c5158Smillert
370*b39c5158Smillert=head2 How can I use X or Tk with Perl?
371*b39c5158Smillert
372*b39c5158SmillertTk is a completely Perl-based, object-oriented interface to the Tk toolkit
373*b39c5158Smillertthat doesn't force you to use Tcl just to get at Tk.  Sx is an interface
374*b39c5158Smillertto the Athena Widget set.  Both are available from CPAN.  See the
375*b39c5158Smillertdirectory http://www.perl.com/CPAN/modules/by-category/08_User_Interfaces/
376*b39c5158Smillert
377*b39c5158SmillertInvaluable for Perl/Tk programming are the Perl/Tk FAQ at
378*b39c5158Smillerthttp://w4.lns.cornell.edu/%7Epvhp/ptk/ptkTOC.html , the Perl/Tk Reference
379*b39c5158SmillertGuide available at
380*b39c5158Smillerthttp://www.perl.com/CPAN-local/authors/Stephen_O_Lidie/ , and the
381*b39c5158Smillertonline manpages at
382*b39c5158Smillerthttp://www-users.cs.umn.edu/%7Eamundson/perl/perltk/toc.html .
383*b39c5158Smillert
384*b39c5158Smillert=head2 How can I generate simple menus without using CGI or Tk?
385*b39c5158Smillert
386*b39c5158SmillertThe http://www.perl.com/CPAN/authors/id/SKUNZ/perlmenu.v4.0.tar.gz
387*b39c5158Smillertmodule, which is curses-based, can help with this.
388*b39c5158Smillert
389*b39c5158Smillert=head2 What is undump?
390*b39c5158Smillert
391*b39c5158SmillertSee the next question on ``How can I make my Perl program run faster?''
392*b39c5158Smillert
393*b39c5158Smillert=head2 How can I make my Perl program run faster?
394*b39c5158Smillert
395*b39c5158SmillertThe best way to do this is to come up with a better algorithm.  This
396*b39c5158Smillertcan often make a dramatic difference.  Jon Bentley's book
397*b39c5158Smillert``Programming Pearls'' (that's not a misspelling!)  has some good tips
398*b39c5158Smillerton optimization, too.  Advice on benchmarking boils down to: benchmark
399*b39c5158Smillertand profile to make sure you're optimizing the right part, look for
400*b39c5158Smillertbetter algorithms instead of microtuning your code, and when all else
401*b39c5158Smillertfails consider just buying faster hardware.
402*b39c5158Smillert
403*b39c5158SmillertA different approach is to autoload seldom-used Perl code.  See the
404*b39c5158SmillertAutoSplit and AutoLoader modules in the standard distribution for
405*b39c5158Smillertthat.  Or you could locate the bottleneck and think about writing just
406*b39c5158Smillertthat part in C, the way we used to take bottlenecks in C code and
407*b39c5158Smillertwrite them in assembler.  Similar to rewriting in C,
408*b39c5158Smillertmodules that have critical sections can be written in C (for instance, the
409*b39c5158SmillertPDL module from CPAN).
410*b39c5158Smillert
411*b39c5158SmillertIn some cases, it may be worth it to use the backend compiler to
412*b39c5158Smillertproduce byte code (saving compilation time) or compile into C, which
413*b39c5158Smillertwill certainly save compilation time and sometimes a small amount (but
414*b39c5158Smillertnot much) execution time.  See the question about compiling your Perl
415*b39c5158Smillertprograms for more on the compiler--the wins aren't as obvious as you'd
416*b39c5158Smillerthope.
417*b39c5158Smillert
418*b39c5158SmillertIf you're currently linking your perl executable to a shared I<libc.so>,
419*b39c5158Smillertyou can often gain a 10-25% performance benefit by rebuilding it to
420*b39c5158Smillertlink with a static libc.a instead.  This will make a bigger perl
421*b39c5158Smillertexecutable, but your Perl programs (and programmers) may thank you for
422*b39c5158Smillertit.  See the F<INSTALL> file in the source distribution for more
423*b39c5158Smillertinformation.
424*b39c5158Smillert
425*b39c5158SmillertUnsubstantiated reports allege that Perl interpreters that use sfio
426*b39c5158Smillertoutperform those that don't (for I/O intensive applications).  To try
427*b39c5158Smillertthis, see the F<INSTALL> file in the source distribution, especially
428*b39c5158Smillertthe ``Selecting File I/O mechanisms'' section.
429*b39c5158Smillert
430*b39c5158SmillertThe undump program was an old attempt to speed up your Perl program
431*b39c5158Smillertby storing the already-compiled form to disk.  This is no longer
432*b39c5158Smillerta viable option, as it only worked on a few architectures, and
433*b39c5158Smillertwasn't a good solution anyway.
434*b39c5158Smillert
435*b39c5158Smillert=head2 How can I make my Perl program take less memory?
436*b39c5158Smillert
437*b39c5158SmillertWhen it comes to time-space tradeoffs, Perl nearly always prefers to
438*b39c5158Smillertthrow memory at a problem.  Scalars in Perl use more memory than
439*b39c5158Smillertstrings in C, arrays take more than that, and hashes use even more.  While
440*b39c5158Smillertthere's still a lot to be done, recent releases have been addressing
441*b39c5158Smillertthese issues.  For example, as of 5.004, duplicate hash keys are
442*b39c5158Smillertshared amongst all hashes using them, so require no reallocation.
443*b39c5158Smillert
444*b39c5158SmillertIn some cases, using substr() or vec() to simulate arrays can be
445*b39c5158Smillerthighly beneficial.  For example, an array of a thousand booleans will
446*b39c5158Smillerttake at least 20,000 bytes of space, but it can be turned into one
447*b39c5158Smillert125-byte bit vector--a considerable memory savings.  The standard
448*b39c5158SmillertTie::SubstrHash module can also help for certain types of data
449*b39c5158Smillertstructure.  If you're working with specialist data structures
450*b39c5158Smillert(matrices, for instance) modules that implement these in C may use
451*b39c5158Smillertless memory than equivalent Perl modules.
452*b39c5158Smillert
453*b39c5158SmillertAnother thing to try is learning whether your Perl was compiled with
454*b39c5158Smillertthe system malloc or with Perl's builtin malloc.  Whichever one it
455*b39c5158Smillertis, try using the other one and see whether this makes a difference.
456*b39c5158SmillertInformation about malloc is in the F<INSTALL> file in the source
457*b39c5158Smillertdistribution.  You can find out whether you are using perl's malloc by
458*b39c5158Smillerttyping C<perl -V:usemymalloc>.
459*b39c5158Smillert
460*b39c5158Smillert=head2 Is it unsafe to return a pointer to local data?
461*b39c5158Smillert
462*b39c5158SmillertNo, Perl's garbage collection system takes care of this.
463*b39c5158Smillert
464*b39c5158Smillert    sub makeone {
465*b39c5158Smillert	my @a = ( 1 .. 10 );
466*b39c5158Smillert	return \@a;
467*b39c5158Smillert    }
468*b39c5158Smillert
469*b39c5158Smillert    for $i ( 1 .. 10 ) {
470*b39c5158Smillert        push @many, makeone();
471*b39c5158Smillert    }
472*b39c5158Smillert
473*b39c5158Smillert    print $many[4][5], "\n";
474*b39c5158Smillert
475*b39c5158Smillert    print "@many\n";
476*b39c5158Smillert
477*b39c5158Smillert=head2 How can I free an array or hash so my program shrinks?
478*b39c5158Smillert
479*b39c5158SmillertYou can't.  On most operating systems, memory allocated to a program
480*b39c5158Smillertcan never be returned to the system.  That's why long-running programs
481*b39c5158Smillertsometimes re-exec themselves.  Some operating systems (notably,
482*b39c5158SmillertFreeBSD and Linux) allegedly reclaim large chunks of memory that is no
483*b39c5158Smillertlonger used, but it doesn't appear to happen with Perl (yet).  The Mac
484*b39c5158Smillertappears to be the only platform that will reliably (albeit, slowly)
485*b39c5158Smillertreturn memory to the OS.
486*b39c5158Smillert
487*b39c5158SmillertWe've had reports that on Linux (Redhat 5.1) on Intel, C<undef
488*b39c5158Smillert$scalar> will return memory to the system, while on Solaris 2.6 it
489*b39c5158Smillertwon't.  In general, try it yourself and see.
490*b39c5158Smillert
491*b39c5158SmillertHowever, judicious use of my() on your variables will help make sure
492*b39c5158Smillertthat they go out of scope so that Perl can free up that space for
493*b39c5158Smillertuse in other parts of your program.  A global variable, of course, never
494*b39c5158Smillertgoes out of scope, so you can't get its space automatically reclaimed,
495*b39c5158Smillertalthough undef()ing and/or delete()ing it will achieve the same effect.
496*b39c5158SmillertIn general, memory allocation and de-allocation isn't something you can
497*b39c5158Smillertor should be worrying about much in Perl, but even this capability
498*b39c5158Smillert(preallocation of data types) is in the works.
499*b39c5158Smillert
500*b39c5158Smillert=head2 How can I make my CGI script more efficient?
501*b39c5158Smillert
502*b39c5158SmillertBeyond the normal measures described to make general Perl programs
503*b39c5158Smillertfaster or smaller, a CGI program has additional issues.  It may be run
504*b39c5158Smillertseveral times per second.  Given that each time it runs it will need
505*b39c5158Smillertto be re-compiled and will often allocate a megabyte or more of system
506*b39c5158Smillertmemory, this can be a killer.  Compiling into C B<isn't going to help
507*b39c5158Smillertyou> because the process start-up overhead is where the bottleneck is.
508*b39c5158Smillert
509*b39c5158SmillertThere are two popular ways to avoid this overhead.  One solution
510*b39c5158Smillertinvolves running the Apache HTTP server (available from
511*b39c5158Smillerthttp://www.apache.org/) with either of the mod_perl or mod_fastcgi
512*b39c5158Smillertplugin modules.
513*b39c5158Smillert
514*b39c5158SmillertWith mod_perl and the Apache::Registry module (distributed with
515*b39c5158Smillertmod_perl), httpd will run with an embedded Perl interpreter which
516*b39c5158Smillertpre-compiles your script and then executes it within the same address
517*b39c5158Smillertspace without forking.  The Apache extension also gives Perl access to
518*b39c5158Smillertthe internal server API, so modules written in Perl can do just about
519*b39c5158Smillertanything a module written in C can.  For more on mod_perl, see
520*b39c5158Smillerthttp://perl.apache.org/
521*b39c5158Smillert
522*b39c5158SmillertWith the FCGI module (from CPAN) and the mod_fastcgi
523*b39c5158Smillertmodule (available from http://www.fastcgi.com/) each of your Perl
524*b39c5158Smillertprograms becomes a permanent CGI daemon process.
525*b39c5158Smillert
526*b39c5158SmillertBoth of these solutions can have far-reaching effects on your system
527*b39c5158Smillertand on the way you write your CGI programs, so investigate them with
528*b39c5158Smillertcare.
529*b39c5158Smillert
530*b39c5158SmillertSee http://www.perl.com/CPAN/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ .
531*b39c5158Smillert
532*b39c5158SmillertA non-free, commercial product, ``The Velocity Engine for Perl'',
533*b39c5158Smillert(http://www.binevolve.com/ or http://www.binevolve.com/velocigen/ )
534*b39c5158Smillertmight also be worth looking at.  It will allow you to increase the
535*b39c5158Smillertperformance of your Perl programs, running programs up to 25 times
536*b39c5158Smillertfaster than normal CGI Perl when running in persistent Perl mode or 4
537*b39c5158Smillertto 5 times faster without any modification to your existing CGI
538*b39c5158Smillertprograms. Fully functional evaluation copies are available from the
539*b39c5158Smillertweb site.
540*b39c5158Smillert
541*b39c5158Smillert=head2 How can I hide the source for my Perl program?
542*b39c5158Smillert
543*b39c5158SmillertDelete it. :-) Seriously, there are a number of (mostly
544*b39c5158Smillertunsatisfactory) solutions with varying levels of ``security''.
545*b39c5158Smillert
546*b39c5158SmillertFirst of all, however, you I<can't> take away read permission, because
547*b39c5158Smillertthe source code has to be readable in order to be compiled and
548*b39c5158Smillertinterpreted.  (That doesn't mean that a CGI script's source is
549*b39c5158Smillertreadable by people on the web, though--only by people with access to
550*b39c5158Smillertthe filesystem.)  So you have to leave the permissions at the socially
551*b39c5158Smillertfriendly 0755 level.
552*b39c5158Smillert
553*b39c5158SmillertSome people regard this as a security problem.  If your program does
554*b39c5158Smillertinsecure things and relies on people not knowing how to exploit those
555*b39c5158Smillertinsecurities, it is not secure.  It is often possible for someone to
556*b39c5158Smillertdetermine the insecure things and exploit them without viewing the
557*b39c5158Smillertsource.  Security through obscurity, the name for hiding your bugs
558*b39c5158Smillertinstead of fixing them, is little security indeed.
559*b39c5158Smillert
560*b39c5158SmillertYou can try using encryption via source filters (Filter::* from CPAN),
561*b39c5158Smillertbut any decent programmer will be able to decrypt it.  You can try using
562*b39c5158Smillertthe byte code compiler and interpreter described below, but the curious
563*b39c5158Smillertmight still be able to de-compile it.  You can try using the native-code
564*b39c5158Smillertcompiler described below, but crackers might be able to disassemble it.
565*b39c5158SmillertThese pose varying degrees of difficulty to people wanting to get at
566*b39c5158Smillertyour code, but none can definitively conceal it (true of every
567*b39c5158Smillertlanguage, not just Perl).
568*b39c5158Smillert
569*b39c5158SmillertIf you're concerned about people profiting from your code, then the
570*b39c5158Smillertbottom line is that nothing but a restrictive license will give you
571*b39c5158Smillertlegal security.  License your software and pepper it with threatening
572*b39c5158Smillertstatements like ``This is unpublished proprietary software of XYZ Corp.
573*b39c5158SmillertYour access to it does not give you permission to use it blah blah
574*b39c5158Smillertblah.''  We are not lawyers, of course, so you should see a lawyer if
575*b39c5158Smillertyou want to be sure your license's wording will stand up in court.
576*b39c5158Smillert
577*b39c5158Smillert=head2 How can I compile my Perl program into byte code or C?
578*b39c5158Smillert
579*b39c5158SmillertMalcolm Beattie has written a multifunction backend compiler,
580*b39c5158Smillertavailable from CPAN, that can do both these things.  It is included
581*b39c5158Smillertin the perl5.005 release, but is still considered experimental.
582*b39c5158SmillertThis means it's fun to play with if you're a programmer but not
583*b39c5158Smillertreally for people looking for turn-key solutions.
584*b39c5158Smillert
585*b39c5158SmillertMerely compiling into C does not in and of itself guarantee that your
586*b39c5158Smillertcode will run very much faster.  That's because except for lucky cases
587*b39c5158Smillertwhere a lot of native type inferencing is possible, the normal Perl
588*b39c5158Smillertrun-time system is still present and so your program will take just as
589*b39c5158Smillertlong to run and be just as big.  Most programs save little more than
590*b39c5158Smillertcompilation time, leaving execution no more than 10-30% faster.  A few
591*b39c5158Smillertrare programs actually benefit significantly (even running several times
592*b39c5158Smillertfaster), but this takes some tweaking of your code.
593*b39c5158Smillert
594*b39c5158SmillertYou'll probably be astonished to learn that the current version of the
595*b39c5158Smillertcompiler generates a compiled form of your script whose executable is
596*b39c5158Smillertjust as big as the original perl executable, and then some.  That's
597*b39c5158Smillertbecause as currently written, all programs are prepared for a full
598*b39c5158Smillerteval() statement.  You can tremendously reduce this cost by building a
599*b39c5158Smillertshared I<libperl.so> library and linking against that.  See the
600*b39c5158SmillertF<INSTALL> podfile in the Perl source distribution for details.  If
601*b39c5158Smillertyou link your main perl binary with this, it will make it minuscule.
602*b39c5158SmillertFor example, on one author's system, F</usr/bin/perl> is only 11k in
603*b39c5158Smillertsize!
604*b39c5158Smillert
605*b39c5158SmillertIn general, the compiler will do nothing to make a Perl program smaller,
606*b39c5158Smillertfaster, more portable, or more secure.  In fact, it can make your
607*b39c5158Smillertsituation worse.  The executable will be bigger, your VM system may take
608*b39c5158Smillertlonger to load the whole thing, the binary is fragile and hard to fix,
609*b39c5158Smillertand compilation never stopped software piracy in the form of crackers,
610*b39c5158Smillertviruses, or bootleggers.  The real advantage of the compiler is merely
611*b39c5158Smillertpackaging, and once you see the size of what it makes (well, unless
612*b39c5158Smillertyou use a shared I<libperl.so>), you'll probably want a complete
613*b39c5158SmillertPerl install anyway.
614*b39c5158Smillert
615*b39c5158Smillert=head2 How can I compile Perl into Java?
616*b39c5158Smillert
617*b39c5158SmillertYou can also integrate Java and Perl with the
618*b39c5158SmillertPerl Resource Kit from O'Reilly and Associates.  See
619*b39c5158Smillerthttp://www.oreilly.com/catalog/prkunix/ .
620*b39c5158Smillert
621*b39c5158SmillertPerl 5.6 comes with Java Perl Lingo, or JPL.  JPL, still in
622*b39c5158Smillertdevelopment, allows Perl code to be called from Java.  See jpl/README
623*b39c5158Smillertin the Perl source tree.
624*b39c5158Smillert
625*b39c5158Smillert=head2 How can I get C<#!perl> to work on [MS-DOS,NT,...]?
626*b39c5158Smillert
627*b39c5158SmillertFor OS/2 just use
628*b39c5158Smillert
629*b39c5158Smillert    extproc perl -S -your_switches
630*b39c5158Smillert
631*b39c5158Smillertas the first line in C<*.cmd> file (C<-S> due to a bug in cmd.exe's
632*b39c5158Smillert`extproc' handling).  For DOS one should first invent a corresponding
633*b39c5158Smillertbatch file and codify it in C<ALTERNATIVE_SHEBANG> (see the
634*b39c5158SmillertF<INSTALL> file in the source distribution for more information).
635*b39c5158Smillert
636*b39c5158SmillertThe Win95/NT installation, when using the ActiveState port of Perl,
637*b39c5158Smillertwill modify the Registry to associate the C<.pl> extension with the
638*b39c5158Smillertperl interpreter.  If you install another port, perhaps even building
639*b39c5158Smillertyour own Win95/NT Perl from the standard sources by using a Windows port
640*b39c5158Smillertof gcc (e.g., with cygwin or mingw32), then you'll have to modify
641*b39c5158Smillertthe Registry yourself.  In addition to associating C<.pl> with the
642*b39c5158Smillertinterpreter, NT people can use: C<SET PATHEXT=%PATHEXT%;.PL> to let them
643*b39c5158Smillertrun the program C<install-linux.pl> merely by typing C<install-linux>.
644*b39c5158Smillert
645*b39c5158SmillertMacintosh Perl programs will have the appropriate Creator and
646*b39c5158SmillertType, so that double-clicking them will invoke the Perl application.
647*b39c5158Smillert
648*b39c5158SmillertI<IMPORTANT!>: Whatever you do, PLEASE don't get frustrated, and just
649*b39c5158Smillertthrow the perl interpreter into your cgi-bin directory, in order to
650*b39c5158Smillertget your programs working for a web server.  This is an EXTREMELY big
651*b39c5158Smillertsecurity risk.  Take the time to figure out how to do it correctly.
652*b39c5158Smillert
653*b39c5158Smillert=head2 Can I write useful Perl programs on the command line?
654*b39c5158Smillert
655*b39c5158SmillertYes.  Read L<perlrun> for more information.  Some examples follow.
656*b39c5158Smillert(These assume standard Unix shell quoting rules.)
657*b39c5158Smillert
658*b39c5158Smillert    # sum first and last fields
659*b39c5158Smillert    perl -lane 'print $F[0] + $F[-1]' *
660*b39c5158Smillert
661*b39c5158Smillert    # identify text files
662*b39c5158Smillert    perl -le 'for(@ARGV) {print if -f && -T _}' *
663*b39c5158Smillert
664*b39c5158Smillert    # remove (most) comments from C program
665*b39c5158Smillert    perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
666*b39c5158Smillert
667*b39c5158Smillert    # make file a month younger than today, defeating reaper daemons
668*b39c5158Smillert    perl -e '$X=24*60*60; utime(time(),time() + 30 * $X,@ARGV)' *
669*b39c5158Smillert
670*b39c5158Smillert    # find first unused uid
671*b39c5158Smillert    perl -le '$i++ while getpwuid($i); print $i'
672*b39c5158Smillert
673*b39c5158Smillert    # display reasonable manpath
674*b39c5158Smillert    echo $PATH | perl -nl -072 -e '
675*b39c5158Smillert	s![^/+]*$!man!&&-d&&!$s{$_}++&&push@m,$_;END{print"@m"}'
676*b39c5158Smillert
677*b39c5158SmillertOK, the last one was actually an Obfuscated Perl Contest entry. :-)
678*b39c5158Smillert
679*b39c5158Smillert=head2 Why don't Perl one-liners work on my DOS/Mac/VMS system?
680*b39c5158Smillert
681*b39c5158SmillertThe problem is usually that the command interpreters on those systems
682*b39c5158Smillerthave rather different ideas about quoting than the Unix shells under
683*b39c5158Smillertwhich the one-liners were created.  On some systems, you may have to
684*b39c5158Smillertchange single-quotes to double ones, which you must I<NOT> do on Unix
685*b39c5158Smillertor Plan9 systems.  You might also have to change a single % to a %%.
686*b39c5158Smillert
687*b39c5158SmillertFor example:
688*b39c5158Smillert
689*b39c5158Smillert    # Unix
690*b39c5158Smillert    perl -e 'print "Hello world\n"'
691*b39c5158Smillert
692*b39c5158Smillert    # DOS, etc.
693*b39c5158Smillert    perl -e "print \"Hello world\n\""
694*b39c5158Smillert
695*b39c5158Smillert    # Mac
696*b39c5158Smillert    print "Hello world\n"
697*b39c5158Smillert     (then Run "Myscript" or Shift-Command-R)
698*b39c5158Smillert
699*b39c5158Smillert    # VMS
700*b39c5158Smillert    perl -e "print ""Hello world\n"""
701*b39c5158Smillert
702*b39c5158SmillertThe problem is that none of these examples are reliable: they depend on the
703*b39c5158Smillertcommand interpreter.  Under Unix, the first two often work. Under DOS,
704*b39c5158Smillertit's entirely possible that neither works.  If 4DOS was the command shell,
705*b39c5158Smillertyou'd probably have better luck like this:
706*b39c5158Smillert
707*b39c5158Smillert  perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
708*b39c5158Smillert
709*b39c5158SmillertUnder the Mac, it depends which environment you are using.  The MacPerl
710*b39c5158Smillertshell, or MPW, is much like Unix shells in its support for several
711*b39c5158Smillertquoting variants, except that it makes free use of the Mac's non-ASCII
712*b39c5158Smillertcharacters as control characters.
713*b39c5158Smillert
714*b39c5158SmillertUsing qq(), q(), and qx(), instead of "double quotes", 'single
715*b39c5158Smillertquotes', and `backticks`, may make one-liners easier to write.
716*b39c5158Smillert
717*b39c5158SmillertThere is no general solution to all of this.  It is a mess, pure and
718*b39c5158Smillertsimple.  Sucks to be away from Unix, huh? :-)
719*b39c5158Smillert
720*b39c5158Smillert[Some of this answer was contributed by Kenneth Albanowski.]
721*b39c5158Smillert
722*b39c5158Smillert=head2 Where can I learn about CGI or Web programming in Perl?
723*b39c5158Smillert
724*b39c5158SmillertFor modules, get the CGI or LWP modules from CPAN.  For textbooks,
725*b39c5158Smillertsee the two especially dedicated to web stuff in the question on
726*b39c5158Smillertbooks.  For problems and questions related to the web, like ``Why
727*b39c5158Smillertdo I get 500 Errors'' or ``Why doesn't it run from the browser right
728*b39c5158Smillertwhen it runs fine on the command line'', see these sources:
729*b39c5158Smillert
730*b39c5158Smillert    WWW Security FAQ
731*b39c5158Smillert        http://www.w3.org/Security/Faq/
732*b39c5158Smillert
733*b39c5158Smillert    Web FAQ
734*b39c5158Smillert        http://www.boutell.com/faq/
735*b39c5158Smillert
736*b39c5158Smillert    CGI FAQ
737*b39c5158Smillert        http://www.webthing.com/tutorials/cgifaq.html
738*b39c5158Smillert
739*b39c5158Smillert    HTTP Spec
740*b39c5158Smillert        http://www.w3.org/pub/WWW/Protocols/HTTP/
741*b39c5158Smillert
742*b39c5158Smillert    HTML Spec
743*b39c5158Smillert        http://www.w3.org/TR/REC-html40/
744*b39c5158Smillert        http://www.w3.org/pub/WWW/MarkUp/
745*b39c5158Smillert
746*b39c5158Smillert    CGI Spec
747*b39c5158Smillert        http://www.w3.org/CGI/
748*b39c5158Smillert
749*b39c5158Smillert    CGI Security FAQ
750*b39c5158Smillert        http://www.go2net.com/people/paulp/cgi-security/safe-cgi.txt
751*b39c5158Smillert
752*b39c5158Smillert=head2 Where can I learn about object-oriented Perl programming?
753*b39c5158Smillert
754*b39c5158SmillertA good place to start is L<perltoot>, and you can use L<perlobj>,
755*b39c5158SmillertL<perlboot>, and L<perlbot> for reference.  Perltoot didn't come out
756*b39c5158Smillertuntil the 5.004 release; you can get a copy (in pod, html, or
757*b39c5158Smillertpostscript) from http://www.perl.com/CPAN/doc/FMTEYEWTK/ .
758*b39c5158Smillert
759*b39c5158Smillert=head2 Where can I learn about linking C with Perl? [h2xs, xsubpp]
760*b39c5158Smillert
761*b39c5158SmillertIf you want to call C from Perl, start with L<perlxstut>,
762*b39c5158Smillertmoving on to L<perlxs>, L<xsubpp>, and L<perlguts>.  If you want to
763*b39c5158Smillertcall Perl from C, then read L<perlembed>, L<perlcall>, and
764*b39c5158SmillertL<perlguts>.  Don't forget that you can learn a lot from looking at
765*b39c5158Smillerthow the authors of existing extension modules wrote their code and
766*b39c5158Smillertsolved their problems.
767*b39c5158Smillert
768*b39c5158Smillert=head2 I've read perlembed, perlguts, etc., but I can't embed perl in
769*b39c5158Smillertmy C program; what am I doing wrong?
770*b39c5158Smillert
771*b39c5158SmillertDownload the ExtUtils::Embed kit from CPAN and run `make test'.  If
772*b39c5158Smillertthe tests pass, read the pods again and again and again.  If they
773*b39c5158Smillertfail, see L<perlbug> and send a bug report with the output of
774*b39c5158SmillertC<make test TEST_VERBOSE=1> along with C<perl -V>.
775*b39c5158Smillert
776*b39c5158Smillert=head2 When I tried to run my script, I got this message. What does it
777*b39c5158Smillertmean?
778*b39c5158Smillert
779*b39c5158SmillertA complete list of Perl's error messages and warnings with explanatory
780*b39c5158Smillerttext can be found in L<perldiag>. You can also use the splain program
781*b39c5158Smillert(distributed with Perl) to explain the error messages:
782*b39c5158Smillert
783*b39c5158Smillert    perl program 2>diag.out
784*b39c5158Smillert    splain [-v] [-p] diag.out
785*b39c5158Smillert
786*b39c5158Smillertor change your program to explain the messages for you:
787*b39c5158Smillert
788*b39c5158Smillert    use diagnostics;
789*b39c5158Smillert
790*b39c5158Smillertor
791*b39c5158Smillert
792*b39c5158Smillert    use diagnostics -verbose;
793*b39c5158Smillert
794*b39c5158Smillert=head2 What's MakeMaker?
795*b39c5158Smillert
796*b39c5158SmillertThis module (part of the standard Perl distribution) is designed to
797*b39c5158Smillertwrite a Makefile for an extension module from a Makefile.PL.  For more
798*b39c5158Smillertinformation, see L<ExtUtils::MakeMaker>.
799*b39c5158Smillert
800*b39c5158Smillert=head1 AUTHOR AND COPYRIGHT
801*b39c5158Smillert
802*b39c5158SmillertCopyright (c) 1997-1999 Tom Christiansen and Nathan Torkington.
803*b39c5158SmillertAll rights reserved.
804*b39c5158Smillert
805*b39c5158SmillertWhen included as an integrated part of the Standard Distribution
806*b39c5158Smillertof Perl or of its documentation (printed or otherwise), this works is
807*b39c5158Smillertcovered under Perl's Artistic License.  For separate distributions of
808*b39c5158Smillertall or part of this FAQ outside of that, see L<perlfaq>.
809*b39c5158Smillert
810*b39c5158SmillertIrrespective of its distribution, all code examples here are in the public
811*b39c5158Smillertdomain.  You are permitted and encouraged to use this code and any
812*b39c5158Smillertderivatives thereof in your own programs for fun or for profit as you
813*b39c5158Smillertsee fit.  A simple comment in the code giving credit to the FAQ would
814*b39c5158Smillertbe courteous but is not required.
815