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