| |  | Copyright |
| |  | Foreword |
| |  | Preface |
| |
|  | What's in This Book |
| |
|  | What's New in This Edition |
| |
|  | Platform Notes |
| |
|  | Other Books |
| |
|  | Conventions Used in This Book |
| |
|  | We'd Like to Hear from You |
| |
|  | Acknowledgments for the First Edition |
| |
|  | Acknowledgments for the Second Edition |
 |
| |  |
Chapter 1.
Strings |
| |
|  | Introduction |
| |
|  | Recipe 1.1.
Accessing Substrings |
| |
|  | Recipe 1.2.
Establishing a Default Value |
| |
|  | Recipe 1.3.
Exchanging Values Without Using Temporary Variables |
| |
|  | Recipe 1.4.
Converting Between Characters and Values |
| |
|  | Recipe 1.5.
Using Named Unicode Characters |
| |
|  | Recipe 1.6.
Processing a String One Character at a Time |
| |
|  | Recipe 1.7.
Reversing a String by Word or Character |
| |
|  | Recipe 1.8.
Treating Unicode Combined Characters as Single Characters |
| |
|  | Recipe 1.9.
Canonicalizing Strings with Unicode Combined Characters |
| |
|  | Recipe 1.10.
Treating a Unicode String as Octets |
| |
|  | Recipe 1.11.
Expanding and Compressing Tabs |
| |
|  | Recipe 1.12.
Expanding Variables in User Input |
| |
|  | Recipe 1.13.
Controlling Case |
| |
|  | Recipe 1.14.
Properly Capitalizing a Title or Headline |
| |
|  | Recipe 1.15.
Interpolating Functions and Expressions Within Strings |
| |
|  | Recipe 1.16.
Indenting Here Documents |
| |
|  | Recipe 1.17.
Reformatting Paragraphs |
| |
|  | Recipe 1.18.
Escaping Characters |
| |
|  | Recipe 1.19.
Trimming Blanks from the Ends of a String |
| |
|  | Recipe 1.20.
Parsing Comma-Separated Data |
| |
|  | Recipe 1.21.
Constant Variables |
| |
|  | Recipe 1.22.
Soundex Matching |
| |
|  | Recipe 1.23.
Program: fixstyle |
| |
|  | Recipe 1.24.
Program: psgrep |
 |
| |  |
Chapter 2.
Numbers |
| |
|  | Introduction |
| |
|  | Recipe 2.1.
Checking Whether a String Is a Valid Number |
| |
|  | Recipe 2.2.
Rounding Floating-Point Numbers |
| |
|  | Recipe 2.3.
Comparing Floating-Point Numbers |
| |
|  | Recipe 2.4.
Operating on a Series of Integers |
| |
|  | Recipe 2.5.
Working with Roman Numerals |
| |
|  | Recipe 2.6.
Generating Random Numbers |
| |
|  | Recipe 2.7.
Generating Repeatable Random Number Sequences |
| |
|  | Recipe 2.8.
Making Numbers Even More Random |
| |
|  | Recipe 2.9.
Generating Biased Random Numbers |
| |
|  | Recipe 2.10.
Doing Trigonometry in Degrees, Not Radians |
| |
|  | Recipe 2.11.
Calculating More Trigonometric Functions |
| |
|  | Recipe 2.12.
Taking Logarithms |
| |
|  | Recipe 2.13.
Multiplying Matrices |
| |
|  | Recipe 2.14.
Using Complex Numbers |
| |
|  | Recipe 2.15.
Converting Binary, Octal, and Hexadecimal Numbers |
| |
|  | Recipe 2.16.
Putting Commas in Numbers |
| |
|  | Recipe 2.17.
Printing Correct Plurals |
| |
|  | Recipe 2.18.
Program: Calculating Prime Factors |
 |
