# Internet Resources

<P>If you've read the rest of this book, you have a fairly good understanding of
Perl. This chapter introduces you to some resources that can take you to the
next level of understanding. You can see which Usenet newsgroups are best to
read, where to find Perl scripts that you can copy and modify for your own use,
and other useful information.
<P>First, you can read about Usenet, a service that uses news articles to
deliver information. You can browse through the newsgroups and pick up useful
information. Additionally, any time you have a question on Perl or CGI
programming you can post the question to a newsgroup. Responses to questions are
usually quick if your subject lines are well thought-out and descriptive.
<P>Next, some Web sites you can visit are listed. They have useful Web, CGI, and
Perl related libraries, sample scripts, and documentation that can be extremely
helpful.
<P>
<TABLE cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR>
    <TD bgColor=black><FONT color=lightpink size=4><B>Tip</B></FONT></TD></TR>
  <TR>
    <TD bgColor=lightpink>If you are new to CGI programming with Perl, you
      will want to visit each of these sites listed in this chapter. Doing this
      will give you a good understanding of what is available to help you become
      a great CGI programmer. As you visit the sites, keep track of useful files
      that can be downloaded that interest you, including their version and the
      date. You might also bookmark the site in your web browser. When you are
      done visiting all the sites, you will know where to access the most recent
      of the tools and you can begin to download and build your own CGI
      development library.</TD></TR></TBODY></TABLE>

## Usenet Newsgroups

Usenet is an Internet service that distributes articles or messages between servers. Each article is
targeted to a specific newsgroup. You need a news reader program in order to
download articles from the news server to your local machine.
<P>
<TABLE cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR>
    <TD bgColor=black><FONT color=lightpink size=4><B>Tip</B></FONT></TD></TR>
  <TR>
    <TD bgColor=lightpink>If you are using Windows 95, you can use the news
      reader that comes with Netscape, or you can download Free Agent from the
      <B><A
      href="http://www.forteinc.com/forte/">http://www.forteinc.com/forte/</A></B>
      web page.</TD></TR></TBODY></TABLE>
<P>There are several newsgroups that are useful to Perl and CGI programmers.
They are listed in Table 23.1.
<P>
<TABLE cellPadding=10 border=1>
  <CAPTION>Table 23.1-Useful Newsgroups</CAPTION>
  <TBODY>
  <TR>
    <TH align=left>Newsgroup </TH>
    <TH align=left>Description</TH></TR>
  <TR>
    <TD vAlign=top>comp.lang.perl.misc </TD>
    <TD vAlign=top>Covers general Perl questions and issues.</TD></TR>
  <TR>
    <TD vAlign=top>comp.lang.perl.announce </TD>
    <TD vAlign=top>Covers Perl-related announcements.</TD></TR>
  <TR>
    <TD vAlign=top>comp.lang.perl.modules </TD>
    <TD vAlign=top>Covers new module announcements and quesions.</TD></TR>
  <TR>
    <TD vAlign=top>comp.lang.perl.tk </TD>
    <TD vAlign=top>Perl/Tk integration and usage discussions.</TD></TR>
  <TR>
    <TD vAlign=top>comp.infosystems.www. authoring.cgi</TD>
    <TD vAlign=top>CGI issues in web authoring </TD></TR>
  <TR>
    <TD vAlign=top>comp.infosystems.www.announce </TD>
    <TD vAlign=top>Not Perl-related, but very useful to monitor new
      developments on the web.</TD></TR>
  <TR>
    <TD vAlign=top>comp.infosystems.www. servers.misc </TD>
    <TD vAlign=top>Covers general web server questions and issues. There are
      also newsgroups specifically devoted to individual server products.</TD></TR>
  <TR>
    <TD vAlign=top>comp.internet.net-happenings </TD>
    <TD vAlign=top>Another newsgroup that good for monitoring Internet
      developments.</TD></TR></TBODY></TABLE>
