| | 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 |