| |  |
Chapter 3.
Dates and Times |
| |
|  | Introduction |
| |
|  | Recipe 3.1.
Finding Today's Date |
| |
|  | Recipe 3.2.
Converting DMYHMS to Epoch Seconds |
| |
|  | Recipe 3.3.
Converting Epoch Seconds to DMYHMS |
| |
|  | Recipe 3.4.
Adding to or Subtracting from a Date |
| |
|  | Recipe 3.5.
Difference of Two Dates |
| |
|  | Recipe 3.6.
Day in a Week/Month/Year or Week Number |
| |
|  | Recipe 3.7.
Parsing Dates and Times from Strings |
| |
|  | Recipe 3.8.
Printing a Date |
| |
|  | Recipe 3.9.
High-Resolution Timers |
| |
|  | Recipe 3.10.
Short Sleeps |
| |
|  | Recipe 3.11.
Program: hopdelta |
 |
| |  |
Chapter 4.
Arrays |
| |
|  | Introduction |
| |
|  | Recipe 4.1.
Specifying a List in Your Program |
| |
|  | Recipe 4.2.
Printing a List with Commas |
| |
|  | Recipe 4.3.
Changing Array Size |
| |
|  | Recipe 4.4.
Implementing a Sparse Array |
| |
|  | Recipe 4.5.
Iterating Over an Array |
| |
|  | Recipe 4.6.
Iterating Over an Array by Reference |
| |
|  | Recipe 4.7.
Extracting Unique Elements from a List |
| |
|  | Recipe 4.8.
Finding Elements in One Array but Not Another |
| |
|  | Recipe 4.9.
Computing Union, Intersection, or Difference of Unique Lists |
| |
|  | Recipe 4.10.
Appending One Array to Another |
| |
|  | Recipe 4.11.
Reversing an Array |
| |
|  | Recipe 4.12.
Processing Multiple Elements of an Array |
| |
|  | Recipe 4.13.
Finding the First List Element That Passes a Test |
| |
|  | Recipe 4.14.
Finding All Elements in an Array Matching Certain Criteria |
| |
|  | Recipe 4.15.
Sorting an Array Numerically |
| |
|  | Recipe 4.16.
Sorting a List by Computable Field |
| |
|  | Recipe 4.17.
Implementing a Circular List |
| |
|  | Recipe 4.18.
Randomizing an Array |
| |
|  | Recipe 4.19.
Program: words |
| |
|  | Recipe 4.20.
Program: permute |
 |
| |  |
Chapter 5.
Hashes |
| |
|  | Introduction |
| |
|  | Recipe 5.1.
Adding an Element to a Hash |
| |
|  | Recipe 5.2.
Testing for the Presence of a Key in a Hash |
| |
|  | Recipe 5.3.
Creating a Hash with Immutable Keys or Values |
| |
|  | Recipe 5.4.
Deleting from a Hash |
| |
|  | Recipe 5.5.
Traversing a Hash |
| |
|  | Recipe 5.6.
Printing a Hash |
| |
|  | Recipe 5.7.
Retrieving from a Hash in Insertion Order |
| |
|  | Recipe 5.8.
Hashes with Multiple Values per Key |
| |
|  | Recipe 5.9.
Inverting a Hash |
| |
|  | Recipe 5.10.
Sorting a Hash |
| |
|  | Recipe 5.11.
Merging Hashes |
| |
|  | Recipe 5.12.
Finding Common or Different Keys in Two Hashes |
| |
|  | Recipe 5.13.
Hashing References |
| |
|  | Recipe 5.14.
Presizing a Hash |
| |
|  | Recipe 5.15.
Finding the Most Common Anything |
| |
|  | Recipe 5.16.
Representing Relationships Between Data |
| |
|  | Recipe 5.17.
Program: dutree |
 |
