| |
| |
| |
Introduction | |
| |
| |
What Is a Program? | |
| |
| |
Why Perl? | |
| |
| |
What about CGI? | |
| |
| |
Security Issues | |
| |
| |
Perl and HTML | |
| |
| |
About This Book | |
| |
| |
What This Book Is Not | |
| |
| |
What's New | |
| |
| |
The Perl and CGI VQS Guide Web Site | |
| |
| |
| |
Perl Building Blocks | |
| |
| |
Perl Data | |
| |
| |
Operators and Functions | |
| |
| |
Quotation Marks | |
| |
| |
Quoting without Quotes | |
| |
| |
Statement, Blocks, and Scope | |
| |
| |
Declaring Private Variables | |
| |
| |
The Shebang Line | |
| |
| |
Creating a Perl CGI Script | |
| |
| |
Creating Output for a Browser | |
| |
| |
Documenting Your Script | |
| |
| |
Checking the Script's Syntax | |
| |
| |
| |
About Servers, Perl, and CGI.pm | |
| |
| |
What Is a Server? | |
| |
| |
The Importance of Directories | |
| |
| |
Ask Your Web Host! | |
| |
| |
Getting a Perl Interpreter | |
| |
| |
Getting CGI.pm | |
| |
| |
| |
Running Perl CGI on a Unix Server | |
| |
| |
Which Perl Are They Running? | |
| |
| |
What About CGI.pm? | |
| |
| |
Installing Scripts on Unix Servers | |
| |
| |
Uploading Your Script | |
| |
| |
Changing Permissions | |
| |
| |
Testing Your Unix Server | |
| |
| |
| |
Testing Scripts Locally on Windows | |
| |
| |
Installing the Xitami or Sambar Server | |
| |
| |
Installing Personal Web Server | |
| |
| |
Installing IIS on Windows 2000 | |
| |
| |
Displaying File Extensions | |
| |
| |
Testing Your Server (Part 1) | |
| |
| |
Installing the Perl Interpreter | |
| |
| |
Installing CGI.pm | |
| |
| |
Installing Scripts on Windows Servers | |
| |
| |
Testing Your Server (Part II) | |
| |
| |
| |
Testing Scripts Locally on the Mac | |
| |
| |
Installing Personal Web Sharing | |
| |
| |
The Root Web Directory | |
| |
| |
Carefully Sharing the Root Web Directory | |
| |
| |
Starting the Web Sharing Server | |
| |
| |
Testing the Server (Part 1) | |
| |
| |
Installing MacPerl | |
| |
| |
Installing CGI.pm | |
| |
| |
Installing Scripts on Mac Servers | |
| |
| |
Testing Your Server (Part II) | |
| |
| |
| |
Getting Data from Visitors | |
| |
| |
Labeling Incoming Data | |
| |
| |
Creating a Form | |
| |
| |
Creating Text Boxes | |
| |
| |
Creating Password Boxes | |
| |
| |
Creating Larger Text Areas | |
| |
| |
Creating Radio Buttons | |
| |
| |
Creating Checkboxes | |
| |
| |
Creating Menus | |
| |
| |
Creating the Submit Button | |
| |
| |
Resetting the Form | |
| |
| |
Using an Image to Submit Data | |
| |
| |
Creating a Link to a Script | |
| |
| |
Using a Link to Input Data to a Script | |
| |
| |
| |
Environment Variables | |
| |
| |
Your Visitor's Browser and Platform | |
| |
| |
Viewing Available Environment Variables | |
| |
| |
Storing Data from Environment Variables | |
| |
| |
| |
Getting Data into the Script | |
| |
| |
Getting Single-Valued Form Data | |
| |
| |
Getting Multiple-Valued Form Data | |
| |
| |
Getting All the Form Element's Names | |
| |
| |
Getting All the Names and Values | |
| |
| |
| |
Simple Operations with Scalars | |
| |
| |
Assigning a Value to a Scalar Variable | |
| |
| |
Multiplying, Dividing, Adding, Subtracting | |
| |
| |
Using More Than One Operator | |
| |
| |
Raising a Number to an Exponential Power | |
| |
| |
Using Mathematical Functions | |
| |
| |
Getting the Remainder of a Division | |
| |
| |
Connecting Strings Together | |
| |
| |
Repeating a String | |
| |
| |
Operating and Assigning in One Step | |
| |
| |
Incrementing (or Decrementing) a Variable | |
| |
| |
| |
Conditionals and Loops | |
| |
| |
Comparing Numbers | |
| |
| |
Comparing Strings | |
| |
| |
Evaluating Conditions without Comparisons | |
| |
| |
Testing Two or More Comparisons at a Time | |
| |
| |
Creating a Basic Conditional Statement | |
| |
| |
Adding Options for False Conditions | |
| |
| |
Adding Multiple, Independent Conditions | |
| |
| |
Using Unless | |
| |
| |
Repeating a Block for Each Item in an Array | |
| |
| |
Loading the Default Variable | |
| |
| |
Repeating a Block While a Condition Is True | |
| |
| |
Repeating a Block While a Condition Is False | |
| |
| |
Executing the Block at Least Once | |
| |
| |
Repeating a Block a Given Number of Times | |
| |
| |
Nesting Conditional Statements | |
| |
| |
Skipping a Loop Iteration | |
| |
| |
Jumping out of a Loop Altogether | |
| |
| |
| |
Working with Arrays | |
| |
| |
Assigning a List to an Array Variable | |
| |
| |
Referring to a Particular Item in an Array | |
| |
| |
Referring to Multiple Items from an Array | |
| |
| |
Adding or Replacing an Item in an Array | |
| |
| |
Adding to the End or Beginning of an Array | |
| |
| |
Removing the Last Item from an Array | |
| |
| |
Removing the First Item from an Array | |
| |
| |
Replacing More Than One Item in an Array | |
| |
| |
Finding the Length of an Array | |
| |
| |
Modifying All the Members of an Array | |
| |
| |
Sorting Arrays | |
| |
| |
Reversing the Order of an Array's Contents | |
| |
| |
| |
Subroutines | |
| |
| |
Creating a Simple Subroutine | |
| |
| |
Using a Simple Subroutine | |
| |
| |
Creating a Subroutine That Takes Input | |
| |
| |
Calling a Subroutine That Takes Input | |
| |
| |
Using a Subroutine's Return Value | |
| |
| |
Setting the Return Value Manually | |
| |
| |
Storing Subroutines in an External File | |
| |
| |
Calling Subroutines from an External File | |
| |
| |
| |
Working with Hashes | |
| |
| |
Assigning a List to a Hash | |
| |
| |
Getting a Value by Using a Key | |
| |
| |
Adding or Replacing a Key-Value Pair | |
| |
| |
Getting Several Values Using Keys | |
| |
| |
Getting All of a Hash's Keys | |
| |
| |
Getting All of a Hash's Values | |
| |
| |
Getting Each Key and Value in a Hash | |
| |
| |
Getting the Pairs in a Specified Order | |
| |
| |
Removing Key-Value Pairs | |
| |
| |
Checking to See If a Key Exists | |
| |
| |
| |
Analyzing Data | |
| |
| |
Finding Something | |
| |
| |
Finding and Replacing | |
| |
| |
Seeing and Using What Was Found | |
| |
| |
Splitting a Value into Pieces | |
| |
| |
Constructing Search Patterns | |
| |
| |
Tips for Constructing Search Patterns | |
| |
| |
Matching a Single Character | |
| |
| |
Matching a String of Characters | |
| |
| |
Matching a Character from a Group | |
| |
| |
Matching a Character That's Not in the Group | |
| |
| |
Using Class Shorthands | |
| |
| |
Limiting the Location | |
| |
| |
Choosing How Many to Match | |
| |
| |
Curbing a Quantifier's Greediness | |
| |
| |
Matching One Element or Another | |
| |
| |
More on Using What You Already Matched | |
| |
| |
| |
Remembering What Visitors Tell You | |
| |
| |
About Hidden Fields | |
| |
| |
Adding Hidden Fields to a Form | |
| |
| |
Storing Collected Data in a Hidden Field | |
| |
| |
About Cookies | |
| |
| |
Looking at Your Browser's Cookies | |
| |
| |
Sending a Cookie | |
| |
| |
Setting a Cookie's Expiration Date | |
| |
| |
Limiting a Cookie to a Domain | |
| |
| |
Limiting a Cookie to a Part of Your Server | |
| |
| |
Limiting Cookies to Secure Connections | |
| |
| |
Reading and Using a Cookie | |
| |
| |
How (and Why) Visitors Refuse Cookies | |
| |
| |
| |
Formatting, Printing, and HTML | |
| |
| |
Formatting Output with Perl | |
| |
| |
Creating a Format Pattern for Integers | |
| |
| |
Creating a Format Pattern for Non-Integers | |
| |
| |
Creating a Pattern for Strings | |
| |
| |
Changing the Case | |
| |
| |
Changing Characters | |
| |
| |
Finding the Length of a String | |
| |
| |
Finding Where Something Is in a String | |
| |
| |
Extracting One String from Another | |
| |
| |
Cleaning up the End of a String | |
| |
| |
Formatting Output with HTML | |
| |
| |
Printing Several Lines at a Time | |
| |
| |
Simplifying Paths to Images and Links | |
| |
| |
Outputting Data in a Table | |
| |
| |
| |
Security | |
| |
| |
Reading the Security FAQs | |
| |
| |
The Problem with Visitor Input | |
| |
| |
Protecting Calls to the System | |
| |
| |
Limiting Access to Files | |
| |
| |
Using CGI.pm to Limit Incoming Data | |
| |
| |
Keeping Information to Yourself | |
| |
| |
Avoiding Tainted Data | |
| |
| |
Cleaning and Using Outside Data | |
| |
| |
| |
Files and Directories | |
| |
| |
Opening a File | |
| |
| |
Verifying File and Directory Operations | |
| |
| |
Writing to an External File | |
| |
| |
Getting Exclusive Access to a File | |
| |
| |
Reading Data from an External File | |
| |
| |
Closing a File | |
| |
| |
Renaming a File | |
| |
| |
Removing a File | |
| |
| |
Checking a File's Status | |
| |
| |
Opening a Directory | |
| |
| |
Reading the Contents of a Directory | |
| |
| |
Closing a Directory | |
| |
| |
Changing the Working Directory | |
| |
| |
Creating a Directory | |
| |
| |
Changing Permissions from within a Script | |
| |
| |
Removing a Directory | |
| |
| |
Getting Ready to E-mail Output | |
| |
| |
Sending Output via E-mail | |
| |
| |
| |
Uploading Files | |
| |
| |
Creating a Form for Uploading Files | |
| |
| |
Getting the Name of the Uploaded File | |
| |
| |
Finding out a File's MIME Type | |
| |
| |
Specifying Where the File Should Be Saved | |
| |
| |
Reading in and Limiting Uploaded Files | |
| |
| |
| |
Debugging | |
| |
| |
Checking the Easy Stuff | |
| |
| |
Creating an Error Subroutine | |
| |
| |
Using Perl's Error Reporting | |
| |
| |
Viewing the System Error Log | |
| |
| |
Isolating the Problem | |
| |
| |
Following a Variable's Progress | |
| |
| |
| |
Using Other Folks' Scripts | |
| |
| |
Using Other Folks' Scripts | |
| |
| |
Getting Other People's Scripts | |
| |
| |
Expanding Compressed Scripts | |
| |
| |
Configuring Borrowed Scripts | |
| |
| |
Customizing Borrowed Scripts | |
| |
| |
| |
Permissions on Unix | |
| |
| |
Figuring out the Permissions Code | |
| |
| |
Default Permissions | |
| |
| |
Who's the Owner? | |
| |
| |
| |
Unix Essentials | |
| |
| |
Telnetting to Your Unix Server | |
| |
| |
Executing Commands in Unix | |
| |
| |
Dealing with Paths in Unix | |
| |
| |
Changing the Working Directory | |
| |
| |
Finding out Where You Are | |
| |
| |
Listing Directory Contents | |
| |
| |
Eliminating Files | |
| |
| |
Creating and Eliminating Directories | |
| |
| |
Decompressing Tar and Zipped Files | |
| |
| |
Getting Help with Unix | |
| |
| |
| |
Perl and CGI Resources | |
| |
| |
Text Editors | |
| |
| |
Telnet Programs | |
| |
| |
Other Folks' Scripts | |
| |
| |
Learning More | |
| |
| |
Index | |