<P>The most useful Perl-related newsgroup is comp.lang.perl.misc because of the
breadth of topics that are covered. This is the newsgroup you will most likely
post to when you are having a Perl language problem or simply have a question
that needs answering.
<P><I>Fig. 22.1 - A Random Sample of the Articles in the comp.lang.perl.misc
Newsgroup</I>
<P>
<TABLE cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR>
    <TD bgColor=black><FONT color=tomato size=4><B>Caution</B></FONT></TD></TR>
  <TR>
    <TD bgColor=tomato>It is generally considered poor manners to post your
      question in more than one newsgroup. Most people monitor at least three of
      the four Perl newsgroups and will be annoyed to see your question multiple
      times.</TD></TR></TBODY></TABLE>
<P>Before you post to any newsgroup. <B>read the Perl FAQ</B>. An <I>FAQ</I> is
a frequently-asked questions document. If you ask a question that is already
answered in the FAQ document, you will be yelled at by other people reading the
list. At all times, remember that you are asking others for their help. They are
under no obligation to help. If you are rude, insulting, unclear, or lazy, you
can expect the same treatment in return. To quote Patrick Swayze in the movie
<I>Roadhouse</I>, "Be polite!"
<P>You can find the FAQ on the <B><A
href="http://www.perl.com/perl/faq/">http://www.perl.com/perl/faq/</A></B> web
page. In addition, this site will point you to other FAQs.
<P>The comp.lang.perl.modules newsgroup is very helpful, both to check out what
modules are available and how they are being used, and if you have any questions
or problems with existing Perl modules, or want to ask about the existence of
modules to support a particular need.
<P>The comp.lang.perl.tk newsgroup is a forum to discuss Tk and Perl. <I>Tk</I>
is an interface tool developed by Sun, primarily to use with <I>Tcl</I>, an
embeddable scripting language. There have been Tk extensions made to Perl5 to
allow integration. If you are interesting in using both, you will definitely
want to check out this newsgroup. You can also find a FAQ at the <B><A
href="http://w4.lns.cornell.edu/~pvhp/ptk/ptkFAQ.html">http://w4.lns.cornell.edu/~pvhp/ptk/ptkFAQ.html</A></B>
web page.
<P>Another useful newsgroup is comp.infosystems.www.authoring.cgi. It will
contain many references to CGI programming using Perl, which is one of the more
popular approaches to CGI. Look at all of the newsgroups beginning with
comp.infosystems.www for those that meet your needs.

## Web Sites

The following sites are good places to visit to build up your Perl and/or CGI script library. In addition, the sites
will begin to give you an idea of what exactly already exists that you can use,
or modify for your own use. You will be amazed at what is available that is
either freeware or shareware.

### Perl Documentation

<a href="http://www.perlhelp.de/">http://www.perlhelp.de/</a>
<p>Valid as of May 19, 2003 - This site contains links to Perl documentation in German and English.
</p>

### The Perl Language Home Page

<A href="http://www.perl.com/">http://www.perl.com/</A>
<P>The Perl language home page is connected to the Internet via a 28.8K link, so
be prepared to wait a little bit while downloading. Around the end of July, the
server was having difficulties staying up - hopefully they have been resolved by
the time you read this.
<P>However, when the site is available, it has valuable information. You should
definitely stop in and browse.

### Pearls of Wisdom by Larry Wall

<A href="ftp://convex.com/pub/perl/info/lwall-quotes">ftp://convex.com/pub/perl/info/lwall-quotes</A>

<P>Larry Wall is the inventor of Perl. His admirers have created this web page
to commemorate some of Larry's wittier comments.
<P>Larry as a nice guy:
<P>
<BLOCKQUOTE>Even if you aren't in doubt, consider the mental welfare of the
  person who has to maintain the code after you, and who will probably put
  parens in the wrong place. --Larry Wall in the perl man page</BLOCKQUOTE>Larry
as a philosopher:
<P>
<BLOCKQUOTE>"What is the sound of Perl? Is it not the sound of a wall that
  people have stopped banging their heads against?" --Larry Wall in
  <1992Aug26.184221.29627@netlabs.com></BLOCKQUOTE>Larry as a computer nerd:

<P>
<BLOCKQUOTE>I might be able to shoehorn a reference count in on top of the
  numeric value by disallowing multiple references on scalars with a numeric
  value, but it wouldn't be as clean. I do occasionally worry about that.