| |  |
Chapter 6.
Pattern Matching |
| |
|  | Introduction |
| |
|  | Recipe 6.1.
Copying and Substituting Simultaneously |
| |
|  | Recipe 6.2.
Matching Letters |
| |
|  | Recipe 6.3.
Matching Words |
| |
|  | Recipe 6.4.
Commenting Regular Expressions |
| |
|  | Recipe 6.5.
Finding the Nth Occurrence of a Match |
| |
|  | Recipe 6.6.
Matching Within Multiple Lines |
| |
|  | Recipe 6.7.
Reading Records with a Separator |
| |
|  | Recipe 6.8.
Extracting a Range of Lines |
| |
|  | Recipe 6.9.
Matching Shell Globs as Regular Expressions |
| |
|  | Recipe 6.10.
Speeding Up Interpolated Matches |
| |
|  | Recipe 6.11.
Testing for a Valid Pattern |
| |
|  | Recipe 6.12.
Honoring Locale Settings in Regular Expressions |
| |
|  | Recipe 6.13.
Approximate Matching |
| |
|  | Recipe 6.14.
Matching from Where the Last Pattern Left Off |
| |
|  | Recipe 6.15.
Greedy and Non-Greedy Matches |
| |
|  | Recipe 6.16.
Detecting Doubled Words |
| |
|  | Recipe 6.17.
Matching Nested Patterns |
| |
|  | Recipe 6.18.
Expressing AND, OR, and NOT in a Single Pattern |
| |
|  | Recipe 6.19.
Matching a Valid Mail Address |
| |
|  | Recipe 6.20.
Matching Abbreviations |
| |
|  | Recipe 6.21.
Program: urlify |
| |
|  | Recipe 6.22.
Program: tcgrep |
| |
|  | Recipe 6.23.
Regular Expression Grab Bag |
 |
| |  |
Chapter 7.
File Access |
| |
|  | Introduction |
| |
|  | Recipe 7.1.
Opening a File |
| |
|  | Recipe 7.2.
Opening Files with Unusual Filenames |
| |
|  | Recipe 7.3.
Expanding Tildes in Filenames |
| |
|  | Recipe 7.4.
Making Perl Report Filenames in Error Messages |
| |
|  | Recipe 7.5.
Storing Filehandles into Variables |
| |
|  | Recipe 7.6.
Writing a Subroutine That Takes Filehandles as Built-ins Do |
| |
|  | Recipe 7.7.
Caching Open Output Filehandles |
| |
|  | Recipe 7.8.
Printing to Many Filehandles Simultaneously |
| |
|  | Recipe 7.9.
Opening and Closing File Descriptors by Number |
| |
|  | Recipe 7.10.
Copying Filehandles |
| |
|  | Recipe 7.11.
Creating Temporary Files |
| |
|  | Recipe 7.12.
Storing a File Inside Your Program Text |
| |
|  | Recipe 7.13.
Storing Multiple Files in the DATA Area |
| |
|  | Recipe 7.14.
Writing a Unix-Style Filter Program |
| |
|  | Recipe 7.15.
Modifying a File in Place with a Temporary File |
| |
|  | Recipe 7.16.
Modifying a File in Place with the -i Switch |
| |
|  | Recipe 7.17.
Modifying a File in Place Without a Temporary File |
| |
|  | Recipe 7.18.
Locking a File |
| |
|  | Recipe 7.19.
Flushing Output |
| |
|  | Recipe 7.20.
Doing Non-Blocking I/O |
| |
|  | Recipe 7.21.
Determining the Number of Unread Bytes |
| |
|  | Recipe 7.22.
Reading from Many Filehandles Without Blocking |
| |
|  | Recipe 7.23.
Reading an Entire Line Without Blocking |
| |
|  | Recipe 7.24.
Program: netlock |
| |
|  | Recipe 7.25.
Program: lockarea |
 |
