This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Removed unnecessary pointers checks
[perl5.git] / pod / perlfaq3.pod
1 =head1 NAME
2
3 perlfaq3 - Programming Tools ($Revision: 3606 $)
4
5 =head1 DESCRIPTION
6
7 This section of the FAQ answers questions related to programmer tools
8 and programming support.
9
10 =head2 How do I do (anything)?
11
12 Have you looked at CPAN (see L<perlfaq2>)?  The chances are that
13 someone has already written a module that can solve your problem.
14 Have you read the appropriate manpages?  Here's a brief index:
15
16         Basics          perldata, perlvar, perlsyn, perlop, perlsub
17         Execution       perlrun, perldebug
18         Functions       perlfunc
19         Objects         perlref, perlmod, perlobj, perltie
20         Data Structures perlref, perllol, perldsc
21         Modules         perlmod, perlmodlib, perlsub
22         Regexes         perlre, perlfunc, perlop, perllocale
23         Moving to perl5 perltrap, perl
24         Linking w/C     perlxstut, perlxs, perlcall, perlguts, perlembed
25         Various         http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz
26                         (not a man-page but still useful, a collection
27                          of various essays on Perl techniques)
28
29 A crude table of contents for the Perl manpage set is found in L<perltoc>.
30
31 =head2 How can I use Perl interactively?
32
33 The typical approach uses the Perl debugger, described in the
34 perldebug(1) manpage, on an "empty" program, like this:
35
36     perl -de 42
37
38 Now just type in any legal Perl code, and it will be immediately
39 evaluated.  You can also examine the symbol table, get stack
40 backtraces, check variable values, set breakpoints, and other
41 operations typically found in symbolic debuggers.
42
43 =head2 Is there a Perl shell?
44
45 The psh (Perl sh) is currently at version 1.8. The Perl Shell is a shell
46 that combines the interactive nature of a Unix shell with the power of
47 Perl. The goal is a full featured shell that behaves as expected for
48 normal shell activity and uses Perl syntax and functionality for
49 control-flow statements and other things. You can get psh at
50 http://sourceforge.net/projects/psh/ .
51
52 Zoidberg is a similar project and provides a shell written in perl,
53 configured in perl and operated in perl. It is intended as a login shell
54 and development environment. It can be found at http://zoidberg.sf.net/
55 or your local CPAN mirror.
56
57 The Shell.pm module (distributed with Perl) makes Perl try commands
58 which aren't part of the Perl language as shell commands.  perlsh from
59 the source distribution is simplistic and uninteresting, but may still
60 be what you want.
61
62 =head2 How do I find which modules are installed on my system?
63
64 You can use the ExtUtils::Installed module to show all installed
65 distributions, although it can take awhile to do its magic.  The
66 standard library which comes with Perl just shows up as "Perl" (although
67 you can get those with Module::CoreList).
68
69         use ExtUtils::Installed;
70
71         my $inst    = ExtUtils::Installed->new();
72         my @modules = $inst->modules();
73
74 If you want a list of all of the Perl module filenames, you
75 can use File::Find::Rule.
76
77         use File::Find::Rule;
78
79         my @files = File::Find::Rule->file()->name( '*.pm' )->in( @INC );
80
81 If you do not have that module, you can do the same thing
82 with File::Find which is part of the standard library.
83
84     use File::Find;
85     my @files;
86
87     find(
88       sub {
89         push @files, $File::Find::name
90                 if -f $File::Find::name && /\.pm$/
91         },
92
93       @INC
94       );
95
96         print join "\n", @files;
97
98 If you simply need to quickly check to see if a module is
99 available, you can check for its documentation.  If you can
100 read the documentation the module is most likely installed.
101 If you cannot read the documentation, the module might not
102 have any (in rare cases).
103
104         prompt% perldoc Module::Name
105
106 You can also try to include the module in a one-liner to see if
107 perl finds it.
108
109         perl -MModule::Name -e1
110
111 =head2 How do I debug my Perl programs?
112
113 (contributed by brian d foy)
114
115 Before you do anything else, you can help yourself by ensuring that
116 you let Perl tell you about problem areas in your code. By turning
117 on warnings and strictures, you can head off many problems before 
118 they get too big. You can find out more about these in L<strict>
119 and L<warnings>.
120
121         #!/usr/bin/perl
122         use strict;
123         use warnings;
124         
125 Beyond that, the simplest debugger is the C<print> function. Use it
126 to look at values as you run your program:
127
128         print STDERR "The value is [$value]\n";
129
130 The C<Data::Dumper> module can pretty-print Perl data structures:
131
132         use Data::Dumper( Dump );
133         print STDERR "The hash is " . Dump( \%hash ) . "\n";
134         
135 Perl comes with an interactive debugger, which you can start with the
136 C<-d> switch. It's fully explained in L<perldebug>.
137
138 If you'd like a graphical user interface and you have Tk, you can use
139 C<ptkdb>. It's on CPAN and available for free.
140
141 If you need something much more sophisicated and controllable, Leon
142 Brocard's Devel::ebug (which you can call with the -D switch as -Debug)
143 gives you the programmatic hooks into everything you need to write your
144 own (without too much pain and suffering).
145
146 You can also use a commercial debugger such as Affrus (Mac OS X), Komodo
147 from Activestate (Windows and Mac OS X), or EPIC (most platforms).
148
149 =head2 How do I profile my Perl programs?
150
151 You should get the Devel::DProf module from the standard distribution
152 (or separately on CPAN) and also use Benchmark.pm from the standard
153 distribution.  The Benchmark module lets you time specific portions of
154 your code, while Devel::DProf gives detailed breakdowns of where your
155 code spends its time.
156
157 Here's a sample use of Benchmark:
158
159   use Benchmark;
160
161   @junk = `cat /etc/motd`;
162   $count = 10_000;
163
164   timethese($count, {
165             'map' => sub { my @a = @junk;
166                            map { s/a/b/ } @a;
167                            return @a },
168             'for' => sub { my @a = @junk;
169                            for (@a) { s/a/b/ };
170                            return @a },
171            });
172
173 This is what it prints (on one machine--your results will be dependent
174 on your hardware, operating system, and the load on your machine):
175
176   Benchmark: timing 10000 iterations of for, map...
177          for:  4 secs ( 3.97 usr  0.01 sys =  3.98 cpu)
178          map:  6 secs ( 4.97 usr  0.00 sys =  4.97 cpu)
179
180 Be aware that a good benchmark is very hard to write.  It only tests the
181 data you give it and proves little about the differing complexities
182 of contrasting algorithms.
183
184 =head2 How do I cross-reference my Perl programs?
185
186 The B::Xref module can be used to generate cross-reference reports
187 for Perl programs.
188
189     perl -MO=Xref[,OPTIONS] scriptname.plx
190
191 =head2 Is there a pretty-printer (formatter) for Perl?
192
193 Perltidy is a Perl script which indents and reformats Perl scripts
194 to make them easier to read by trying to follow the rules of the
195 L<perlstyle>. If you write Perl scripts, or spend much time reading
196 them, you will probably find it useful.  It is available at
197 http://perltidy.sourceforge.net
198
199 Of course, if you simply follow the guidelines in L<perlstyle>,
200 you shouldn't need to reformat.  The habit of formatting your code
201 as you write it will help prevent bugs.  Your editor can and should
202 help you with this.  The perl-mode or newer cperl-mode for emacs
203 can provide remarkable amounts of help with most (but not all)
204 code, and even less programmable editors can provide significant
205 assistance.  Tom Christiansen and many other VI users  swear by
206 the following settings in vi and its clones:
207
208     set ai sw=4
209     map! ^O {^M}^[O^T
210
211 Put that in your F<.exrc> file (replacing the caret characters
212 with control characters) and away you go.  In insert mode, ^T is
213 for indenting, ^D is for undenting, and ^O is for blockdenting--
214 as it were.  A more complete example, with comments, can be found at
215 http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz
216
217 The a2ps http://www-inf.enst.fr/%7Edemaille/a2ps/black+white.ps.gz does
218 lots of things related to generating nicely printed output of
219 documents, as does enscript at http://people.ssh.fi/mtr/genscript/ .
220
221 =head2 Is there a ctags for Perl?
222
223 (contributed by brian d foy)
224
225 Exuberent ctags supports Perl: http://ctags.sourceforge.net/
226
227 You might also try pltags: http://www.mscha.com/pltags.zip
228
229 =head2 Is there an IDE or Windows Perl Editor?
230
231 Perl programs are just plain text, so any editor will do.
232
233 If you're on Unix, you already have an IDE--Unix itself.  The UNIX
234 philosophy is the philosophy of several small tools that each do one
235 thing and do it well.  It's like a carpenter's toolbox.
236
237 If you want an IDE, check the following (in alphabetical order, not
238 order of preference):
239
240 =over 4
241
242 =item Eclipse
243
244 http://e-p-i-c.sf.net/
245
246 The Eclipse Perl Integration Project integrates Perl
247 editing/debugging with Eclipse.
248
249 =item Enginsite
250
251 http://www.enginsite.com/
252
253 Perl Editor by EngInSite is a complete integrated development
254 environment (IDE) for creating, testing, and  debugging  Perl scripts;
255 the tool runs on Windows 9x/NT/2000/XP or later.
256
257 =item Komodo
258
259 http://www.ActiveState.com/Products/Komodo/
260
261 ActiveState's cross-platform (as of October 2004, that's Windows, Linux,
262 and Solaris), multi-language IDE has Perl support, including a regular expression
263 debugger and remote debugging.
264
265 =item Open Perl IDE
266
267 http://open-perl-ide.sourceforge.net/
268
269 Open Perl IDE is an integrated development environment for writing
270 and debugging Perl scripts with ActiveState's ActivePerl distribution
271 under Windows 95/98/NT/2000.
272
273 =item OptiPerl
274
275 http://www.optiperl.com/
276
277 OptiPerl is a Windows IDE with simulated CGI environment, including
278 debugger and syntax highlighting editor.
279
280 =item PerlBuilder
281
282 http://www.solutionsoft.com/perl.htm
283
284 PerlBuidler is an integrated development environment for Windows that
285 supports Perl development.
286
287 =item visiPerl+
288
289 http://helpconsulting.net/visiperl/
290
291 From Help Consulting, for Windows.
292
293 =item Visual Perl
294
295 http://www.activestate.com/Products/Visual_Perl/
296
297 Visual Perl is a Visual Studio.NET plug-in from ActiveState.
298
299 =item Zeus
300
301 http://www.zeusedit.com/lookmain.html
302
303 Zeus for Window is another Win32 multi-language editor/IDE
304 that comes with support for Perl:
305
306 =back
307
308 For editors: if you're on Unix you probably have vi or a vi clone
309 already, and possibly an emacs too, so you may not need to download
310 anything. In any emacs the cperl-mode (M-x cperl-mode) gives you
311 perhaps the best available Perl editing mode in any editor.
312
313 If you are using Windows, you can use any editor that lets you work
314 with plain text, such as NotePad or WordPad.  Word processors, such as
315 Microsoft Word or WordPerfect, typically do not work since they insert
316 all sorts of behind-the-scenes information, although some allow you to
317 save files as "Text Only". You can also download text editors designed
318 specifically for programming, such as Textpad (
319 http://www.textpad.com/ ) and UltraEdit ( http://www.ultraedit.com/ ),
320 among others.
321
322 If you are using MacOS, the same concerns apply.  MacPerl (for Classic
323 environments) comes with a simple editor. Popular external editors are
324 BBEdit ( http://www.bbedit.com/ ) or Alpha (
325 http://www.his.com/~jguyer/Alpha/Alpha8.html ). MacOS X users can use
326 Unix editors as well. Neil Bowers (the man behind Geekcruises) has a
327 list of Mac editors that can handle Perl (
328 http://www.neilbowers.org/macperleditors.html ).
329
330 =over 4
331
332 =item GNU Emacs
333
334 http://www.gnu.org/software/emacs/windows/ntemacs.html
335
336 =item MicroEMACS
337
338 http://www.microemacs.de/
339
340 =item XEmacs
341
342 http://www.xemacs.org/Download/index.html
343
344 =item Jed
345
346 http://space.mit.edu/~davis/jed/
347
348 =back
349
350 or a vi clone such as
351
352 =over 4
353
354 =item Elvis
355
356 ftp://ftp.cs.pdx.edu/pub/elvis/ http://www.fh-wedel.de/elvis/
357
358 =item Vile
359
360 http://dickey.his.com/vile/vile.html
361
362 =item Vim
363
364 http://www.vim.org/
365
366 =back
367
368 For vi lovers in general, Windows or elsewhere:
369
370         http://www.thomer.com/thomer/vi/vi.html
371
372 nvi ( http://www.bostic.com/vi/ , available from CPAN in src/misc/) is
373 yet another vi clone, unfortunately not available for Windows, but in
374 UNIX platforms you might be interested in trying it out, firstly because
375 strictly speaking it is not a vi clone, it is the real vi, or the new
376 incarnation of it, and secondly because you can embed Perl inside it
377 to use Perl as the scripting language.  nvi is not alone in this,
378 though: at least also vim and vile offer an embedded Perl.
379
380 The following are Win32 multilanguage editor/IDESs that support Perl:
381
382 =over 4
383
384 =item Codewright
385
386 http://www.borland.com/codewright/
387
388 =item MultiEdit
389
390 http://www.MultiEdit.com/
391
392 =item SlickEdit
393
394 http://www.slickedit.com/
395
396 =back
397
398 There is also a toyedit Text widget based editor written in Perl
399 that is distributed with the Tk module on CPAN.  The ptkdb
400 ( http://world.std.com/~aep/ptkdb/ ) is a Perl/tk based debugger that
401 acts as a development environment of sorts.  Perl Composer
402 ( http://perlcomposer.sourceforge.net/ ) is an IDE for Perl/Tk
403 GUI creation.
404
405 In addition to an editor/IDE you might be interested in a more
406 powerful shell environment for Win32.  Your options include
407
408 =over 4
409
410 =item Bash
411
412 from the Cygwin package ( http://sources.redhat.com/cygwin/ )
413
414 =item Ksh
415
416 from the MKS Toolkit ( http://www.mks.com/ ), or the Bourne shell of
417 the U/WIN environment ( http://www.research.att.com/sw/tools/uwin/ )
418
419 =item Tcsh
420
421 ftp://ftp.astron.com/pub/tcsh/ , see also
422 http://www.primate.wisc.edu/software/csh-tcsh-book/
423
424 =item Zsh
425
426 ftp://ftp.blarg.net/users/amol/zsh/ , see also http://www.zsh.org/
427
428 =back
429
430 MKS and U/WIN are commercial (U/WIN is free for educational and
431 research purposes), Cygwin is covered by the GNU Public License (but
432 that shouldn't matter for Perl use).  The Cygwin, MKS, and U/WIN all
433 contain (in addition to the shells) a comprehensive set of standard
434 UNIX toolkit utilities.
435
436 If you're transferring text files between Unix and Windows using FTP
437 be sure to transfer them in ASCII mode so the ends of lines are
438 appropriately converted.
439
440 On Mac OS the MacPerl Application comes with a simple 32k text editor
441 that behaves like a rudimentary IDE.  In contrast to the MacPerl Application
442 the MPW Perl tool can make use of the MPW Shell itself as an editor (with
443 no 32k limit).
444
445 =over 4
446
447 =item Affrus
448
449 is a full Perl development environment with full debugger support
450 ( http://www.latenightsw.com ).
451
452 =item Alpha
453
454 is an editor, written and extensible in Tcl, that nonetheless has
455 built in support for several popular markup and programming languages
456 including Perl and HTML ( http://www.his.com/~jguyer/Alpha/Alpha8.html ).
457
458 =item BBEdit and BBEdit Lite
459
460 are text editors for Mac OS that have a Perl sensitivity mode
461 ( http://web.barebones.com/ ).
462
463
464 =back
465
466 Pepper and Pe are programming language sensitive text editors for Mac
467 OS X and BeOS respectively ( http://www.hekkelman.com/ ).
468
469 =head2 Where can I get Perl macros for vi?
470
471 For a complete version of Tom Christiansen's vi configuration file,
472 see http://www.cpan.org/authors/Tom_Christiansen/scripts/toms.exrc.gz ,
473 the standard benchmark file for vi emulators.  The file runs best with nvi,
474 the current version of vi out of Berkeley, which incidentally can be built
475 with an embedded Perl interpreter--see http://www.cpan.org/src/misc/ .
476
477 =head2 Where can I get perl-mode for emacs?
478
479 Since Emacs version 19 patchlevel 22 or so, there have been both a
480 perl-mode.el and support for the Perl debugger built in.  These should
481 come with the standard Emacs 19 distribution.
482
483 In the Perl source directory, you'll find a directory called "emacs",
484 which contains a cperl-mode that color-codes keywords, provides
485 context-sensitive help, and other nifty things.
486
487 Note that the perl-mode of emacs will have fits with C<"main'foo">
488 (single quote), and mess up the indentation and highlighting.  You
489 are probably using C<"main::foo"> in new Perl code anyway, so this
490 shouldn't be an issue.
491
492 =head2 How can I use curses with Perl?
493
494 The Curses module from CPAN provides a dynamically loadable object
495 module interface to a curses library.  A small demo can be found at the
496 directory http://www.cpan.org/authors/Tom_Christiansen/scripts/rep.gz ;
497 this program repeats a command and updates the screen as needed, rendering
498 B<rep ps axu> similar to B<top>.
499
500 =head2 How can I use X or Tk with Perl?
501
502 Tk is a completely Perl-based, object-oriented interface to the Tk toolkit
503 that doesn't force you to use Tcl just to get at Tk.  Sx is an interface
504 to the Athena Widget set.  Both are available from CPAN.  See the
505 directory http://www.cpan.org/modules/by-category/08_User_Interfaces/
506
507 Invaluable for Perl/Tk programming are the Perl/Tk FAQ at
508 http://phaseit.net/claird/comp.lang.perl.tk/ptkFAQ.html , the Perl/Tk Reference
509 Guide available at
510 http://www.cpan.org/authors/Stephen_O_Lidie/ , and the
511 online manpages at
512 http://www-users.cs.umn.edu/%7Eamundson/perl/perltk/toc.html .
513
514 =head2 How can I make my Perl program run faster?
515
516 The best way to do this is to come up with a better algorithm.  This
517 can often make a dramatic difference.  Jon Bentley's book
518 I<Programming Pearls> (that's not a misspelling!)  has some good tips
519 on optimization, too.  Advice on benchmarking boils down to: benchmark
520 and profile to make sure you're optimizing the right part, look for
521 better algorithms instead of microtuning your code, and when all else
522 fails consider just buying faster hardware.  You will probably want to
523 read the answer to the earlier question "How do I profile my Perl
524 programs?" if you haven't done so already.
525
526 A different approach is to autoload seldom-used Perl code.  See the
527 AutoSplit and AutoLoader modules in the standard distribution for
528 that.  Or you could locate the bottleneck and think about writing just
529 that part in C, the way we used to take bottlenecks in C code and
530 write them in assembler.  Similar to rewriting in C, modules that have
531 critical sections can be written in C (for instance, the PDL module
532 from CPAN).
533
534 If you're currently linking your perl executable to a shared
535 I<libc.so>, you can often gain a 10-25% performance benefit by
536 rebuilding it to link with a static libc.a instead.  This will make a
537 bigger perl executable, but your Perl programs (and programmers) may
538 thank you for it.  See the F<INSTALL> file in the source distribution
539 for more information.
540
541 The undump program was an ancient attempt to speed up Perl program by
542 storing the already-compiled form to disk.  This is no longer a viable
543 option, as it only worked on a few architectures, and wasn't a good
544 solution anyway.
545
546 =head2 How can I make my Perl program take less memory?
547
548 When it comes to time-space tradeoffs, Perl nearly always prefers to
549 throw memory at a problem.  Scalars in Perl use more memory than
550 strings in C, arrays take more than that, and hashes use even more.  While
551 there's still a lot to be done, recent releases have been addressing
552 these issues.  For example, as of 5.004, duplicate hash keys are
553 shared amongst all hashes using them, so require no reallocation.
554
555 In some cases, using substr() or vec() to simulate arrays can be
556 highly beneficial.  For example, an array of a thousand booleans will
557 take at least 20,000 bytes of space, but it can be turned into one
558 125-byte bit vector--a considerable memory savings.  The standard
559 Tie::SubstrHash module can also help for certain types of data
560 structure.  If you're working with specialist data structures
561 (matrices, for instance) modules that implement these in C may use
562 less memory than equivalent Perl modules.
563
564 Another thing to try is learning whether your Perl was compiled with
565 the system malloc or with Perl's builtin malloc.  Whichever one it
566 is, try using the other one and see whether this makes a difference.
567 Information about malloc is in the F<INSTALL> file in the source
568 distribution.  You can find out whether you are using perl's malloc by
569 typing C<perl -V:usemymalloc>.
570
571 Of course, the best way to save memory is to not do anything to waste
572 it in the first place. Good programming practices can go a long way
573 toward this:
574
575 =over 4
576
577 =item * Don't slurp!
578
579 Don't read an entire file into memory if you can process it line
580 by line. Or more concretely, use a loop like this:
581
582         #
583         # Good Idea
584         #
585         while (<FILE>) {
586            # ...
587         }
588
589 instead of this:
590
591         #
592         # Bad Idea
593         #
594         @data = <FILE>;
595         foreach (@data) {
596             # ...
597         }
598
599 When the files you're processing are small, it doesn't much matter which
600 way you do it, but it makes a huge difference when they start getting
601 larger.
602
603 =item * Use map and grep selectively
604
605 Remember that both map and grep expect a LIST argument, so doing this:
606
607         @wanted = grep {/pattern/} <FILE>;
608
609 will cause the entire file to be slurped. For large files, it's better
610 to loop:
611
612         while (<FILE>) {
613                 push(@wanted, $_) if /pattern/;
614         }
615
616 =item * Avoid unnecessary quotes and stringification
617
618 Don't quote large strings unless absolutely necessary:
619
620         my $copy = "$large_string";
621
622 makes 2 copies of $large_string (one for $copy and another for the
623 quotes), whereas
624
625         my $copy = $large_string;
626
627 only makes one copy.
628
629 Ditto for stringifying large arrays:
630
631         {
632                 local $, = "\n";
633                 print @big_array;
634         }
635
636 is much more memory-efficient than either
637
638         print join "\n", @big_array;
639
640 or
641
642         {
643                 local $" = "\n";
644                 print "@big_array";
645         }
646
647
648 =item * Pass by reference
649
650 Pass arrays and hashes by reference, not by value. For one thing, it's
651 the only way to pass multiple lists or hashes (or both) in a single
652 call/return. It also avoids creating a copy of all the contents. This
653 requires some judgment, however, because any changes will be propagated
654 back to the original data. If you really want to mangle (er, modify) a
655 copy, you'll have to sacrifice the memory needed to make one.
656
657 =item * Tie large variables to disk.
658
659 For "big" data stores (i.e. ones that exceed available memory) consider
660 using one of the DB modules to store it on disk instead of in RAM. This
661 will incur a penalty in access time, but that's probably better than
662 causing your hard disk to thrash due to massive swapping.
663
664 =back
665
666 =head2 Is it safe to return a reference to local or lexical data?
667
668 Yes. Perl's garbage collection system takes care of this so
669 everything works out right.
670
671     sub makeone {
672         my @a = ( 1 .. 10 );
673         return \@a;
674     }
675
676     for ( 1 .. 10 ) {
677         push @many, makeone();
678     }
679
680     print $many[4][5], "\n";
681
682     print "@many\n";
683
684 =head2 How can I free an array or hash so my program shrinks?
685
686 (contributed by Michael Carman)
687
688 You usually can't. Memory allocated to lexicals (i.e. my() variables)
689 cannot be reclaimed or reused even if they go out of scope. It is
690 reserved in case the variables come back into scope. Memory allocated
691 to global variables can be reused (within your program) by using
692 undef()ing and/or delete().
693
694 On most operating systems, memory allocated to a program can never be
695 returned to the system. That's why long-running programs sometimes re-
696 exec themselves. Some operating systems (notably, systems that use
697 mmap(2) for allocating large chunks of memory) can reclaim memory that
698 is no longer used, but on such systems, perl must be configured and
699 compiled to use the OS's malloc, not perl's.
700
701 In general, memory allocation and de-allocation isn't something you can
702 or should be worrying about much in Perl.
703
704 See also "How can I make my Perl program take less memory?"
705
706 =head2 How can I make my CGI script more efficient?
707
708 Beyond the normal measures described to make general Perl programs
709 faster or smaller, a CGI program has additional issues.  It may be run
710 several times per second.  Given that each time it runs it will need
711 to be re-compiled and will often allocate a megabyte or more of system
712 memory, this can be a killer.  Compiling into C B<isn't going to help
713 you> because the process start-up overhead is where the bottleneck is.
714
715 There are two popular ways to avoid this overhead.  One solution
716 involves running the Apache HTTP server (available from
717 http://www.apache.org/ ) with either of the mod_perl or mod_fastcgi
718 plugin modules.
719
720 With mod_perl and the Apache::Registry module (distributed with
721 mod_perl), httpd will run with an embedded Perl interpreter which
722 pre-compiles your script and then executes it within the same address
723 space without forking.  The Apache extension also gives Perl access to
724 the internal server API, so modules written in Perl can do just about
725 anything a module written in C can.  For more on mod_perl, see
726 http://perl.apache.org/
727
728 With the FCGI module (from CPAN) and the mod_fastcgi
729 module (available from http://www.fastcgi.com/ ) each of your Perl
730 programs becomes a permanent CGI daemon process.
731
732 Both of these solutions can have far-reaching effects on your system
733 and on the way you write your CGI programs, so investigate them with
734 care.
735
736 See http://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ .
737
738 =head2 How can I hide the source for my Perl program?
739
740 Delete it. :-) Seriously, there are a number of (mostly
741 unsatisfactory) solutions with varying levels of "security".
742
743 First of all, however, you I<can't> take away read permission, because
744 the source code has to be readable in order to be compiled and
745 interpreted.  (That doesn't mean that a CGI script's source is
746 readable by people on the web, though--only by people with access to
747 the filesystem.)  So you have to leave the permissions at the socially
748 friendly 0755 level.
749
750 Some people regard this as a security problem.  If your program does
751 insecure things and relies on people not knowing how to exploit those
752 insecurities, it is not secure.  It is often possible for someone to
753 determine the insecure things and exploit them without viewing the
754 source.  Security through obscurity, the name for hiding your bugs
755 instead of fixing them, is little security indeed.
756
757 You can try using encryption via source filters (Starting from Perl
758 5.8 the Filter::Simple and Filter::Util::Call modules are included in
759 the standard distribution), but any decent programmer will be able to
760 decrypt it.  You can try using the byte code compiler and interpreter
761 described below, but the curious might still be able to de-compile it.
762 You can try using the native-code compiler described below, but
763 crackers might be able to disassemble it.  These pose varying degrees
764 of difficulty to people wanting to get at your code, but none can
765 definitively conceal it (true of every language, not just Perl).
766
767 It is very easy to recover the source of Perl programs.  You simply
768 feed the program to the perl interpreter and use the modules in
769 the B:: hierarchy.  The B::Deparse module should be able to
770 defeat most attempts to hide source.  Again, this is not
771 unique to Perl.
772
773 If you're concerned about people profiting from your code, then the
774 bottom line is that nothing but a restrictive license will give you
775 legal security.  License your software and pepper it with threatening
776 statements like "This is unpublished proprietary software of XYZ Corp.
777 Your access to it does not give you permission to use it blah blah
778 blah."  We are not lawyers, of course, so you should see a lawyer if
779 you want to be sure your license's wording will stand up in court.
780
781 =head2 How can I compile my Perl program into byte code or C?
782
783 (contributed by brian d foy)
784
785 In general, you can't do this.  There are some things that may work
786 for your situation though.  People usually ask this question
787 because they want to distribute their works without giving away
788 the source code, and most solutions trade disk space for convenience.
789 You probably won't see much of a speed increase either, since most
790 solutions simply bundle a Perl interpreter in the final product
791 (but see L<How can I make my Perl program run faster?>).
792
793 The Perl Archive Toolkit ( http://par.perl.org/index.cgi ) is Perl's
794 analog to Java's JAR.  It's freely available and on CPAN (
795 http://search.cpan.org/dist/PAR/ ).
796
797 The B::* namespace, often called "the Perl compiler", but is really a way
798 for Perl programs to peek at its innards rather than create pre-compiled
799 versions of your program.  However. the B::Bytecode module can turn your
800 script  into a bytecode format that could be loaded later by the
801 ByteLoader module and executed as a regular Perl script.
802
803 There are also some commercial products that may work for you, although
804 you have to buy a license for them.
805
806 The Perl Dev Kit ( http://www.activestate.com/Products/Perl_Dev_Kit/ )
807 from ActiveState can "Turn your Perl programs into ready-to-run
808 executables for HP-UX, Linux, Solaris and Windows."
809
810 Perl2Exe ( http://www.indigostar.com/perl2exe.htm ) is a command line
811 program for converting perl scripts to executable files.  It targets both
812 Windows and unix platforms.
813
814 =head2 How can I compile Perl into Java?
815
816 You can also integrate Java and Perl with the
817 Perl Resource Kit from O'Reilly Media.  See
818 http://www.oreilly.com/catalog/prkunix/ .
819
820 Perl 5.6 comes with Java Perl Lingo, or JPL.  JPL, still in
821 development, allows Perl code to be called from Java.  See jpl/README
822 in the Perl source tree.
823
824 =head2 How can I get C<#!perl> to work on [MS-DOS,NT,...]?
825
826 For OS/2 just use
827
828     extproc perl -S -your_switches
829
830 as the first line in C<*.cmd> file (C<-S> due to a bug in cmd.exe's
831 "extproc" handling).  For DOS one should first invent a corresponding
832 batch file and codify it in C<ALTERNATE_SHEBANG> (see the
833 F<dosish.h> file in the source distribution for more information).
834
835 The Win95/NT installation, when using the ActiveState port of Perl,
836 will modify the Registry to associate the C<.pl> extension with the
837 perl interpreter.  If you install another port, perhaps even building
838 your own Win95/NT Perl from the standard sources by using a Windows port
839 of gcc (e.g., with cygwin or mingw32), then you'll have to modify
840 the Registry yourself.  In addition to associating C<.pl> with the
841 interpreter, NT people can use: C<SET PATHEXT=%PATHEXT%;.PL> to let them
842 run the program C<install-linux.pl> merely by typing C<install-linux>.
843
844 Under "Classic" MacOS, a perl program will have the appropriate Creator and
845 Type, so that double-clicking them will invoke the MacPerl application.
846 Under Mac OS X, clickable apps can be made from any C<#!> script using Wil
847 Sanchez' DropScript utility: http://www.wsanchez.net/software/ .
848
849 I<IMPORTANT!>: Whatever you do, PLEASE don't get frustrated, and just
850 throw the perl interpreter into your cgi-bin directory, in order to
851 get your programs working for a web server.  This is an EXTREMELY big
852 security risk.  Take the time to figure out how to do it correctly.
853
854 =head2 Can I write useful Perl programs on the command line?
855
856 Yes.  Read L<perlrun> for more information.  Some examples follow.
857 (These assume standard Unix shell quoting rules.)
858
859     # sum first and last fields
860     perl -lane 'print $F[0] + $F[-1]' *
861
862     # identify text files
863     perl -le 'for(@ARGV) {print if -f && -T _}' *
864
865     # remove (most) comments from C program
866     perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
867
868     # make file a month younger than today, defeating reaper daemons
869     perl -e '$X=24*60*60; utime(time(),time() + 30 * $X,@ARGV)' *
870
871     # find first unused uid
872     perl -le '$i++ while getpwuid($i); print $i'
873
874     # display reasonable manpath
875     echo $PATH | perl -nl -072 -e '
876         s![^/+]*$!man!&&-d&&!$s{$_}++&&push@m,$_;END{print"@m"}'
877
878 OK, the last one was actually an Obfuscated Perl Contest entry. :-)
879
880 =head2 Why don't Perl one-liners work on my DOS/Mac/VMS system?
881
882 The problem is usually that the command interpreters on those systems
883 have rather different ideas about quoting than the Unix shells under
884 which the one-liners were created.  On some systems, you may have to
885 change single-quotes to double ones, which you must I<NOT> do on Unix
886 or Plan9 systems.  You might also have to change a single % to a %%.
887
888 For example:
889
890     # Unix
891     perl -e 'print "Hello world\n"'
892
893     # DOS, etc.
894     perl -e "print \"Hello world\n\""
895
896     # Mac
897     print "Hello world\n"
898      (then Run "Myscript" or Shift-Command-R)
899
900     # MPW
901     perl -e 'print "Hello world\n"'
902
903     # VMS
904     perl -e "print ""Hello world\n"""
905
906 The problem is that none of these examples are reliable: they depend on the
907 command interpreter.  Under Unix, the first two often work. Under DOS,
908 it's entirely possible that neither works.  If 4DOS was the command shell,
909 you'd probably have better luck like this:
910
911   perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
912
913 Under the Mac, it depends which environment you are using.  The MacPerl
914 shell, or MPW, is much like Unix shells in its support for several
915 quoting variants, except that it makes free use of the Mac's non-ASCII
916 characters as control characters.
917
918 Using qq(), q(), and qx(), instead of "double quotes", 'single
919 quotes', and `backticks`, may make one-liners easier to write.
920
921 There is no general solution to all of this.  It is a mess.
922
923 [Some of this answer was contributed by Kenneth Albanowski.]
924
925 =head2 Where can I learn about CGI or Web programming in Perl?
926
927 For modules, get the CGI or LWP modules from CPAN.  For textbooks,
928 see the two especially dedicated to web stuff in the question on
929 books.  For problems and questions related to the web, like "Why
930 do I get 500 Errors" or "Why doesn't it run from the browser right
931 when it runs fine on the command line", see the troubleshooting
932 guides and references in L<perlfaq9> or in the CGI MetaFAQ:
933
934         http://www.perl.org/CGI_MetaFAQ.html
935
936 =head2 Where can I learn about object-oriented Perl programming?
937
938 A good place to start is L<perltoot>, and you can use L<perlobj>,
939 L<perlboot>, L<perltoot>, L<perltooc>, and L<perlbot> for reference.
940
941 A good book on OO on Perl is the "Object-Oriented Perl"
942 by Damian Conway from Manning Publications, or "Learning Perl
943 References, Objects, & Modules" by Randal Schwartz and Tom
944 Phoenix from O'Reilly Media.
945
946 =head2 Where can I learn about linking C with Perl?
947
948 If you want to call C from Perl, start with L<perlxstut>,
949 moving on to L<perlxs>, L<xsubpp>, and L<perlguts>.  If you want to
950 call Perl from C, then read L<perlembed>, L<perlcall>, and
951 L<perlguts>.  Don't forget that you can learn a lot from looking at
952 how the authors of existing extension modules wrote their code and
953 solved their problems.
954
955 You might not need all the power of XS. The Inline::C module lets
956 you put C code directly in your Perl source. It handles all the
957 magic to make it work. You still have to learn at least some of
958 the perl API but you won't have to deal with the complexity of the
959 XS support files.
960
961 =head2 I've read perlembed, perlguts, etc., but I can't embed perl in my C program; what am I doing wrong?
962
963 Download the ExtUtils::Embed kit from CPAN and run `make test'.  If
964 the tests pass, read the pods again and again and again.  If they
965 fail, see L<perlbug> and send a bug report with the output of
966 C<make test TEST_VERBOSE=1> along with C<perl -V>.
967
968 =head2 When I tried to run my script, I got this message. What does it mean?
969
970 A complete list of Perl's error messages and warnings with explanatory
971 text can be found in L<perldiag>. You can also use the splain program
972 (distributed with Perl) to explain the error messages:
973
974     perl program 2>diag.out
975     splain [-v] [-p] diag.out
976
977 or change your program to explain the messages for you:
978
979     use diagnostics;
980
981 or
982
983     use diagnostics -verbose;
984
985 =head2 What's MakeMaker?
986
987 This module (part of the standard Perl distribution) is designed to
988 write a Makefile for an extension module from a Makefile.PL.  For more
989 information, see L<ExtUtils::MakeMaker>.
990
991 =head1 REVISION
992
993 Revision: $Revision: 3606 $
994
995 Date: $Date: 2006-03-06 12:05:47 +0100 (lun, 06 mar 2006) $
996
997 See L<perlfaq> for source control details and availability.
998
999 =head1 AUTHOR AND COPYRIGHT
1000
1001 Copyright (c) 1997-2006 Tom Christiansen, Nathan Torkington, and
1002 other authors as noted. All rights reserved.
1003
1004 This documentation is free; you can redistribute it and/or modify it
1005 under the same terms as Perl itself.
1006
1007 Irrespective of its distribution, all code examples here are in the public
1008 domain.  You are permitted and encouraged to use this code and any
1009 derivatives thereof in your own programs for fun or for profit as you
1010 see fit.  A simple comment in the code giving credit to the FAQ would
1011 be courteous but is not required.