-lwall</BLOCKQUOTE>Larry as an programmer with impossible specifications:
<P>
<BLOCKQUOTE>You want it in one line? Does it have to fit in 80 columns? :)
  --Larry Wall in <7349@jpl-devvax.JPL.NASA.GOV> </BLOCKQUOTE>

### Yahoo

<A href="http://www.yahoo.com/">http://www.yahoo.com/</A>
<P>One of the best places to begin a search for information or for files is at
Yahoo. This is one of the better organized and comprehensive search sites on the
Web.
<P><I>Fig. 22.2 - The Yahoo Site</I>
<P>Type a keyword into the input box and click the <TT>Search</TT> button to
search the Yahoo database.
<P>Yahoo has separate categories for Perl and CGI. The Perl web page is:
<P><A
href="http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Perl/">http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Perl/</A>

<P>And the CGI page is:
<P><A
href="http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/CGI___Common_Gateway_Interface/">http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/CGI___Common_Gateway_Interface/</A>

### The CGI.pm Module

<A href="http://www-genome.wi.mit.edu/ftp/pub/software/WWW/cgi_docs.html">http://www-genome.wi.mit.edu/ftp/pub/software/WWW/cgi_docs.html</A>

<P><TT>CGI.pm</TT> is a module that provides powerful functions for performing
HTML form and CGI programming with Perl. This library requires Perl 5.001m, and
makes use of object-oriented techniques. This is a must for your Perl bookmark
list.

### Selina Sol's CGI Script Archive

<A href="http://www.extropia.com/selena/">http://www.extropia.com/selena/</A>
<P>This attractive and very useful site contains links to many fairly
sophisticated CGI scripts. For example, Web Chat 1.0 contains a slide show
script, guest book, a complete shopping cart example, and many others. This site
not only provides the sample scripts but you can also see them in action and
view the HTML and other documents that the example uses. Additionally, the
examples are fully documented, easy to understand, and are very easy to follow.
Table 23.2 shows some of the scripts and their descriptions.
<P>
<TABLE cellPadding=10 border=1>
  <CAPTION>Table 23.2-Some of the Scripts Available at Selina Sol's
  Site</CAPTION>
  <TBODY>
  <TR>
    <TH align=left>Script </TH>
    <TH align=left>Description</TH></TR>
  <TR>
    <TD vAlign=top>Selena Sol's Electronic Outlet 2.0 (database) </TD>
    <TD vAlign=top>Implements a shopping cart system using a database</TD></TR>
  <TR>
    <TD vAlign=top>Selena Sol's Electronic </TD>
    <TD vAlign=top>Implements a shopping cart system </TD></TR>
  <TR>
    <TD vAlign=top>Outlet 2.0 (HTML) </TD>
    <TD vAlign=top>using HTML</TD></TR>
  <TR>
    <TD vAlign=top>Cool Runnings Music Catalog </TD>
    <TD vAlign=top>Shopping cart concept for catalogs</TD></TR>
  <TR>
    <TD vAlign=top>The Form Processor </TD>
    <TD vAlign=top>Process form input, using hidden variables</TD></TR>
  <TR>
    <TD vAlign=top>Database Manager 2.0 </TD>
    <TD vAlign=top>A flat file database management tool</TD></TR>
  <TR>
    <TD vAlign=top>Database Search Engine 1.0 </TD>
    <TD vAlign=top>Search engine for the Database Manager 2.0</TD></TR>
  <TR>
    <TD vAlign=top>Groupware Calendar </TD>
    <TD vAlign=top>Calendar that can be read/modified by group</TD></TR>
  <TR>
    <TD vAlign=top>Keyword Search Engine 3.0 </TD>
    <TD vAlign=top>Traverses HTML documents searching for keyword and returns
      output</TD></TR>
  <TR>
    <TD vAlign=top>authentification-lib.pl </TD>
    <TD vAlign=top>Authentification perl module</TD></TR>
  <TR>
    <TD vAlign=top>date.pl </TD>
    <TD vAlign=top>Date based perl module</TD></TR></TBODY></TABLE>