| |  |
Chapter 8.
File Contents |
| |
|  | Introduction |
| |
|  | Recipe 8.1.
Reading Lines with Continuation Characters |
| |
|  | Recipe 8.2.
Counting Lines (or Paragraphs or Records) in a File |
| |
|  | Recipe 8.3.
Processing Every Word in a File |
| |
|  | Recipe 8.4.
Reading a File Backward by Line or Paragraph |
| |
|  | Recipe 8.5.
Trailing a Growing File |
| |
|  | Recipe 8.6.
Picking a Random Line from a File |
| |
|  | Recipe 8.7.
Randomizing All Lines |
| |
|  | Recipe 8.8.
Reading a Particular Line in a File |
| |
|  | Recipe 8.9.
Processing Variable-Length Text Fields |
| |
|  | Recipe 8.10.
Removing the Last Line of a File |
| |
|  | Recipe 8.11.
Processing Binary Files |
| |
|  | Recipe 8.12.
Using Random-Access I/O |
| |
|  | Recipe 8.13.
Updating a Random-Access File |
| |
|  | Recipe 8.14.
Reading a String from a Binary File |
| |
|  | Recipe 8.15.
Reading Fixed-Length Records |
| |
|  | Recipe 8.16.
Reading Configuration Files |
| |
|  | Recipe 8.17.
Testing a File for Trustworthiness |
| |
|  | Recipe 8.18.
Treating a File as an Array |
| |
|  | Recipe 8.19.
Setting the Default I/O Layers |
| |
|  | Recipe 8.20.
Reading or Writing Unicode from a Filehandle |
| |
|  | Recipe 8.21.
Converting Microsoft Text Files into Unicode |
| |
|  | Recipe 8.22.
Comparing the Contents of Two Files |
| |
|  | Recipe 8.23.
Pretending a String Is a File |
| |
|  | Recipe 8.24.
Program: tailwtmp |
| |
|  | Recipe 8.25.
Program: tctee |
| |
|  | Recipe 8.26.
Program: laston |
| |
|  | Recipe 8.27.
Program: Flat File Indexes |
 |
| |  |
Chapter 9.
Directories |
| |
|  | Introduction |
| |
|  | Recipe 9.1.
Getting and Setting Timestamps |
| |
|  | Recipe 9.2.
Deleting a File |
| |
|  | Recipe 9.3.
Copying or Moving a File |
| |
|  | Recipe 9.4.
Recognizing Two Names for the Same File |
| |
|  | Recipe 9.5.
Processing All Files in a Directory |
| |
|  | Recipe 9.6.
Globbing, or Getting a List of Filenames Matching a Pattern |
| |
|  | Recipe 9.7.
Processing All Files in a Directory Recursively |
| |
|  | Recipe 9.8.
Removing a Directory and Its Contents |
| |
|  | Recipe 9.9.
Renaming Files |
| |
|  | Recipe 9.10.
Splitting a Filename into Its Component Parts |
| |
|  | Recipe 9.11.
Working with Symbolic File Permissions Instead of Octal Values |
| |
|  | Recipe 9.12.
Program: symirror |
| |
|  | Recipe 9.13.
Program: lst |
 |
| |  |
Chapter 10.
Subroutines |
| |
|  | Introduction |
| |
|  | Recipe 10.1.
Accessing Subroutine Arguments |
| |
|  | Recipe 10.2.
Making Variables Private to a Function |
| |
|  | Recipe 10.3.
Creating Persistent Private Variables |
| |
|  | Recipe 10.4.
Determining Current Function Name |
| |
|  | Recipe 10.5.
Passing Arrays and Hashes by Reference |
| |
|  | Recipe 10.6.
Detecting Return Context |
| |
|  | Recipe 10.7.
Passing by Named Parameter |
| |
|  | Recipe 10.8.
Skipping Selected Return Values |
| |
|  | Recipe 10.9.
Returning More Than One Array or Hash |
| |
|  | Recipe 10.10.
Returning Failure |
| |
|  | Recipe 10.11.
Prototyping Functions |
| |
|  | Recipe 10.12.
Handling Exceptions |
| |
|  | Recipe 10.13.
Saving Global Values |
| |
|  | Recipe 10.14.
Redefining a Function |
| |
|  | Recipe 10.15.
Trapping Undefined Function Calls with AUTOLOAD |
| |
|  | Recipe 10.16.
Nesting Subroutines |
| |
|  | Recipe 10.17.
Writing a Switch Statement |
| |
|  | Recipe 10.18.
Program: Sorting Your Mail |
 |
