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