### The Web Developer's Virtual Library

<A href="http://www.stars.com/">http://www.stars.com/</A>
<P>This site is a very comprehensive resource that the site terms a "web
developer's encyclopedia." There are many tutorials on HTML, CGI, HTTP,
Databases, and Style Guidelines. This site is an incredibly rich source of links
to virtually any web development-related topic you can think of. The CGI page
has 69 links, the HTML has 55 links, and so on. This site is definitely a must
for visiting, especially when you have time to do a little link hopping and
exploring, or when you need to find a web development resource.

### Introduction to CGI

<A href="http://www.virtualville.com/library/cgi.html">http://www.virtualville.com/library/cgi.html</A>

<P>This site explains how the CGI specification works and provides a nice set of
link to other resources.

### Perl for Win32

<A href="http://www.activeware.com/">http://www.activeware.com/</A> - home page
<P><A
href="http://www.endcontsw.com/people/evangelo/Perl_for_Win32_FAQ.html">http://www.endcontsw.com/people/evangelo/Perl_for_Win32_FAQ.html</A>
- FAQ
<P>I believe that ActiveWare has the most advanced and stable Perl
implementation for Windows 95 and Windows NT. They have also made a DLL
available to let Perl work with the Microsoft Internet Information Server. This
library will work with the Microsoft Internet Information Server to improve the
efficiency of CGI access with Perl. Note that the release of this DLL may still
be a beta release.

### Randal L. Schwartz's Home Page

<A href="http://www.teleport.com/~merlyn/">http://www.teleport.com/~merlyn/</A>
<P>Randal is one of the most knowledgeable Perl gurus. His home page has links
to some of the columns that he wrote for the <I>Web Techniques</I> and <I>UNIX
Review</I> magazines.

### Dale Bewley's Perl Scripts and Links!

<A href="http://www.engr.iupui.edu/~dbewley/perl/">http://www.engr.iupui.edu/~dbewley/perl/</A>
- Perl information
<P><A
href="http://www.engr.iupui.edu/~dbewley/cgi/">http://www.engr.iupui.edu/~dbewley/cgi/</A>
- CGI information
<P>These web pages are very nicely laid out. They contain sections on books,
references, tutorials, and script archives. In addition, Dale frequents the
#perl and #cgi irc channels using a nickname of dwnwrd. Make sure to say hi if
you see him. Figure 23.3 shows the beginning of Dale's Perl page.
<P><I>Fig. 22.3 - Dale's Perl Page</I>

### Matt's Script Archive

<A href="http://www.worldwidemart.com/scripts/">http://www.worldwidemart.com/scripts/</A>

<P>Matt Wright's scripts are turning up all over the web. His Perl page has
examples of guestbooks, counters, and a simple search scripts.

### The Comprehensive Perl Archive Network

<A href="http://www.perl.com/CPAN">http://www.perl.com/CPAN</A> - this site will
connect you to a mirror site.
<P><A
href="ftp://ftp.funet.fi/pub/languages/perl/CPAN/">ftp://ftp.funet.fi/pub/languages/perl/CPAN/</A>
- use if Perl server is done.
<P>The Comprehensive Perl Archive Network is a set of web sites that mirror one
other. The network is a volunteer organization so don't expect a lot of
documentation and hand-holding. At each site, there is a sub-directory labeled
<TT>/modules</TT> which will contain references to various Perl modules that are
stored there. To access a list of the modules look at the
<TT>/modules/01modules.index.html</TT> web page. Module development guidelines
can be found at <TT>/modules/00modlist.long.html</TT>. In addition, the modules
are listed by author, category, and by module.
<P>Also, check out the <TT>/scripts</TT> sub-directory. This sub-directory is
itself sub-divided into more directories, each representing a different
category. Each category has scripts that can be examined, used, and modified.

### Database API for Perl