| |  |
Chapter 11.
References and Records |
| |
|  | Introduction |
| |
|  | Recipe 11.1.
Taking References to Arrays |
| |
|  | Recipe 11.2.
Making Hashes of Arrays |
| |
|  | Recipe 11.3.
Taking References to Hashes |
| |
|  | Recipe 11.4.
Taking References to Functions |
| |
|  | Recipe 11.5.
Taking References to Scalars |
| |
|  | Recipe 11.6.
Creating Arrays of Scalar References |
| |
|  | Recipe 11.7.
Using Closures Instead of Objects |
| |
|  | Recipe 11.8.
Creating References to Methods |
| |
|  | Recipe 11.9.
Constructing Records |
| |
|  | Recipe 11.10.
Reading and Writing Hash Records to Text Files |
| |
|  | Recipe 11.11.
Printing Data Structures |
| |
|  | Recipe 11.12.
Copying Data Structures |
| |
|  | Recipe 11.13.
Storing Data Structures to Disk |
| |
|  | Recipe 11.14.
Transparently Persistent Data Structures |
| |
|  | Recipe 11.15.
Coping with Circular Data Structures Using Weak References |
| |
|  | Recipe 11.16.
Program: Outlines |
| |
|  | Recipe 11.17.
Program: Binary Trees |
 |
| |  |
Chapter 12.
Packages, Libraries, and Modules |
| |
|  | Introduction |
| |
|  | Recipe 12.1.
Defining a Module's Interface |
| |
|  | Recipe 12.2.
Trapping Errors in require or use |
| |
|  | Recipe 12.3.
Delaying use Until Runtime |
| |
|  | Recipe 12.4.
Making Variables Private to a Module |
| |
|  | Recipe 12.5.
Making Functions Private to a Module |
| |
|  | Recipe 12.6.
Determining the Caller's Package |
| |
|  | Recipe 12.7.
Automating Module Cleanup |
| |
|  | Recipe 12.8.
Keeping Your Own Module Directory |
| |
|  | Recipe 12.9.
Preparing a Module for Distribution |
| |
|  | Recipe 12.10.
Speeding Module Loading with SelfLoader |
| |
|  | Recipe 12.11.
Speeding Up Module Loading with Autoloader |
| |
|  | Recipe 12.12.
Overriding Built-in Functions |
| |
|  | Recipe 12.13.
Overriding a Built-in Function in All Packages |
| |
|  | Recipe 12.14.
Reporting Errors and Warnings Like Built-ins |
| |
|  | Recipe 12.15.
Customizing Warnings |
| |
|  | Recipe 12.16.
Referring to Packages Indirectly |
| |
|  | Recipe 12.17.
Using h2ph to Translate C #include Files |
| |
|  | Recipe 12.18.
Using h2xs to Make a Module with C Code |
| |
|  | Recipe 12.19.
Writing Extensions in C with Inline::C |
| |
|  | Recipe 12.20.
Documenting Your Module with Pod |
| |
|  | Recipe 12.21.
Building and Installing a CPAN Module |
| |
|  | Recipe 12.22.
Example: Module Template |
| |
|  | Recipe 12.23.
Program: Finding Versions and Descriptions of Installed Modules |
 |
| |  |
Chapter 13.
Classes, Objects, and Ties |
| |
|  | Introduction |
| |
|  | Recipe 13.1.
Constructing an Object |
| |
|  | Recipe 13.2.
Destroying an Object |
| |
|  | Recipe 13.3.
Managing Instance Data |
| |
|  | Recipe 13.4.
Managing Class Data |
| |
|  | Recipe 13.5.
Using Classes as Structs |
| |
|  | Recipe 13.6.
Cloning Constructors |
| |
|  | Recipe 13.7.
Copy Constructors |
| |
|  | Recipe 13.8.
Invoking Methods Indirectly |
| |
|  | Recipe 13.9.
Determining Subclass Membership |
| |
|  | Recipe 13.10.
Writing an Inheritable Class |
| |
|  | Recipe 13.11.
Accessing Overridden Methods |
| |
|  | Recipe 13.12.
Generating Attribute Methods Using AUTOLOAD |
| |
|  | Recipe 13.13.
Coping with Circular Data Structures Using Objects |
| |
|  | Recipe 13.14.
Overloading Operators |
| |
|  | Recipe 13.15.
Creating Magic Variables with tie |
 |
