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