<A href="http://www.hermetica.com/technologia/DBI/index.html">http://www.hermetica.com/technologia/DBI/index.html</A>
- DBperl home page
<P><A href="http://www.fugue.com/dbi/">http://www.fugue.com/dbi/</A> - DBperl
mailing lists
<P>Tim Bunce, the author of Dbperl says, "DBperl is a database access
Application Programming Interface (API) for the Perl Language. The DBperl API
Specification defines a set of functions, variables and conventions that provide
a consistent database interface independent of the actual database being used."
With DBperl you can access the following databases: Oracle, Sybase, mSQL,
Informix, and Quickbase. Plans are currently underway to implement an interface
for ODBC.

### The cgi-lib.pl Home Page

<A href="http://www.bio.cam.ac.uk/cgi-lib/">http://www.bio.cam.ac.uk/cgi-lib/</A>
<P>This famous library is widely used by many Perl/CGI programmers. The library
includes functions such as <TT>ReadParse()</TT> which will parse the data passed
to the script from the form, or <TT>HtmlTop()</TT> and <TT>HtmlBot()</TT> which
will print out specific <head> and end of <body> sections of an HTML
document.
<P>
<TABLE cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR>
    <TD bgColor=black><FONT color=tomato size=4><B>Caution</B></FONT></TD></TR>
  <TR>
    <TD bgColor=tomato>Before using this library, read information on the
      <B><A
      href="http://perl.com/perl/info/www/!cgi-lib.html">http://perl.com/perl/info/www/!cgi-lib.html</A></B>
      web page for a cogent set of reasons why you should use the
      <TT>CGI.pm</TT> module instead.</TD></TR></TBODY></TABLE>

### The CGI Collection

<A href="http://www.selah.net/cgi.html">http://www.selah.net/cgi.html</A>
<P>This site has a set of scripts, some created with Perl and some created with
C. Among some of the scripts you can find at this site are those listed in Table
23.3. In particular check out how a simple little script such as
<TT>Logger.cgi</TT> can perform a very useful function.
<P>
<TABLE cellPadding=10 border=1>
  <CAPTION>Table 23.3-Robert Niles' CGI Collection Web Site</CAPTION>
  <TBODY>
  <TR>
    <TH align=left>Script Name </TH>
    <TH align=left>Description</TH></TR>
  <TR>
    <TD vAlign=top>MailForm.cgi </TD>
    <TD vAlign=top>Customizable mailform CGI script that include To, Cc, and
      Bcc fields</TD></TR>
  <TR>
    <TD vAlign=top>Guestbook.cgi </TD>
    <TD vAlign=top>Guestbook CGI script</TD></TR>
  <TR>
    <TD vAlign=top>Logger.cgi </TD>
    <TD vAlign=top>Very simple script that will log visitors</TD></TR>
  <TR>
    <TD vAlign=top>FrameChat </TD>
    <TD vAlign=top>Odd little application that will implement a frames based
      chat service. Perl 5 is required</TD></TR></TBODY></TABLE>

### HTML Form Processing Modules (HFPM) Home Page

The HFPM is a set of modules written to accept a submitted HTML form, possibly modify the contents of the submitted fields, and
output the result using e-mail, appending to a file, and/or displaying it to the
user or returning an arbitrary URL. They also operate on the environmental
variables passed in from the client and server.
<P>You will need perl5 and a UNIX-based system to use the modules listed at this
site, and a copy of <TT>CGI.pm</TT>, mentioned previously.

### PureAmiga

<A href="http://www.netlink.co.uk/users/PureAmiga/pcgi/index.html">http://www.netlink.co.uk/users/PureAmiga/pcgi/index.html</A>

<P>You might think that all of the activity for CGI scripting with Perl is done
only on UNIX or Windows NT. However, this site has many excellent examples of
CGI scripting for the Amiga.

### MacPerl

<A href="http://err.ethz.ch/~neeri/macintosh/perl.html">http://err.ethz.ch/~neeri/macintosh/perl.html</A>
- home page
<P><A
href="http://www.unimelb.edu.au/~ssilcot/macperl-primer/home.html">http://www.unimelb.edu.au/~ssilcot/macperl-primer/home.html</A>
- tutorial
<P><A
href="http://www.marketspace.com.au/~adam/">http://www.marketspace.com.au/~adam/</A>
- scripts
<P><A
href="ftp://ftp.netcom.com/pub/ha/hal/MacPerl/faq.html">ftp://ftp.netcom.com/pub/ha/hal/MacPerl/faq.html</A>
- FAQ
<P>Apple computers can also run Perl.

