~ubuntu-branches/ubuntu/trusty/horae/trusty

« back to all changes in this revision

Viewing changes to 0CPAN/Pod-Simple-3.03/t/test_old_perlfaq3.pod

  • Committer: Bazaar Package Importer
  • Author(s): Carlo Segre
  • Date: 2008-02-23 23:13:02 UTC
  • mfrom: (2.1.2 hardy)
  • Revision ID: james.westby@ubuntu.com-20080223231302-mnyyxs3icvrus4ke
Tags: 066-3
Apply patch to athena_parts/misc.pl for compatibility with 
perl-tk 804.28.

Show diffs side-by-side

added added

removed removed

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