| |  |
Chapter 14.
Database Access |
| |
|  | Introduction |
| |
|  | Recipe 14.1.
Making and Using a DBM File |
| |
|  | Recipe 14.2.
Emptying a DBM File |
| |
|  | Recipe 14.3.
Converting Between DBM Files |
| |
|  | Recipe 14.4.
Merging DBM Files |
| |
|  | Recipe 14.5.
Sorting Large DBM Files |
| |
|  | Recipe 14.6.
Storing Complex Data in a DBM File |
| |
|  | Recipe 14.7.
Persistent Data |
| |
|  | Recipe 14.8.
Saving Query Results to Excel or CSV |
| |
|  | Recipe 14.9.
Executing an SQL Command Using DBI |
| |
|  | Recipe 14.10.
Escaping Quotes |
| |
|  | Recipe 14.11.
Dealing with Database Errors |
| |
|  | Recipe 14.12.
Repeating Queries Efficiently |
| |
|  | Recipe 14.13.
Building Queries Programmatically |
| |
|  | Recipe 14.14.
Finding the Number of Rows Returned by a Query |
| |
|  | Recipe 14.15.
Using Transactions |
| |
|  | Recipe 14.16.
Viewing Data One Page at a Time |
| |
|  | Recipe 14.17.
Querying a CSV File with SQL |
| |
|  | Recipe 14.18.
Using SQL Without a Database Server |
| |
|  | Recipe 14.19.
Program: ggh—Grep Netscape Global History |
 |
| |  |
Chapter 15.
Interactivity |
| |
|  | Introduction |
| |
|  | Recipe 15.1.
Parsing Program Arguments |
| |
|  | Recipe 15.2.
Testing Whether a Program Is Running Interactively |
| |
|  | Recipe 15.3.
Clearing the Screen |
| |
|  | Recipe 15.4.
Determining Terminal or Window Size |
| |
|  | Recipe 15.5.
Changing Text Color |
| |
|  | Recipe 15.6.
Reading Single Characters from the Keyboard |
| |
|  | Recipe 15.7.
Ringing the Terminal Bell |
| |
|  | Recipe 15.8.
Using POSIX termios |
| |
|  | Recipe 15.9.
Checking for Waiting Input |
| |
|  | Recipe 15.10.
Reading Passwords |
| |
|  | Recipe 15.11.
Editing Input |
| |
|  | Recipe 15.12.
Managing the Screen |
| |
|  | Recipe 15.13.
Controlling Another Program with Expect |
| |
|  | Recipe 15.14.
Creating Menus with Tk |
| |
|  | Recipe 15.15.
Creating Dialog Boxes with Tk |
| |
|  | Recipe 15.16.
Responding to Tk Resize Events |
| |
|  | Recipe 15.17.
Removing the DOS Shell Window with Windows Perl/Tk |
| |
|  | Recipe 15.18.
Graphing Data |
| |
|  | Recipe 15.19.
Thumbnailing Images |
| |
|  | Recipe 15.20.
Adding Text to an Image |
| |
|  | Recipe 15.21.
Program: Small termcap Program |
| |
|  | Recipe 15.22.
Program: tkshufflepod |
| |
|  | Recipe 15.23.
Program: graphbox |
 |
| |  |
Chapter 16.
Process Management and Communication |
| |
|  | Introduction |
| |
|  | Recipe 16.1.
Gathering Output from a Program |
| |
|  | Recipe 16.2.
Running Another Program |
| |
|  | Recipe 16.3.
Replacing the Current Program with a Different One |
| |
|  | Recipe 16.4.
Reading or Writing to Another Program |
| |
|  | Recipe 16.5.
Filtering Your Own Output |
| |
|  | Recipe 16.6.
Preprocessing Input |
| |
|  | Recipe 16.7.
Reading STDERR from a Program |
| |
|  | Recipe 16.8.
Controlling Input and Output of Another Program |
| |
|  | Recipe 16.9.
Controlling the Input, Output, and Error of Another Program |
| |
|  | Recipe 16.10.
Communicating Between Related Processes |
| |
|  | Recipe 16.11.
Making a Process Look Like a File with Named Pipes |
| |
|  | Recipe 16.12.
Sharing Variables in Different Processes |
| |
|  | Recipe 16.13.
Listing Available Signals |
| |
|  | Recipe 16.14.
Sending a Signal |
| |
|  | Recipe 16.15.
Installing a Signal Handler |
| |
|  | Recipe 16.16.
Temporarily Overriding a Signal Handler |
| |
|  | Recipe 16.17.
Writing a Signal Handler |
| |
|  | Recipe 16.18.
Catching Ctrl-C |
| |
|  | Recipe 16.19.
Avoiding Zombie Processes |
| |
|  | Recipe 16.20.
Blocking Signals |
| |
|  | Recipe 16.21.
Timing Out an Operation |
| |
|  | Recipe 16.22.
Turning Signals into Fatal Errors |
| |
|  | Recipe 16.23.
Program: sigrand |
 |
