This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
quadmath doesn't do locale radixes.
[perl5.git] / cpan / perlfaq / lib / perlfaq3.pod
CommitLineData
68dc0745 1=head1 NAME
2
109f0441 3perlfaq3 - Programming Tools
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
c56bc1f6 12Have you looked at CPAN (see L<perlfaq2>)? The chances are that
68dc0745 13someone has already written a module that can solve your problem.
c56bc1f6 14Have you read the appropriate manpages? Here's a brief index:
68dc0745 15
a9feb6cb
CBW
16=over 4
17
18=item Basics
19
c56bc1f6
CBW
20=over 4
21
22=item L<perldata> - Perl data types
23
24=item L<perlvar> - Perl pre-defined variables
25
26=item L<perlsyn> - Perl syntax
27
28=item L<perlop> - Perl operators and precedence
29
30=item L<perlsub> - Perl subroutines
31
32=back
33
a9feb6cb
CBW
34
35=item Execution
36
c56bc1f6
CBW
37=over 4
38
39=item L<perlrun> - how to execute the Perl interpreter
40
41=item L<perldebug> - Perl debugging
42
43=back
44
a9feb6cb
CBW
45
46=item Functions
47
c56bc1f6
CBW
48=over 4
49
50=item L<perlfunc> - Perl builtin functions
51
52=back
a9feb6cb
CBW
53
54=item Objects
55
c56bc1f6
CBW
56=over 4
57
58=item L<perlref> - Perl references and nested data structures
59
60=item L<perlmod> - Perl modules (packages and symbol tables)
61
62=item L<perlobj> - Perl objects
63
64=item L<perltie> - how to hide an object class in a simple variable
65
66=back
67
a9feb6cb
CBW
68
69=item Data Structures
70
c56bc1f6
CBW
71=over 4
72
73=item L<perlref> - Perl references and nested data structures
74
75=item L<perllol> - Manipulating arrays of arrays in Perl
76
77=item L<perldsc> - Perl Data Structures Cookbook
78
79=back
a9feb6cb
CBW
80
81=item Modules
82
c56bc1f6
CBW
83=over 4
84
85=item L<perlmod> - Perl modules (packages and symbol tables)
86
87=item L<perlmodlib> - constructing new Perl modules and finding existing ones
88
89=back
90
a9feb6cb
CBW
91
92=item Regexes
93
c56bc1f6
CBW
94=over 4
95
96=item L<perlre> - Perl regular expressions
97
98=item L<perlfunc> - Perl builtin functions>
99
100=item L<perlop> - Perl operators and precedence
101
102=item L<perllocale> - Perl locale handling (internationalization and localization)
103
104=back
105
a9feb6cb
CBW
106
107=item Moving to perl5
108
c56bc1f6
CBW
109=over 4
110
111=item L<perltrap> - Perl traps for the unwary
112
113=item L<perl>
114
115=back
116
a9feb6cb
CBW
117
118=item Linking with C
119
c56bc1f6
CBW
120=over 4
121
122=item L<perlxstut> - Tutorial for writing XSUBs
123
124=item L<perlxs> - XS language reference manual
125
126=item L<perlcall> - Perl calling conventions from C
127
128=item L<perlguts> - Introduction to the Perl API
129
130=item L<perlembed> - how to embed perl in your C program
131
132=back
a9feb6cb
CBW
133
134=item Various
135
329d453a
CBW
136L<http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz>
137(not a man-page but still useful, a collection of various essays on
a9feb6cb
CBW
138Perl techniques)
139
140=back
68dc0745 141
3958b146 142A crude table of contents for the Perl manpage set is found in L<perltoc>.
68dc0745 143
144=head2 How can I use Perl interactively?
145
146The typical approach uses the Perl debugger, described in the
a9feb6cb 147L<perldebug(1)> manpage, on an "empty" program, like this:
68dc0745 148
149 perl -de 42
150
151Now just type in any legal Perl code, and it will be immediately
c56bc1f6 152evaluated. You can also examine the symbol table, get stack
68dc0745 153backtraces, check variable values, set breakpoints, and other
92c2ed05 154operations typically found in symbolic debuggers.
68dc0745 155
329d453a 156You can also use L<Devel::REPL> which is an interactive shell for Perl,
c56bc1f6
CBW
157commonly known as a REPL - Read, Evaluate, Print, Loop. It provides
158various handy features.
159
49d635f9
RGS
160=head2 How do I find which modules are installed on my system?
161
109f0441
S
162From the command line, you can use the C<cpan> command's C<-l> switch:
163
a9feb6cb 164 $ cpan -l
109f0441
S
165
166You can also use C<cpan>'s C<-a> switch to create an autobundle file
589a5df2 167that C<CPAN.pm> understands and can use to re-install every module:
109f0441 168
a9feb6cb 169 $ cpan -a
109f0441 170
a9feb6cb 171Inside a Perl program, you can use the L<ExtUtils::Installed> module to
109f0441 172show all installed distributions, although it can take awhile to do
c56bc1f6 173its magic. The standard library which comes with Perl just shows up
a9feb6cb 174as "Perl" (although you can get those with L<Module::CoreList>).
49d635f9 175
a9feb6cb 176 use ExtUtils::Installed;
197aec24 177
a9feb6cb
CBW
178 my $inst = ExtUtils::Installed->new();
179 my @modules = $inst->modules();
49d635f9
RGS
180
181If you want a list of all of the Perl module filenames, you
a9feb6cb 182can use L<File::Find::Rule>:
49d635f9 183
a9feb6cb 184 use File::Find::Rule;
197aec24 185
a9feb6cb
CBW
186 my @files = File::Find::Rule->
187 extras({follow => 1})->
188 file()->
189 name( '*.pm' )->
190 in( @INC )
191 ;
49d635f9
RGS
192
193If you do not have that module, you can do the same thing
a9feb6cb 194with L<File::Find> which is part of the standard library:
49d635f9 195
a9feb6cb
CBW
196 use File::Find;
197 my @files;
109f0441 198
a9feb6cb
CBW
199 find(
200 {
201 wanted => sub {
202 push @files, $File::Find::fullname
203 if -f $File::Find::fullname && /\.pm$/
204 },
205 follow => 1,
206 follow_skip => 2,
207 },
208 @INC
209 );
49d635f9 210
a9feb6cb 211 print join "\n", @files;
197aec24 212
761f3ec6 213If you simply need to check quickly to see if a module is
c56bc1f6 214available, you can check for its documentation. If you can
197aec24 215read the documentation the module is most likely installed.
49d635f9 216If you cannot read the documentation, the module might not
589a5df2 217have any (in rare cases):
49d635f9 218
a9feb6cb 219 $ perldoc Module::Name
49d635f9
RGS
220
221You can also try to include the module in a one-liner to see if
589a5df2 222perl finds it:
49d635f9 223
a9feb6cb 224 $ perl -MModule::Name -e1
197aec24 225
c56bc1f6
CBW
226(If you don't receive a "Can't locate ... in @INC" error message, then Perl
227found the module name you asked for.)
228
68dc0745 229=head2 How do I debug my Perl programs?
230
500071f4
RGS
231(contributed by brian d foy)
232
233Before you do anything else, you can help yourself by ensuring that
234you let Perl tell you about problem areas in your code. By turning
ac9dac7f 235on warnings and strictures, you can head off many problems before
500071f4
RGS
236they get too big. You can find out more about these in L<strict>
237and L<warnings>.
238
a9feb6cb
CBW
239 #!/usr/bin/perl
240 use strict;
241 use warnings;
ac9dac7f 242
500071f4
RGS
243Beyond that, the simplest debugger is the C<print> function. Use it
244to look at values as you run your program:
245
a9feb6cb 246 print STDERR "The value is [$value]\n";
68dc0745 247
a9feb6cb 248The L<Data::Dumper> module can pretty-print Perl data structures:
68dc0745 249
a9feb6cb
CBW
250 use Data::Dumper qw( Dumper );
251 print STDERR "The hash is " . Dumper( \%hash ) . "\n";
ac9dac7f 252
500071f4
RGS
253Perl comes with an interactive debugger, which you can start with the
254C<-d> switch. It's fully explained in L<perldebug>.
68dc0745 255
a9feb6cb 256If you'd like a graphical user interface and you have L<Tk>, you can use
500071f4 257C<ptkdb>. It's on CPAN and available for free.
68dc0745 258
c195e131 259If you need something much more sophisticated and controllable, Leon
a9feb6cb 260Brocard's L<Devel::ebug> (which you can call with the C<-D> switch as C<-Debug>)
500071f4
RGS
261gives you the programmatic hooks into everything you need to write your
262own (without too much pain and suffering).
92c2ed05 263
500071f4
RGS
264You can also use a commercial debugger such as Affrus (Mac OS X), Komodo
265from Activestate (Windows and Mac OS X), or EPIC (most platforms).
68dc0745 266
267=head2 How do I profile my Perl programs?
268
109f0441
S
269(contributed by brian d foy, updated Fri Jul 25 12:22:26 PDT 2008)
270
271The C<Devel> namespace has several modules which you can use to
c9dab4e9 272profile your Perl programs.
92c2ed05 273
a9feb6cb 274The L<Devel::NYTProf> (New York Times Profiler) does both statement
109f0441
S
275and subroutine profiling. It's available from CPAN and you also invoke
276it with the C<-d> switch:
92c2ed05 277
a9feb6cb 278 perl -d:NYTProf some_perl.pl
92c2ed05 279
c9dab4e9
FR
280It creates a database of the profile information that you can turn into
281reports. The C<nytprofhtml> command turns the data into an HTML report
a9feb6cb 282similar to the L<Devel::Cover> report:
92c2ed05 283
a9feb6cb 284 nytprofhtml
92c2ed05 285
be539103 286You might also be interested in using the L<Benchmark> to
109f0441
S
287measure and compare code snippets.
288
289You can read more about profiling in I<Programming Perl>, chapter 20,
290or I<Mastering Perl>, chapter 5.
291
292L<perldebguts> documents creating a custom debugger if you need to
293create a special sort of profiler. brian d foy describes the process
294in I<The Perl Journal>, "Creating a Perl Debugger",
c56bc1f6
CBW
295L<http://www.ddj.com/184404522> , and "Profiling in Perl"
296L<http://www.ddj.com/184404580> .
109f0441
S
297
298Perl.com has two interesting articles on profiling: "Profiling Perl",
c56bc1f6 299by Simon Cozens, L<http://www.perl.com/lpt/a/850> and "Debugging and
109f0441 300Profiling mod_perl Applications", by Frank Wiles,
c56bc1f6 301L<http://www.perl.com/pub/a/2006/02/09/debug_mod_perl.html> .
109f0441
S
302
303Randal L. Schwartz writes about profiling in "Speeding up Your Perl
304Programs" for I<Unix Review>,
c56bc1f6 305L<http://www.stonehenge.com/merlyn/UnixReview/col49.html> , and "Profiling
109f0441 306in Template Toolkit via Overriding" for I<Linux Magazine>,
c56bc1f6 307L<http://www.stonehenge.com/merlyn/LinuxMag/col75.html> .
65acb1b1 308
68dc0745 309=head2 How do I cross-reference my Perl programs?
310
a9feb6cb 311The L<B::Xref> module can be used to generate cross-reference reports
83ded9ee 312for Perl programs.
68dc0745 313
c8db1d39 314 perl -MO=Xref[,OPTIONS] scriptname.plx
68dc0745 315
316=head2 Is there a pretty-printer (formatter) for Perl?
317
329d453a
CBW
318L<Perl::Tidy> comes with a perl script L<perltidy> which indents and
319reformats Perl scripts to make them easier to read by trying to follow
a9feb6cb
CBW
320the rules of the L<perlstyle>. If you write Perl, or spend much time reading
321Perl, you will probably find it useful.
55e174a4
JH
322
323Of course, if you simply follow the guidelines in L<perlstyle>,
c56bc1f6
CBW
324you shouldn't need to reformat. The habit of formatting your code
325as you write it will help prevent bugs. Your editor can and should
326help you with this. The perl-mode or newer cperl-mode for emacs
55e174a4
JH
327can provide remarkable amounts of help with most (but not all)
328code, and even less programmable editors can provide significant
c56bc1f6 329assistance. Tom Christiansen and many other VI users swear by
55e174a4 330the following settings in vi and its clones:
65acb1b1
TC
331
332 set ai sw=4
d92eb7b0 333 map! ^O {^M}^[O^T
65acb1b1 334
55e174a4 335Put that in your F<.exrc> file (replacing the caret characters
c56bc1f6 336with control characters) and away you go. In insert mode, ^T is
ac9dac7f 337for indenting, ^D is for undenting, and ^O is for blockdenting--as
c56bc1f6
CBW
338it were. A more complete example, with comments, can be found at
339L<http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz>
92c2ed05 340
65acb1b1
TC
341=head2 Is there an IDE or Windows Perl Editor?
342
6641ed39
JH
343Perl programs are just plain text, so any editor will do.
344
c56bc1f6 345If you're on Unix, you already have an IDE--Unix itself. The Unix
6641ed39 346philosophy is the philosophy of several small tools that each do one
c56bc1f6 347thing and do it well. It's like a carpenter's toolbox.
6641ed39 348
28b41a80
RGS
349If you want an IDE, check the following (in alphabetical order, not
350order of preference):
68fbfbd7
JH
351
352=over 4
353
28b41a80
RGS
354=item Eclipse
355
c56bc1f6 356L<http://e-p-i-c.sf.net/>
b68463f7 357
6670e5e7 358The Eclipse Perl Integration Project integrates Perl
28b41a80
RGS
359editing/debugging with Eclipse.
360
b68463f7
RGS
361=item Enginsite
362
c56bc1f6 363L<http://www.enginsite.com/>
b68463f7
RGS
364
365Perl Editor by EngInSite is a complete integrated development
366environment (IDE) for creating, testing, and debugging Perl scripts;
367the tool runs on Windows 9x/NT/2000/XP or later.
28b41a80 368
338a1057
SH
369=item Kephra
370
371L<http://kephra.sf.net>
372
dd741cc9
SH
373GUI editor written in Perl using wxWidgets and Scintilla with lots of smaller features.
374Aims for a UI based on Perl principles like TIMTOWTDI and "easy things should be easy,
375hard things should be possible".
338a1057 376
68fbfbd7
JH
377=item Komodo
378
c56bc1f6 379L<http://www.ActiveState.com/Products/Komodo/>
b68463f7 380
28b41a80
RGS
381ActiveState's cross-platform (as of October 2004, that's Windows, Linux,
382and Solaris), multi-language IDE has Perl support, including a regular expression
b68463f7 383debugger and remote debugging.
68fbfbd7 384
589a5df2 385=item Notepad++
386
c56bc1f6 387L<http://notepad-plus.sourceforge.net/>
589a5df2 388
ac1094a1
JH
389=item Open Perl IDE
390
c56bc1f6 391L<http://open-perl-ide.sourceforge.net/>
b68463f7 392
ac1094a1
JH
393Open Perl IDE is an integrated development environment for writing
394and debugging Perl scripts with ActiveState's ActivePerl distribution
395under Windows 95/98/NT/2000.
396
28b41a80
RGS
397=item OptiPerl
398
c56bc1f6 399L<http://www.optiperl.com/>
b68463f7
RGS
400
401OptiPerl is a Windows IDE with simulated CGI environment, including
761f3ec6 402debugger and syntax-highlighting editor.
28b41a80 403
109f0441
S
404=item Padre
405
c56bc1f6 406L<http://padre.perlide.org/>
109f0441 407
589a5df2 408Padre is cross-platform IDE for Perl written in Perl using wxWidgets to provide
843331c7
CBW
409a native look and feel. It's open source under the Artistic License. It
410is one of the newer Perl IDEs.
109f0441 411
5ca69f12
JH
412=item PerlBuilder
413
c56bc1f6 414L<http://www.solutionsoft.com/perl.htm>
b68463f7 415
109f0441 416PerlBuilder is an integrated development environment for Windows that
b68463f7 417supports Perl development.
8782d048 418
68fbfbd7
JH
419=item visiPerl+
420
c56bc1f6 421L<http://helpconsulting.net/visiperl/index.html>
b68463f7 422
ac1094a1 423From Help Consulting, for Windows.
68fbfbd7 424
28b41a80
RGS
425=item Visual Perl
426
c56bc1f6 427L<http://www.activestate.com/Products/Visual_Perl/>
b68463f7 428
28b41a80 429Visual Perl is a Visual Studio.NET plug-in from ActiveState.
29b1171f 430
b68463f7
RGS
431=item Zeus
432
c56bc1f6 433L<http://www.zeusedit.com/lookmain.html>
b68463f7 434
6ae27647 435Zeus for Windows is another Win32 multi-language editor/IDE
761f3ec6 436that comes with support for Perl.
29b1171f 437
68fbfbd7
JH
438=back
439
b68463f7
RGS
440For editors: if you're on Unix you probably have vi or a vi clone
441already, and possibly an emacs too, so you may not need to download
442anything. In any emacs the cperl-mode (M-x cperl-mode) gives you
443perhaps the best available Perl editing mode in any editor.
444
445If you are using Windows, you can use any editor that lets you work
589a5df2 446with plain text, such as NotePad or WordPad. Word processors, such as
b68463f7
RGS
447Microsoft Word or WordPerfect, typically do not work since they insert
448all sorts of behind-the-scenes information, although some allow you to
589a5df2 449save files as "Text Only". You can also download text editors designed
450specifically for programming, such as Textpad (
c56bc1f6 451L<http://www.textpad.com/> ) and UltraEdit ( L<http://www.ultraedit.com/> ),
589a5df2 452among others.
453
454If you are using MacOS, the same concerns apply. MacPerl (for Classic
455environments) comes with a simple editor. Popular external editors are
f3dd8566 456BBEdit ( L<http://www.barebones.com/products/bbedit/> ) or Alpha (
c56bc1f6 457L<http://www.his.com/~jguyer/Alpha/Alpha8.html> ). MacOS X users can use
589a5df2 458Unix editors as well.
459
460=over 4
461
462=item GNU Emacs
463
c56bc1f6 464L<http://www.gnu.org/software/emacs/windows/ntemacs.html>
589a5df2 465
466=item MicroEMACS
467
c56bc1f6 468L<http://www.microemacs.de/>
589a5df2 469
470=item XEmacs
471
c56bc1f6 472L<http://www.xemacs.org/Download/index.html>
589a5df2 473
474=item Jed
475
c56bc1f6 476L<http://space.mit.edu/~davis/jed/>
589a5df2 477
478=back
479
480or a vi clone such as
481
482=over 4
483
589a5df2 484=item Vim
485
c56bc1f6 486L<http://www.vim.org/>
589a5df2 487
8fa77384 488=item Vile
589a5df2 489
c56bc1f6 490L<http://dickey.his.com/vile/vile.html>
589a5df2 491
8fa77384 492=back
589a5df2 493
494The following are Win32 multilanguage editor/IDEs that support Perl:
495
496=over 4
497
498=item Codewright
499
c56bc1f6 500L<http://www.borland.com/codewright/>
589a5df2 501
502=item MultiEdit
503
c56bc1f6 504L<http://www.MultiEdit.com/>
589a5df2 505
506=item SlickEdit
507
c56bc1f6 508L<http://www.slickedit.com/>
589a5df2 509
510=item ConTEXT
511
c56bc1f6 512L<http://www.contexteditor.org/>
589a5df2 513
514=back
515
516There is also a toyedit Text widget based editor written in Perl
c56bc1f6
CBW
517that is distributed with the Tk module on CPAN. The ptkdb
518( L<http://ptkdb.sourceforge.net/> ) is a Perl/Tk-based debugger that
519acts as a development environment of sorts. Perl Composer
520( L<http://perlcomposer.sourceforge.net/> ) is an IDE for Perl/Tk
589a5df2 521GUI creation.
522
523In addition to an editor/IDE you might be interested in a more
c56bc1f6 524powerful shell environment for Win32. Your options include
589a5df2 525
526=over 4
527
528=item Bash
529
c56bc1f6 530from the Cygwin package ( L<http://sources.redhat.com/cygwin/> )
589a5df2 531
532=item Ksh
533
c56bc1f6
CBW
534from the MKS Toolkit ( L<http://www.mkssoftware.com/> ), or the Bourne shell of
535the U/WIN environment ( L<http://www.research.att.com/sw/tools/uwin/> )
589a5df2 536
537=item Tcsh
538
c56bc1f6
CBW
539L<ftp://ftp.astron.com/pub/tcsh/> , see also
540L<http://www.primate.wisc.edu/software/csh-tcsh-book/>
589a5df2 541
542=item Zsh
543
c56bc1f6 544L<http://www.zsh.org/>
589a5df2 545
546=back
547
548MKS and U/WIN are commercial (U/WIN is free for educational and
549research purposes), Cygwin is covered by the GNU General Public
c56bc1f6 550License (but that shouldn't matter for Perl use). The Cygwin, MKS,
589a5df2 551and U/WIN all contain (in addition to the shells) a comprehensive set
23bec515 552of standard Unix toolkit utilities.
589a5df2 553
554If you're transferring text files between Unix and Windows using FTP
555be sure to transfer them in ASCII mode so the ends of lines are
556appropriately converted.
557
558On Mac OS the MacPerl Application comes with a simple 32k text editor
c56bc1f6 559that behaves like a rudimentary IDE. In contrast to the MacPerl Application
589a5df2 560the MPW Perl tool can make use of the MPW Shell itself as an editor (with
561no 32k limit).
562
563=over 4
564
565=item Affrus
566
567is a full Perl development environment with full debugger support
c56bc1f6 568( L<http://www.latenightsw.com> ).
589a5df2 569
570=item Alpha
571
572is an editor, written and extensible in Tcl, that nonetheless has
761f3ec6 573built-in support for several popular markup and programming languages,
c56bc1f6 574including Perl and HTML ( L<http://www.his.com/~jguyer/Alpha/Alpha8.html> ).
589a5df2 575
f3dd8566 576=item BBEdit and TextWrangler
589a5df2 577
578are text editors for Mac OS that have a Perl sensitivity mode
f3dd8566 579( L<http://www.barebones.com/> ).
589a5df2 580
581=back
582
583=head2 Where can I get Perl macros for vi?
584
585For a complete version of Tom Christiansen's vi configuration file,
c56bc1f6
CBW
586see L<http://www.cpan.org/authors/Tom_Christiansen/scripts/toms.exrc.gz> ,
587the standard benchmark file for vi emulators. The file runs best with nvi,
589a5df2 588the current version of vi out of Berkeley, which incidentally can be built
c56bc1f6 589with an embedded Perl interpreter--see L<http://www.cpan.org/src/misc/> .
589a5df2 590
d12d61cf 591=head2 Where can I get perl-mode or cperl-mode for emacs?
592X<emacs>
589a5df2 593
594Since Emacs version 19 patchlevel 22 or so, there have been both a
c56bc1f6 595perl-mode.el and support for the Perl debugger built in. These should
589a5df2 596come with the standard Emacs 19 distribution.
597
589a5df2 598Note that the perl-mode of emacs will have fits with C<"main'foo">
c56bc1f6 599(single quote), and mess up the indentation and highlighting. You
589a5df2 600are probably using C<"main::foo"> in new Perl code anyway, so this
601shouldn't be an issue.
602
c56bc1f6 603For CPerlMode, see L<http://www.emacswiki.org/cgi-bin/wiki/CPerlMode>
d12d61cf 604
589a5df2 605=head2 How can I use curses with Perl?
606
607The Curses module from CPAN provides a dynamically loadable object
c56bc1f6
CBW
608module interface to a curses library. A small demo can be found at the
609directory L<http://www.cpan.org/authors/Tom_Christiansen/scripts/rep.gz> ;
589a5df2 610this program repeats a command and updates the screen as needed, rendering
611B<rep ps axu> similar to B<top>.
612
613=head2 How can I write a GUI (X, Tk, Gtk, etc.) in Perl?
614X<GUI> X<Tk> X<Wx> X<WxWidgets> X<Gtk> X<Gtk2> X<CamelBones> X<Qt>
615
616(contributed by Ben Morrow)
617
618There are a number of modules which let you write GUIs in Perl. Most
619GUI toolkits have a perl interface: an incomplete list follows.
620
621=over 4
622
623=item Tk
624
625This works under Unix and Windows, and the current version doesn't
626look half as bad under Windows as it used to. Some of the gui elements
627still don't 'feel' quite right, though. The interface is very natural
628and 'perlish', making it easy to use in small scripts that just need a
629simple gui. It hasn't been updated in a while.
630
631=item Wx
632
633This is a Perl binding for the cross-platform wxWidgets toolkit
c56bc1f6 634( L<http://www.wxwidgets.org> ). It works under Unix, Win32 and Mac OS X,
589a5df2 635using native widgets (Gtk under Unix). The interface follows the C++
636interface closely, but the documentation is a little sparse for someone
637who doesn't know the library, mostly just referring you to the C++
638documentation.
639
640=item Gtk and Gtk2
641
c56bc1f6 642These are Perl bindings for the Gtk toolkit ( L<http://www.gtk.org> ). The
589a5df2 643interface changed significantly between versions 1 and 2 so they have
644separate Perl modules. It runs under Unix, Win32 and Mac OS X (currently
645it requires an X server on Mac OS, but a 'native' port is underway), and
c69ca1d4 646the widgets look the same on every platform: i.e., they don't match the
589a5df2 647native widgets. As with Wx, the Perl bindings follow the C API closely,
648and the documentation requires you to read the C documentation to
649understand it.
650
651=item Win32::GUI
652
653This provides access to most of the Win32 GUI widgets from Perl.
654Obviously, it only runs under Win32, and uses native widgets. The Perl
655interface doesn't really follow the C interface: it's been made more
656Perlish, and the documentation is pretty good. More advanced stuff may
657require familiarity with the C Win32 APIs, or reference to MSDN.
658
659=item CamelBones
660
c56bc1f6 661CamelBones ( L<http://camelbones.sourceforge.net> ) is a Perl interface to
589a5df2 662Mac OS X's Cocoa GUI toolkit, and as such can be used to produce native
663GUIs on Mac OS X. It's not on CPAN, as it requires frameworks that
664CPAN.pm doesn't know how to install, but installation is via the
665standard OSX package installer. The Perl API is, again, very close to
666the ObjC API it's wrapping, and the documentation just tells you how to
667translate from one to the other.
668
669=item Qt
670
671There is a Perl interface to TrollTech's Qt toolkit, but it does not
672appear to be maintained.
673
674=item Athena
675
676Sx is an interface to the Athena widget set which comes with X, but
677again it appears not to be much used nowadays.
678
679=back
680
681=head2 How can I make my Perl program run faster?
682
c56bc1f6
CBW
683The best way to do this is to come up with a better algorithm. This
684can often make a dramatic difference. Jon Bentley's book
589a5df2 685I<Programming Pearls> (that's not a misspelling!) has some good tips
c56bc1f6 686on optimization, too. Advice on benchmarking boils down to: benchmark
589a5df2 687and profile to make sure you're optimizing the right part, look for
688better algorithms instead of microtuning your code, and when all else
c56bc1f6 689fails consider just buying faster hardware. You will probably want to
589a5df2 690read the answer to the earlier question "How do I profile my Perl
691programs?" if you haven't done so already.
692
c56bc1f6 693A different approach is to autoload seldom-used Perl code. See the
589a5df2 694AutoSplit and AutoLoader modules in the standard distribution for
c56bc1f6 695that. Or you could locate the bottleneck and think about writing just
589a5df2 696that part in C, the way we used to take bottlenecks in C code and
c56bc1f6 697write them in assembler. Similar to rewriting in C, modules that have
589a5df2 698critical sections can be written in C (for instance, the PDL module
699from CPAN).
700
701If you're currently linking your perl executable to a shared
702I<libc.so>, you can often gain a 10-25% performance benefit by
c56bc1f6 703rebuilding it to link with a static libc.a instead. This will make a
589a5df2 704bigger perl executable, but your Perl programs (and programmers) may
c56bc1f6 705thank you for it. See the F<INSTALL> file in the source distribution
589a5df2 706for more information.
707
708The undump program was an ancient attempt to speed up Perl program by
c56bc1f6 709storing the already-compiled form to disk. This is no longer a viable
589a5df2 710option, as it only worked on a few architectures, and wasn't a good
711solution anyway.
712
713=head2 How can I make my Perl program take less memory?
714
715When it comes to time-space tradeoffs, Perl nearly always prefers to
c56bc1f6
CBW
716throw memory at a problem. Scalars in Perl use more memory than
717strings in C, arrays take more than that, and hashes use even more. While
589a5df2 718there's still a lot to be done, recent releases have been addressing
c56bc1f6 719these issues. For example, as of 5.004, duplicate hash keys are
589a5df2 720shared amongst all hashes using them, so require no reallocation.
721
722In some cases, using substr() or vec() to simulate arrays can be
c56bc1f6 723highly beneficial. For example, an array of a thousand booleans will
589a5df2 724take at least 20,000 bytes of space, but it can be turned into one
c56bc1f6 725125-byte bit vector--a considerable memory savings. The standard
589a5df2 726Tie::SubstrHash module can also help for certain types of data
c56bc1f6 727structure. If you're working with specialist data structures
589a5df2 728(matrices, for instance) modules that implement these in C may use
729less memory than equivalent Perl modules.
730
731Another thing to try is learning whether your Perl was compiled with
c56bc1f6 732the system malloc or with Perl's builtin malloc. Whichever one it
589a5df2 733is, try using the other one and see whether this makes a difference.
734Information about malloc is in the F<INSTALL> file in the source
c56bc1f6 735distribution. You can find out whether you are using perl's malloc by
589a5df2 736typing C<perl -V:usemymalloc>.
737
738Of course, the best way to save memory is to not do anything to waste
739it in the first place. Good programming practices can go a long way
740toward this:
741
742=over 4
743
9d055b1a 744=item Don't slurp!
589a5df2 745
746Don't read an entire file into memory if you can process it line
747by line. Or more concretely, use a loop like this:
748
a9feb6cb
CBW
749 #
750 # Good Idea
751 #
c56bc1f6 752 while (my $line = <$file_handle>) {
a9feb6cb
CBW
753 # ...
754 }
589a5df2 755
756instead of this:
757
a9feb6cb
CBW
758 #
759 # Bad Idea
760 #
c56bc1f6 761 my @data = <$file_handle>;
a9feb6cb
CBW
762 foreach (@data) {
763 # ...
764 }
589a5df2 765
766When the files you're processing are small, it doesn't much matter which
767way you do it, but it makes a huge difference when they start getting
768larger.
769
9d055b1a 770=item Use map and grep selectively
589a5df2 771
772Remember that both map and grep expect a LIST argument, so doing this:
773
c56bc1f6 774 @wanted = grep {/pattern/} <$file_handle>;
589a5df2 775
776will cause the entire file to be slurped. For large files, it's better
777to loop:
778
c56bc1f6 779 while (<$file_handle>) {
589a5df2 780 push(@wanted, $_) if /pattern/;
781 }
782
9d055b1a 783=item Avoid unnecessary quotes and stringification
589a5df2 784
785Don't quote large strings unless absolutely necessary:
786
787 my $copy = "$large_string";
788
789makes 2 copies of $large_string (one for $copy and another for the
790quotes), whereas
791
792 my $copy = $large_string;
793
794only makes one copy.
795
796Ditto for stringifying large arrays:
797
a9feb6cb
CBW
798 {
799 local $, = "\n";
800 print @big_array;
801 }
589a5df2 802
803is much more memory-efficient than either
804
a9feb6cb 805 print join "\n", @big_array;
589a5df2 806
807or
808
a9feb6cb
CBW
809 {
810 local $" = "\n";
811 print "@big_array";
812 }
589a5df2 813
814
9d055b1a 815=item Pass by reference
589a5df2 816
817Pass arrays and hashes by reference, not by value. For one thing, it's
818the only way to pass multiple lists or hashes (or both) in a single
819call/return. It also avoids creating a copy of all the contents. This
820requires some judgement, however, because any changes will be propagated
821back to the original data. If you really want to mangle (er, modify) a
822copy, you'll have to sacrifice the memory needed to make one.
823
9d055b1a 824=item Tie large variables to disk
589a5df2 825
826For "big" data stores (i.e. ones that exceed available memory) consider
827using one of the DB modules to store it on disk instead of in RAM. This
828will incur a penalty in access time, but that's probably better than
829causing your hard disk to thrash due to massive swapping.
830
831=back
832
833=head2 Is it safe to return a reference to local or lexical data?
834
835Yes. Perl's garbage collection system takes care of this so
836everything works out right.
837
838 sub makeone {
a9feb6cb
CBW
839 my @a = ( 1 .. 10 );
840 return \@a;
589a5df2 841 }
842
843 for ( 1 .. 10 ) {
844 push @many, makeone();
845 }
846
847 print $many[4][5], "\n";
848
849 print "@many\n";
850
851=head2 How can I free an array or hash so my program shrinks?
852
853(contributed by Michael Carman)
854
855You usually can't. Memory allocated to lexicals (i.e. my() variables)
856cannot be reclaimed or reused even if they go out of scope. It is
857reserved in case the variables come back into scope. Memory allocated
858to global variables can be reused (within your program) by using
859undef() and/or delete().
860
861On most operating systems, memory allocated to a program can never be
862returned to the system. That's why long-running programs sometimes re-
863exec themselves. Some operating systems (notably, systems that use
864mmap(2) for allocating large chunks of memory) can reclaim memory that
865is no longer used, but on such systems, perl must be configured and
866compiled to use the OS's malloc, not perl's.
867
868In general, memory allocation and de-allocation isn't something you can
869or should be worrying about much in Perl.
870
871See also "How can I make my Perl program take less memory?"
872
873=head2 How can I make my CGI script more efficient?
874
875Beyond the normal measures described to make general Perl programs
c56bc1f6
CBW
876faster or smaller, a CGI program has additional issues. It may be run
877several times per second. Given that each time it runs it will need
589a5df2 878to be re-compiled and will often allocate a megabyte or more of system
c56bc1f6 879memory, this can be a killer. Compiling into C B<isn't going to help
589a5df2 880you> because the process start-up overhead is where the bottleneck is.
881
c56bc1f6 882There are three popular ways to avoid this overhead. One solution
589a5df2 883involves running the Apache HTTP server (available from
c56bc1f6 884L<http://www.apache.org/> ) with either of the mod_perl or mod_fastcgi
589a5df2 885plugin modules.
886
887With mod_perl and the Apache::Registry module (distributed with
888mod_perl), httpd will run with an embedded Perl interpreter which
889pre-compiles your script and then executes it within the same address
c56bc1f6 890space without forking. The Apache extension also gives Perl access to
589a5df2 891the internal server API, so modules written in Perl can do just about
c56bc1f6
CBW
892anything a module written in C can. For more on mod_perl, see
893L<http://perl.apache.org/>
589a5df2 894
895With the FCGI module (from CPAN) and the mod_fastcgi
c56bc1f6 896module (available from L<http://www.fastcgi.com/> ) each of your Perl
589a5df2 897programs becomes a permanent CGI daemon process.
898
c56bc1f6
CBW
899Finally, L<Plack> is a Perl module and toolkit that contains PSGI middleware,
900helpers and adapters to web servers, allowing you to easily deploy scripts which
901can continue running, and provides flexibility with regards to which web server
902you use. It can allow existing CGI scripts to enjoy this flexibility and
903performance with minimal changes, or can be used along with modern Perl web
904frameworks to make writing and deploying web services with Perl a breeze.
905
329d453a 906These solutions can have far-reaching effects on your system and on the way you
c56bc1f6 907write your CGI programs, so investigate them with care.
589a5df2 908
761f3ec6 909See also
c56bc1f6 910L<http://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/> .
589a5df2 911
912=head2 How can I hide the source for my Perl program?
913
914Delete it. :-) Seriously, there are a number of (mostly
915unsatisfactory) solutions with varying levels of "security".
916
917First of all, however, you I<can't> take away read permission, because
918the source code has to be readable in order to be compiled and
c56bc1f6 919interpreted. (That doesn't mean that a CGI script's source is
589a5df2 920readable by people on the web, though--only by people with access to
921the filesystem.) So you have to leave the permissions at the socially
922friendly 0755 level.
923
c56bc1f6 924Some people regard this as a security problem. If your program does
589a5df2 925insecure things and relies on people not knowing how to exploit those
c56bc1f6 926insecurities, it is not secure. It is often possible for someone to
589a5df2 927determine the insecure things and exploit them without viewing the
c56bc1f6 928source. Security through obscurity, the name for hiding your bugs
589a5df2 929instead of fixing them, is little security indeed.
930
931You can try using encryption via source filters (Starting from Perl
9325.8 the Filter::Simple and Filter::Util::Call modules are included in
933the standard distribution), but any decent programmer will be able to
c56bc1f6 934decrypt it. You can try using the byte code compiler and interpreter
589a5df2 935described later in L<perlfaq3>, but the curious might still be able to
936de-compile it. You can try using the native-code compiler described
c56bc1f6 937later, but crackers might be able to disassemble it. These pose
589a5df2 938varying degrees of difficulty to people wanting to get at your code,
939but none can definitively conceal it (true of every language, not just
940Perl).
941
c56bc1f6 942It is very easy to recover the source of Perl programs. You simply
589a5df2 943feed the program to the perl interpreter and use the modules in
c56bc1f6
CBW
944the B:: hierarchy. The B::Deparse module should be able to
945defeat most attempts to hide source. Again, this is not
589a5df2 946unique to Perl.
947
948If you're concerned about people profiting from your code, then the
949bottom line is that nothing but a restrictive license will give you
c56bc1f6 950legal security. License your software and pepper it with threatening
589a5df2 951statements like "This is unpublished proprietary software of XYZ Corp.
952Your access to it does not give you permission to use it blah blah
953blah." We are not lawyers, of course, so you should see a lawyer if
954you want to be sure your license's wording will stand up in court.
955
956=head2 How can I compile my Perl program into byte code or C?
957
958(contributed by brian d foy)
959
c56bc1f6
CBW
960In general, you can't do this. There are some things that may work
961for your situation though. People usually ask this question
589a5df2 962because they want to distribute their works without giving away
963the source code, and most solutions trade disk space for convenience.
964You probably won't see much of a speed increase either, since most
965solutions simply bundle a Perl interpreter in the final product
966(but see L<How can I make my Perl program run faster?>).
967
c56bc1f6
CBW
968The Perl Archive Toolkit ( L<http://par.perl.org/> ) is Perl's
969analog to Java's JAR. It's freely available and on CPAN (
970L<http://search.cpan.org/dist/PAR/> ).
589a5df2 971
972There are also some commercial products that may work for you, although
973you have to buy a license for them.
974
c56bc1f6 975The Perl Dev Kit ( L<http://www.activestate.com/Products/Perl_Dev_Kit/> )
589a5df2 976from ActiveState can "Turn your Perl programs into ready-to-run
977executables for HP-UX, Linux, Solaris and Windows."
978
c56bc1f6
CBW
979Perl2Exe ( L<http://www.indigostar.com/perl2exe.htm> ) is a command line
980program for converting perl scripts to executable files. It targets both
23bec515 981Windows and Unix platforms.
589a5df2 982
983=head2 How can I get C<#!perl> to work on [MS-DOS,NT,...]?
984
985For OS/2 just use
986
987 extproc perl -S -your_switches
988
989as the first line in C<*.cmd> file (C<-S> due to a bug in cmd.exe's
c56bc1f6 990"extproc" handling). For DOS one should first invent a corresponding
589a5df2 991batch file and codify it in C<ALTERNATE_SHEBANG> (see the
992F<dosish.h> file in the source distribution for more information).
993
994The Win95/NT installation, when using the ActiveState port of Perl,
995will modify the Registry to associate the C<.pl> extension with the
c56bc1f6 996perl interpreter. If you install another port, perhaps even building
589a5df2 997your own Win95/NT Perl from the standard sources by using a Windows port
998of gcc (e.g., with cygwin or mingw32), then you'll have to modify
c56bc1f6 999the Registry yourself. In addition to associating C<.pl> with the
589a5df2 1000interpreter, NT people can use: C<SET PATHEXT=%PATHEXT%;.PL> to let them
1001run the program C<install-linux.pl> merely by typing C<install-linux>.
1002
1003Under "Classic" MacOS, a perl program will have the appropriate Creator and
1004Type, so that double-clicking them will invoke the MacPerl application.
1005Under Mac OS X, clickable apps can be made from any C<#!> script using Wil
c56bc1f6 1006Sanchez' DropScript utility: L<http://www.wsanchez.net/software/> .
589a5df2 1007
1008I<IMPORTANT!>: Whatever you do, PLEASE don't get frustrated, and just
1009throw the perl interpreter into your cgi-bin directory, in order to
c56bc1f6
CBW
1010get your programs working for a web server. This is an EXTREMELY big
1011security risk. Take the time to figure out how to do it correctly.
589a5df2 1012
1013=head2 Can I write useful Perl programs on the command line?
1014
c56bc1f6 1015Yes. Read L<perlrun> for more information. Some examples follow.
589a5df2 1016(These assume standard Unix shell quoting rules.)
1017
1018 # sum first and last fields
1019 perl -lane 'print $F[0] + $F[-1]' *
1020
1021 # identify text files
1022 perl -le 'for(@ARGV) {print if -f && -T _}' *
1023
1024 # remove (most) comments from C program
1025 perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
1026
1027 # make file a month younger than today, defeating reaper daemons
1028 perl -e '$X=24*60*60; utime(time(),time() + 30 * $X,@ARGV)' *
1029
1030 # find first unused uid
1031 perl -le '$i++ while getpwuid($i); print $i'
1032
1033 # display reasonable manpath
1034 echo $PATH | perl -nl -072 -e '
a9feb6cb 1035 s![^/+]*$!man!&&-d&&!$s{$_}++&&push@m,$_;END{print"@m"}'
589a5df2 1036
1037OK, the last one was actually an Obfuscated Perl Contest entry. :-)
1038
1039=head2 Why don't Perl one-liners work on my DOS/Mac/VMS system?
1040
1041The problem is usually that the command interpreters on those systems
1042have rather different ideas about quoting than the Unix shells under
c56bc1f6 1043which the one-liners were created. On some systems, you may have to
589a5df2 1044change single-quotes to double ones, which you must I<NOT> do on Unix
c56bc1f6 1045or Plan9 systems. You might also have to change a single % to a %%.
589a5df2 1046
1047For example:
1048
1049 # Unix (including Mac OS X)
1050 perl -e 'print "Hello world\n"'
1051
1052 # DOS, etc.
1053 perl -e "print \"Hello world\n\""
1054
1055 # Mac Classic
1056 print "Hello world\n"
1057 (then Run "Myscript" or Shift-Command-R)
1058
1059 # MPW
1060 perl -e 'print "Hello world\n"'
1061
1062 # VMS
1063 perl -e "print ""Hello world\n"""
1064
1065The problem is that none of these examples are reliable: they depend on the
c56bc1f6
CBW
1066command interpreter. Under Unix, the first two often work. Under DOS,
1067it's entirely possible that neither works. If 4DOS was the command shell,
589a5df2 1068you'd probably have better luck like this:
1069
1070 perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
1071
c56bc1f6 1072Under the Mac, it depends which environment you are using. The MacPerl
589a5df2 1073shell, or MPW, is much like Unix shells in its support for several
1074quoting variants, except that it makes free use of the Mac's non-ASCII
1075characters as control characters.
1076
1077Using qq(), q(), and qx(), instead of "double quotes", 'single
1078quotes', and `backticks`, may make one-liners easier to write.
1079
c56bc1f6 1080There is no general solution to all of this. It is a mess.
589a5df2 1081
1082[Some of this answer was contributed by Kenneth Albanowski.]
1083
1084=head2 Where can I learn about CGI or Web programming in Perl?
1085
c56bc1f6 1086For modules, get the CGI or LWP modules from CPAN. For textbooks,
589a5df2 1087see the two especially dedicated to web stuff in the question on
c56bc1f6 1088books. For problems and questions related to the web, like "Why
589a5df2 1089do I get 500 Errors" or "Why doesn't it run from the browser right
1090when it runs fine on the command line", see the troubleshooting
1091guides and references in L<perlfaq9> or in the CGI MetaFAQ:
1092
c56bc1f6
CBW
1093 L<http://www.perl.org/CGI_MetaFAQ.html>
1094
1095Looking in to L<Plack> and modern Perl web frameworks is highly recommended,
1096though; web programming in Perl has evolved a long way from the old days of
1097simple CGI scripts.
589a5df2 1098
1099=head2 Where can I learn about object-oriented Perl programming?
1100
dd741cc9
SH
1101A good place to start is L<perlootut>, and you can use L<perlobj> for
1102reference.
589a5df2 1103
1104A good book on OO on Perl is the "Object-Oriented Perl"
1105by Damian Conway from Manning Publications, or "Intermediate Perl"
1106by Randal Schwartz, brian d foy, and Tom Phoenix from O'Reilly Media.
1107
1108=head2 Where can I learn about linking C with Perl?
1109
1110If you want to call C from Perl, start with L<perlxstut>,
c56bc1f6 1111moving on to L<perlxs>, L<xsubpp>, and L<perlguts>. If you want to
589a5df2 1112call Perl from C, then read L<perlembed>, L<perlcall>, and
c56bc1f6 1113L<perlguts>. Don't forget that you can learn a lot from looking at
589a5df2 1114how the authors of existing extension modules wrote their code and
1115solved their problems.
1116
1117You might not need all the power of XS. The Inline::C module lets
1118you put C code directly in your Perl source. It handles all the
1119magic to make it work. You still have to learn at least some of
1120the perl API but you won't have to deal with the complexity of the
1121XS support files.
1122
1123=head2 I've read perlembed, perlguts, etc., but I can't embed perl in my C program; what am I doing wrong?
1124
c56bc1f6
CBW
1125Download the ExtUtils::Embed kit from CPAN and run `make test'. If
1126the tests pass, read the pods again and again and again. If they
589a5df2 1127fail, see L<perlbug> and send a bug report with the output of
1128C<make test TEST_VERBOSE=1> along with C<perl -V>.
1129
1130=head2 When I tried to run my script, I got this message. What does it mean?
1131
1132A complete list of Perl's error messages and warnings with explanatory
1133text can be found in L<perldiag>. You can also use the splain program
1134(distributed with Perl) to explain the error messages:
1135
1136 perl program 2>diag.out
1137 splain [-v] [-p] diag.out
1138
1139or change your program to explain the messages for you:
1140
1141 use diagnostics;
1142
1143or
1144
1145 use diagnostics -verbose;
1146
1147=head2 What's MakeMaker?
1148
1149(contributed by brian d foy)
1150
a9feb6cb 1151The L<ExtUtils::MakeMaker> module, better known simply as "MakeMaker",
589a5df2 1152turns a Perl script, typically called C<Makefile.PL>, into a Makefile.
23bec515 1153The Unix tool C<make> uses this file to manage dependencies and actions
589a5df2 1154to process and install a Perl distribution.
1155
589a5df2 1156=head1 AUTHOR AND COPYRIGHT
1157
8d2e243f 1158Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and
589a5df2 1159other authors as noted. All rights reserved.
1160
1161This documentation is free; you can redistribute it and/or modify it
1162under the same terms as Perl itself.
1163
1164Irrespective of its distribution, all code examples here are in the public
c56bc1f6 1165domain. You are permitted and encouraged to use this code and any
589a5df2 1166derivatives thereof in your own programs for fun or for profit as you
c56bc1f6 1167see fit. A simple comment in the code giving credit to the FAQ would
589a5df2 1168be courteous but is not required.