This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
gcc version matching didn't.
[perl5.git] / pod / perlfaq3.pod
index efa764d..7e0c193 100644 (file)
@@ -1,6 +1,6 @@
 =head1 NAME
 
-perlfaq3 - Programming Tools ($Revision: 1.4 $, $Date: 2001/10/02 19:42:02 $)
+perlfaq3 - Programming Tools ($Revision: 1.10 $, $Date: 2001/11/19 17:09:37 $)
 
 =head1 DESCRIPTION
 
@@ -22,7 +22,7 @@ Have you read the appropriate manpages?  Here's a brief index:
        Regexes         perlre, perlfunc, perlop, perllocale
        Moving to perl5 perltrap, perl
        Linking w/C     perlxstut, perlxs, perlcall, perlguts, perlembed
-       Various         http://www.perl.com/CPAN/doc/FMTEYEWTK/index.html
+       Various         http://www.cpan.org/doc/FMTEYEWTK/index.html
                        (not a man-page but still useful)
 
 A crude table of contents for the Perl manpage set is found in L<perltoc>.
@@ -51,7 +51,7 @@ Which includes the following description:
     of a Unix shell with the power of Perl. The goal is to eventually
     have a full featured shell that behaves as expected for normal
     shell activity. But, the Perl Shell will use Perl syntax and
-    functionality for for control-flow statements and other things.
+    functionality for control-flow statements and other things.
 
 The Shell.pm module (distributed with Perl) makes Perl try commands
 which aren't part of the Perl language as shell commands.  perlsh
@@ -152,11 +152,11 @@ Put that in your F<.exrc> file (replacing the caret characters
 with control characters) and away you go.  In insert mode, ^T is
 for indenting, ^D is for undenting, and ^O is for blockdenting--
 as it were.  A more complete example, with comments, can be found at
-http://www.perl.com/CPAN-local/authors/id/TOMC/scripts/toms.exrc.gz
+http://www.cpan.org/authors/id/TOMC/scripts/toms.exrc.gz
 
 If you are used to using the I<vgrind> program for printing out nice code
 to a laser printer, you can take a stab at this using
-http://www.perl.com/CPAN/doc/misc/tips/working.vgrind.entry, but the
+http://www.cpan.org/doc/misc/tips/working.vgrind.entry, but the
 results are not particularly satisfying for sophisticated code.
 
 The a2ps at http://www.infres.enst.fr/%7Edemaille/a2ps/ does lots of things
@@ -164,9 +164,13 @@ related to generating nicely printed output of documents.
 
 =head2 Is there a ctags for Perl?
 
-There's a simple one at
-http://www.perl.com/CPAN/authors/id/TOMC/scripts/ptags.gz which may do
-the trick.  And if not, it's easy to hack into what you want.
+Recent versions of ctags do much more than older versions did.
+EXUBERANT CTAGS is available from http://ctags.sourceforge.net/
+and does a good job of making tags files for perl code.
+
+There is also a simple one at
+http://www.cpan.org/authors/id/TOMC/scripts/ptags.gz which may do
+the trick.  It can be easy to hack this into what you want.
 
 =head2 Is there an IDE or Windows Perl Editor?
 
@@ -232,7 +236,21 @@ and possibly an emacs too, so you may not need to download anything.
 In any emacs the cperl-mode (M-x cperl-mode) gives you perhaps the
 best available Perl editing mode in any editor.
 