| |  |
Chapter 17.
Sockets |
| |
|  | Introduction |
| |
|  | Recipe 17.1.
Writing a TCP Client |
| |
|  | Recipe 17.2.
Writing a TCP Server |
| |
|  | Recipe 17.3.
Communicating over TCP |
| |
|  | Recipe 17.4.
Setting Up a UDP Client |
| |
|  | Recipe 17.5.
Setting Up a UDP Server |
| |
|  | Recipe 17.6.
Using Unix Domain Sockets |
| |
|  | Recipe 17.7.
Identifying the Other End of a Socket |
| |
|  | Recipe 17.8.
Finding Your Own Name and Address |
| |
|  | Recipe 17.9.
Closing a Socket After Forking |
| |
|  | Recipe 17.10.
Writing Bidirectional Clients |
| |
|  | Recipe 17.11.
Forking Servers |
| |
|  | Recipe 17.12.
Pre-Forking Servers |
| |
|  | Recipe 17.13.
Non-Forking Servers |
| |
|  | Recipe 17.14.
Multitasking Server with Threads |
| |
|  | Recipe 17.15.
Writing a Multitasking Server with POE |
| |
|  | Recipe 17.16.
Writing a Multihomed Server |
| |
|  | Recipe 17.17.
Making a Daemon Server |
| |
|  | Recipe 17.18.
Restarting a Server on Demand |
| |
|  | Recipe 17.19.
Managing Multiple Streams of Input |
| |
|  | Recipe 17.20.
Program: backsniff |
| |
|  | Recipe 17.21.
Program: fwdport |
 |
| |  |
Chapter 18.
Internet Services |
| |
|  | Introduction |
| |
|  | Recipe 18.1.
Simple DNS Lookups |
| |
|  | Recipe 18.2.
Being an FTP Client |
| |
|  | Recipe 18.3.
Sending Mail |
| |
|  | Recipe 18.4.
Reading and Posting Usenet News Messages |
| |
|  | Recipe 18.5.
Reading Mail with POP3 |
| |
|  | Recipe 18.6.
Simulating Telnet from a Program |
| |
|  | Recipe 18.7.
Pinging a Machine |
| |
|  | Recipe 18.8.
Accessing an LDAP Server |
| |
|  | Recipe 18.9.
Sending Attachments in Mail |
| |
|  | Recipe 18.10.
Extracting Attachments from Mail |
| |
|  | Recipe 18.11.
Writing an XML-RPC Server |
| |
|  | Recipe 18.12.
Writing an XML-RPC Client |
| |
|  | Recipe 18.13.
Writing a SOAP Server |
| |
|  | Recipe 18.14.
Writing a SOAP Client |
| |
|  | Recipe 18.15.
Program: rfrm |
| |
|  | Recipe 18.16.
Program: expn and vrfy |
 |
| |  |
Chapter 19.
CGI Programming |
| |
|  | Introduction |
| |
|  | Recipe 19.1.
Writing a CGI Script |
| |
|  | Recipe 19.2.
Redirecting Error Messages |
| |
|  | Recipe 19.3.
Fixing a 500 Server Error |
| |
|  | Recipe 19.4.
Writing a Safe CGI Program |
| |
|  | Recipe 19.5.
Executing Commands Without Shell Escapes |
| |
|  | Recipe 19.6.
Formatting Lists and Tables with HTML Shortcuts |
| |
|  | Recipe 19.7.
Redirecting to a Different Location |
| |
|  | Recipe 19.8.
Debugging the Raw HTTP Exchange |
| |
|  | Recipe 19.9.
Managing Cookies |
| |
|  | Recipe 19.10.
Creating Sticky Widgets |
| |
|  | Recipe 19.11.
Writing a Multiscreen CGI Script |
| |
|  | Recipe 19.12.
Saving a Form to a File or Mail Pipe |
| |
|  | Recipe 19.13.
Program: chemiserie |
 |