### CGI Scripts and HTML Forms

<A href="http://kufacts.cc.ukans.edu/info/forms/forms-intro.html">http://kufacts.cc.ukans.edu/info/forms/forms-intro.html</A>

<P>This site contains a nice little introduction to CGI and forms. Not only does
it describe the process, it also provides graphics that demonstrate how HTML
Forms/CGI interact.

### The CGI Documentation by NCSA

<A href="http://hoohoo.ncsa.uiuc.edu/docs/cgi/">http://hoohoo.ncsa.uiuc.edu/docs/cgi/</A>

<P>If you want to learn something, sometimes you just have to go back to the
source. This site provides a CGI overview. It also includes tips on writing
secure CGI scripts, a topic that must always concern CGI programmers.

### Miscellaneous Sites

The basic Perl manual can be found at:
<P><A
href="http://www.atmos.washington.edu/perl/perl.html">http://www.atmos.washington.edu/perl/perl.html</A>

<P>The University of Florida Perl page can be found at:
<P><A href="http://www0.cise.ufl.edu/perl/">http://www0.cise.ufl.edu/perl/</A>

## Internet Relay Chat, or IRC

The Internet Relay Chat service is a powerful tool. If you're lucky
you can connect with very knowledgeable people who will answer your questions.
The advantage of IRC is that you can hold a real-time conversation with other
people. You ask a question, they respond. You can then ask for clarification or
actually try the advice. If you still have a problem, you can ask for more
advice.
<P>There are several networks that have arisen to support IRC: EfNet, Undernet,
and DALnet. The Perl gurus hang out on EfNet. The <TT>#perl</TT> IRC channel is
a good place to go for general Perl questions. If you have basic questions, you
can try <TT>#perl-basics</TT>. CGI questions should be directed to
<TT>#cgi</TT>.
<P>The Windows 95 program mIRC has been included on the CD that accompanies this
book. Install it and try connecting to one of the EfNet servers. I like to use
<TT>irc.cris.com</TT>. Once connected - keep trying; it may take a few tries -
<TT><B>type /join #perl</TT></B> and say hello to everyone. You might even see
me - my nickname is WasWaldo.
<P><I>Fig. 22.4 - A Random Snapshot of the IRC Channels.</I>

## Summary

You've finally the end of the journey that was mentioned in [](./getting-your-feet-wet.md). I hope
you enjoyed reading this book as much as I enjoyed writing it. While I was doing
research, I took advantage of every resource listed in this chapter. If you have
unanswered questions, I urge you to ask them either in IRC or the relevant
newsgroup. With today's fast communications it doesn't make sense to hold up a
project when the answer might available in minutes or hours.
<P>The easiest resource to use is the Usenet newsgroups. Simply send a message
to an appropriate newsgroup with a carefully worded subject line before you
leave work for the evening. The odds are good that you will have a response by
the next morning. Most of time you should use the <TT>comp.lang.perl.misc</TT>
newsgroup.
<P>When you have some unruly code that should work but doesn't. Consider looking
on the Perl home page (<B><A
href="http://www.perl.com/">http://www.perl.com/</A></B>) to see if a new bug
has been found.
<P>If you need ideas or would like to get a head start on your next programming
project, you can search for Perl programs at the Yahoo (<B><A
href="http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Perl/">http://www.yahoo.com/Computers_and_Internet/Programming_Languages/Perl/</A></B>)
web site. By starting at the Yahoo site, you always see an updated list of
available Perl resources. Some sites (like Dale Dewley's - <B><A
href="http://www.engr.iupui.edu/~dbewley/perl/">http://www.engr.iupui.edu/~dbewley/perl/</A></B>)
has resources that you will refer to over and over again.

<P>Sometimes, you absolutely can't wait for an answer. When you have pressing deadlines or your brain is frazzeled, turn to the #perl channel on an Efnet IRC server.

<P>At this point there's nothing left to say but...

<P>Happy Programing!