-For Windows editors: you can download an Emacs
+If you are using Windows, you can use any editor that lets
+you work with plain text, such as NotePad or WordPad.  Word
+processors, such as Microsoft Word or WordPerfect, typically
+do not work since they insert all sorts of behind-the-scenes
+information, although some allow you to save files as "Text
+Only". You can also download text editors designed
+specifically for programming, such as Textpad
+(http://www.textpad.com/) and UltraEdit
+(http://www.ultraedit.com), among others.
+
+If you are using MacOS, the same concerns apply.  MacPerl
+(for Classic environments) comes with a simple editor.
+Popular external editors are BBEdit (http://www.bbedit.com)
+or Alpha (http://alpha.olm.net/). MacOS X users can use Unix
+editors as well.
 
 =over 4
 
@@ -367,10 +385,10 @@ OS X and BeOS respectively (http://www.hekkelman.com/).
 =head2 Where can I get Perl macros for vi?
 
 For a complete version of Tom Christiansen's vi configuration file,
-see http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/toms.exrc.gz ,
+see http://www.cpan.org/authors/Tom_Christiansen/scripts/toms.exrc.gz ,
 the standard benchmark file for vi emulators.  The file runs best with nvi,
 the current version of vi out of Berkeley, which incidentally can be built
-with an embedded Perl interpreter--see http://www.perl.com/CPAN/src/misc.
+with an embedded Perl interpreter--see http://www.cpan.org/src/misc.
 
 =head2 Where can I get perl-mode for emacs?
 
@@ -391,7 +409,7 @@ shouldn't be an issue.
 
 The Curses module from CPAN provides a dynamically loadable object
 module interface to a curses library.  A small demo can be found at the
-directory http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/rep;
+directory http://www.cpan.org/authors/Tom_Christiansen/scripts/rep;
 this program repeats a command and updates the screen as needed, rendering
 B<rep ps axu> similar to B<top>.
 
@@ -400,24 +418,20 @@ B<rep ps axu> similar to B<top>.
 Tk is a completely Perl-based, object-oriented interface to the Tk toolkit
 that doesn't force you to use Tcl just to get at Tk.  Sx is an interface
 to the Athena Widget set.  Both are available from CPAN.  See the
-directory http://www.perl.com/CPAN/modules/by-category/08_User_Interfaces/
+directory http://www.cpan.org/modules/by-category/08_User_Interfaces/
 
 Invaluable for Perl/Tk programming are the Perl/Tk FAQ at
 http://w4.lns.cornell.edu/%7Epvhp/ptk/ptkTOC.html , the Perl/Tk Reference
 Guide available at
-http://www.perl.com/CPAN-local/authors/Stephen_O_Lidie/ , and the
+http://www.cpan.org/authors/Stephen_O_Lidie/ , and the
 online manpages at
 http://www-users.cs.umn.edu/%7Eamundson/perl/perltk/toc.html .
 
 =head2 How can I generate simple menus without using CGI or Tk?
 
-The http://www.perl.com/CPAN/authors/id/SKUNZ/perlmenu.v4.0.tar.gz
+The http://www.cpan.org/authors/id/SKUNZ/perlmenu.v4.0.tar.gz
 module, which is curses-based, can help with this.
 
-=head2 What is undump?
-
-See the next question on ``How can I make my Perl program run faster?''
-
 =head2 How can I make my Perl program run faster?
 
 The best way to do this is to come up with a better algorithm.  This
@@ -519,6 +533,51 @@ When the files you're processing are small, it doesn't much matter which
 way you do it, but it makes a huge difference when they start getting
 larger. 
 
+=item * Use map and grep selectively
+
+Remember that both map and grep expect a LIST argument, so doing this:
+
+        @wanted = grep {/pattern/} <FILE>;
+
+will cause the entire file to be slurped. For large files, it's better
+to loop:
+
+        while (<FILE>) {
+                push(@wanted, $_) if /pattern/;
+        }
+
+=item * Avoid unnecessary quotes and stringification
+
+Don't quote large strings unless absolutely necessary:
+
+        my $copy = "$large_string";
+
+makes 2 copies of $large_string (one for $copy and another for the
+quotes), whereas
+
+        my $copy = $large_string;
+
+only makes one copy.
+
+Ditto for stringifying large arrays:
+
+        {
+                local $, = "\n";
+                print @big_array;
+        }
+
+is much more memory-efficient than either
+
+        print join "\n", @big_array;
+
+or
+
+        {
+                local $" = "\n";
+                print "@big_array";
+        }
+
+
 =item * Pass by reference
 
 Pass arrays and hashes by reference, not by value. For one thing, it's
@@ -607,7 +666,7 @@ Both of these solutions can have far-reaching effects on your system
 and on the way you write your CGI programs, so investigate them with
 care.
 
-See http://www.perl.com/CPAN/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ .
+See http://www.cpan.org/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/ .
 
 A non-free, commercial product, ``The Velocity Engine for Perl'',
 (http://www.binevolve.com/ or http://www.binevolve.com/velocigen/ )
@@ -806,36 +865,17 @@ For modules, get the CGI or LWP modules from CPAN.  For textbooks,
 see the two especially dedicated to web stuff in the question on
 books.  For problems and questions related to the web, like ``Why
 do I get 500 Errors'' or ``Why doesn't it run from the browser right
-when it runs fine on the command line'', see these sources:
-
-    WWW Security FAQ
-        http://www.w3.org/Security/Faq/
-
-    Web FAQ
-        http://www.boutell.com/faq/
-
-    CGI FAQ
-        http://www.webthing.com/tutorials/cgifaq.html
-
-    HTTP Spec
-        http://www.w3.org/pub/WWW/Protocols/HTTP/
-
-    HTML Spec
-        http://www.w3.org/TR/REC-html40/
-        http://www.w3.org/pub/WWW/MarkUp/
-
-    CGI Spec
-        http://www.w3.org/CGI/
+when it runs fine on the command line'', see the troubleshooting
+guides and references in L<perlfaq9> or in the CGI MetaFAQ:
 
-    CGI Security FAQ
-        http://www.go2net.com/people/paulp/cgi-security/safe-cgi.txt
+       http://www.perl.org/CGI_MetaFAQ.html
 
 =head2 Where can I learn about object-oriented Perl programming?
 
 A good place to start is L<perltoot>, and you can use L<perlobj>,
 L<perlboot>, and L<perlbot> for reference.  Perltoot didn't come out
 until the 5.004 release; you can get a copy (in pod, html, or
-postscript) from http://www.perl.com/CPAN/doc/FMTEYEWTK/ .
+postscript) from http://www.cpan.org/doc/FMTEYEWTK/ .
 
 =head2 Where can I learn about linking C with Perl? [h2xs, xsubpp]