| |  |
Chapter 20.
Web Automation |
| |
|  | Introduction |
| |
|  | Recipe 20.1.
Fetching a URL from a Perl Script |
| |
|  | Recipe 20.2.
Automating Form Submission |
| |
|  | Recipe 20.3.
Extracting URLs |
| |
|  | Recipe 20.4.
Converting ASCII to HTML |
| |
|  | Recipe 20.5.
Converting HTML to ASCII |
| |
|  | Recipe 20.6.
Extracting or Removing HTML Tags |
| |
|  | Recipe 20.7.
Finding Stale Links |
| |
|  | Recipe 20.8.
Finding Fresh Links |
| |
|  | Recipe 20.9.
Using Templates to Generate HTML |
| |
|  | Recipe 20.10.
Mirroring Web Pages |
| |
|  | Recipe 20.11.
Creating a Robot |
| |
|  | Recipe 20.12.
Parsing a Web Server Log File |
| |
|  | Recipe 20.13.
Processing Server Logs |
| |
|  | Recipe 20.14.
Using Cookies |
| |
|  | Recipe 20.15.
Fetching Password-Protected Pages |
| |
|  | Recipe 20.16.
Fetching https:// Web Pages |
| |
|  | Recipe 20.17.
Resuming an HTTP GET |
| |
|  | Recipe 20.18.
Parsing HTML |
| |
|  | Recipe 20.19.
Extracting Table Data |
| |
|  | Recipe 20.20.
Program: htmlsub |
| |
|  | Recipe 20.21.
Program: hrefsub |
 |
| |  |
Chapter 21.
mod_perl |
| |
|  | Introduction |
| |
|  | Recipe 21.1.
Authenticating |
| |
|  | Recipe 21.2.
Setting Cookies |
| |
|  | Recipe 21.3.
Accessing Cookie Values |
| |
|  | Recipe 21.4.
Redirecting the Browser |
| |
|  | Recipe 21.5.
Interrogating Headers |
| |
|  | Recipe 21.6.
Accessing Form Parameters |
| |
|  | Recipe 21.7.
Receiving Uploaded Files |
| |
|  | Recipe 21.8.
Speeding Up Database Access |
| |
|  | Recipe 21.9.
Customizing Apache's Logging |
| |
|  | Recipe 21.10.
Transparently Storing Information in URLs |
| |
|  | Recipe 21.11.
Communicating Between mod_perl and PHP |
| |
|  | Recipe 21.12.
Migrating from CGI to mod_perl |
| |
|  | Recipe 21.13.
Sharing Information Between Handlers |
| |
|  | Recipe 21.14.
Reloading Changed Modules |
| |
|  | Recipe 21.15.
Benchmarking a mod_perl Application |
| |
|  | Recipe 21.16.
Templating with HTML::Mason |
| |
|  | Recipe 21.17.
Templating with Template Toolkit |
 |
| |  |
Chapter 22.
XML |
| |
|  | Introduction |
| |
|  | Recipe 22.1.
Parsing XML into Data Structures |
| |
|  | Recipe 22.2.
Parsing XML into a DOM Tree |
| |
|  | Recipe 22.3.
Parsing XML into SAX Events |
| |
|  | Recipe 22.4.
Making Simple Changes to Elements or Text |
| |
|  | Recipe 22.5.
Validating XML |
| |
|  | Recipe 22.6.
Finding Elements and Text Within an XML Document |
| |
|  | Recipe 22.7.
Processing XML Stylesheet Transformations |
| |
|  | Recipe 22.8.
Processing Files Larger Than Available Memory |
| |
|  | Recipe 22.9.
Reading and Writing RSS Files |
| |
|  | Recipe 22.10.
Writing XML |
 |
| |  | Colophon |
| |  | Index |