- Broschiertes Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
Find a Perl programmer, and you'll find a copy of Perl Cookbook nearby.Perl Cookbook is a comprehensive collection of problems, solutions, and practical examples for anyone programming in Perl. The book contains hundreds of rigorously reviewed Perl "recipes" and thousands of examples ranging from brief one-liners to complete applications. The second edition of Perl Cookbook has been fully updated for Perl 5.8, with extensive changes for Unicode support, I/O layers, mod_perl, and new technologies that have emerged since the previous edition of the book. Recipes have been updated to include the…mehr
Andere Kunden interessierten sich auch für
- Sam TregarWriting Perl Modules for Cpan30,99 €
- Simon CozensAdvanced Perl Programming39,99 €
- Nathan PatwardhanPerl in a Nutshell39,99 €
- Darren ChamberlainPerl Template Toolkit35,99 €
- Randy J. RayProgramming Web Services with Perl43,99 €
- James D. TisdallBeginning Perl for Bioinformatics35,99 €
- Erik T. RayPerl and XML44,99 €
-
-
-
Find a Perl programmer, and you'll find a copy of Perl Cookbook nearby.Perl Cookbook is a comprehensive collection of problems, solutions, and practical examples for anyone programming in Perl. The book contains hundreds of rigorously reviewed Perl "recipes" and thousands of examples ranging from brief one-liners to complete applications.
The second edition of Perl Cookbook has been fully updated for Perl 5.8, with extensive changes for Unicode support, I/O layers, mod_perl, and new technologies that have emerged since the previous edition of the book. Recipes have been updated to include the latest modules. New recipes have been added to every chapter of the book, and some chapters have almost doubled in size.
Covered topic areas include:
- Manipulating strings, numbers, dates, arrays, and hashes
- Pattern matching and text substitutions
- References, data structures, objects, and classes
- Signals and exceptions
- Screen addressing, menus, and graphical applications
- Managing
other processes
- Writing secure scripts
- Client-server programming
- Internet applications programming with mail, news, ftp, and telnet
- CGI and mod_perl programming
- Web programming
Since its first release in 1998, Perl Cookbook has earned its place in the libraries of serious Perl users of all levels of expertise by providing practical answers, code examples, and mini-tutorials addressing the challenges that programmers face. Now the second edition of this bestselling book is ready to earn its place among the ranks of favorite Perl books as well.
Whether you're a novice or veteran Perl programmer, you'll find Perl Cookbook, 2nd Edition to be one of the most useful books on Perl available. Its comfortable discussion style and accurate attention to detail cover just about any topic you'd want to know about. You can get by without having this book in your library, but once you've tried a few of the recipes, you won't want to.
Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
The second edition of Perl Cookbook has been fully updated for Perl 5.8, with extensive changes for Unicode support, I/O layers, mod_perl, and new technologies that have emerged since the previous edition of the book. Recipes have been updated to include the latest modules. New recipes have been added to every chapter of the book, and some chapters have almost doubled in size.
Covered topic areas include:
- Manipulating strings, numbers, dates, arrays, and hashes
- Pattern matching and text substitutions
- References, data structures, objects, and classes
- Signals and exceptions
- Screen addressing, menus, and graphical applications
- Managing
other processes
- Writing secure scripts
- Client-server programming
- Internet applications programming with mail, news, ftp, and telnet
- CGI and mod_perl programming
- Web programming
Since its first release in 1998, Perl Cookbook has earned its place in the libraries of serious Perl users of all levels of expertise by providing practical answers, code examples, and mini-tutorials addressing the challenges that programmers face. Now the second edition of this bestselling book is ready to earn its place among the ranks of favorite Perl books as well.
Whether you're a novice or veteran Perl programmer, you'll find Perl Cookbook, 2nd Edition to be one of the most useful books on Perl available. Its comfortable discussion style and accurate attention to detail cover just about any topic you'd want to know about. You can get by without having this book in your library, but once you've tried a few of the recipes, you won't want to.
Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
Produktdetails
- Produktdetails
- Verlag: O'Reilly Media
- 2nd ed.
- Seitenzahl: 964
- Erscheinungstermin: 30. September 2003
- Englisch
- Abmessung: 237mm x 182mm x 60mm
- Gewicht: 1352g
- ISBN-13: 9780596003135
- ISBN-10: 0596003137
- Artikelnr.: 11441010
- Herstellerkennzeichnung
- Libri GmbH
- Europaallee 1
- 36244 Bad Hersfeld
- 06621 890
- Verlag: O'Reilly Media
- 2nd ed.
- Seitenzahl: 964
- Erscheinungstermin: 30. September 2003
- Englisch
- Abmessung: 237mm x 182mm x 60mm
- Gewicht: 1352g
- ISBN-13: 9780596003135
- ISBN-10: 0596003137
- Artikelnr.: 11441010
- Herstellerkennzeichnung
- Libri GmbH
- Europaallee 1
- 36244 Bad Hersfeld
- 06621 890
Tom Christiansen is a freelance consultant specializing in Perl training and writing. After working for several years for TSR Hobbies (of Dungeons and Dragons fame), he set off for college where he spent a year in Spain and five in America, dabbling in music, linguistics, programming, and some half-dozen different spoken languages. Tom finally escaped UW-Madison with B.A.s in Spanish and computer science and an M.S. in computer science. He then spent five years at Convex as a jack-of-all-trades working on everything from system administration to utility and kernel development, with customer support and training thrown in for good measure. Tom also served two terms on the USENIX Association Board of directors. With over fifteen years' experience in UNIX system administration and programming, Tom presents seminars internationally. Living in the foothills above Boulder, Colorado, surrounded by mule deer, skunks, and the occasional mountain lion and black bear, Tom takes summers off for hiking, hacking, birding, music making, and gaming. Nathan Torkington is a banjo player, father, and husband. His crimes in the computing community include: coauthor of the Perl Cookbook, editor for O'Reilly and Associates, content coordinator for the Open Source Convention and Perl Conference, and project manager for perl6.
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
1.1 Introduction
1.1 Accessing Substrings
1.2 Establishing a Default Value
1.3 Exchanging Values Without Using Temporary Variables
1.4 Converting Between Characters and Values
1.5 Using Named Unicode Characters
1.6 Processing a String One Character at a Time
1.7 Reversing a String by Word or Character
1.8 Treating Unicode Combined Characters as Single Characters
1.9 Canonicalizing Strings with Unicode Combined Characters
1.10 Treating a Unicode String as Octets
1.11 Expanding and Compressing Tabs
1.12 Expanding Variables in User Input
1.13 Controlling Case
1.14 Properly Capitalizing a Title or Headline
1.15 Interpolating Functions and Expressions Within Strings
1.16 Indenting Here Documents
1.17 Reformatting Paragraphs
1.18 Escaping Characters
1.19 Trimming Blanks from the Ends of a String
1.20 Parsing Comma-Separated Data
1.21 Constant Variables
1.22 Soundex Matching
1.23 Program: fixstyle
1.24 Program: psgrep
Chapter 2: Numbers
2.1 Introduction
2.1 Checking Whether a String Is a Valid Number
2.2 Rounding Floating-Point Numbers
2.3 Comparing Floating-Point Numbers
2.4 Operating on a Series of Integers
2.5 Working with Roman Numerals
2.6 Generating Random Numbers
2.7 Generating Repeatable Random Number Sequences
2.8 Making Numbers Even More Random
2.9 Generating Biased Random Numbers
2.10 Doing Trigonometry in Degrees, Not Radians
2.11 Calculating More Trigonometric Functions
2.12 Taking Logarithms
2.13 Multiplying Matrices
2.14 Using Complex Numbers
2.15 Converting Binary, Octal, and Hexadecimal Numbers
2.16 Putting Commas in Numbers
2.17 Printing Correct Plurals
2.18 Program: Calculating Prime Factors
Chapter 3: Dates and Times
3.1 Introduction
3.1 Finding Today's Date
3.2 Converting DMYHMS to Epoch Seconds
3.3 Converting Epoch Seconds to DMYHMS
3.4 Adding to or Subtracting from a Date
3.5 Difference of Two Dates
3.6 Day in a Week/Month/Year or Week Number
3.7 Parsing Dates and Times from Strings
3.8 Printing a Date
3.9 High-Resolution Timers
3.10 Short Sleeps
3.11 Program: hopdelta
Chapter 4: Arrays
4.1 Introduction
4.1 Specifying a List in Your Program
4.2 Printing a List with Commas
4.3 Changing Array Size
4.4 Implementing a Sparse Array
4.5 Iterating Over an Array
4.6 Iterating Over an Array by Reference
4.7 Extracting Unique Elements from a List
4.8 Finding Elements in One Array but Not Another
4.9 Computing Union, Intersection, or Difference of Unique Lists
4.10 Appending One Array to Another
4.11 Reversing an Array
4.12 Processing Multiple Elements of an Array
4.13 Finding the First List Element That Passes a Test
4.14 Finding All Elements in an Array Matching Certain Criteria
4.15 Sorting an Array Numerically
4.16 Sorting a List by Computable Field
4.17 Implementing a Circular List
4.18 Randomizing an Array
4.19 Program: words
4.20 Program: permute
Chapter 5: Hashes
5.1 Introduction
5.1 Adding an Element to a Hash
5.2 Testing for the Presence of a Key in a Hash
5.3 Creating a Hash with Immutable Keys or Values
5.4 Deleting from a Hash
5.5 Traversing a Hash
5.6 Printing a Hash
5.7 Retrieving from a Hash in Insertion Order
5.8 Hashes with Multiple Values per Key
5.9 Inverting a Hash
5.10 Sorting a Hash
5.11 Merging Hashes
5.12 Finding Common or Different Keys in Two Hashes
5.13 Hashing References
5.14 Presizing a Hash
5.15 Finding the Most Common Anything
5.16 Representing Relationships Between Data
5.17 Program: dutree
Chapter 6: Pattern Matching
6.1 Introduction
6.1 Copying and Substituting Simultaneously
6.2 Matching Letters
6.3 Matching Words
6.4 Commenting Regular Expressions
6.5 Finding the Nth Occurrence of a Match
6.6 Matching Within Multiple Lines
6.7 Reading Records with a Separator
6.8 Extracting a Range of Lines
6.9 Matching Shell Globs as Regular Expressions
6.10 Speeding Up Interpolated Matches
6.11 Testing for a Valid Pattern
6.12 Honoring Locale Settings in Regular Expressions
6.13 Approximate Matching
6.14 Matching from Where the Last Pattern Left Off
6.15 Greedy and Non-Greedy Matches
6.16 Detecting Doubled Words
6.17 Matching Nested Patterns
6.18 Expressing AND, OR, and NOT in a Single Pattern
6.19 Matching a Valid Mail Address
6.20 Matching Abbreviations
6.21 Program: urlify
6.22 Program: tcgrep
6.23 Regular Expression Grab Bag
Chapter 7: File Access
7.1 Introduction
7.1 Opening a File
7.2 Opening Files with Unusual Filenames
7.3 Expanding Tildes in Filenames
7.4 Making Perl Report Filenames in Error Messages
7.5 Storing Filehandles into Variables
7.6 Writing a Subroutine That Takes Filehandles as Built-ins Do
7.7 Caching Open Output Filehandles
7.8 Printing to Many Filehandles Simultaneously
7.9 Opening and Closing File Descriptors by Number
7.10 Copying Filehandles
7.11 Creating Temporary Files
7.12 Storing a File Inside Your Program Text
7.13 Storing Multiple Files in the DATA Area
7.14 Writing a Unix-Style Filter Program
7.15 Modifying a File in Place with a Temporary File
7.16 Modifying a File in Place with the -i Switch
7.17 Modifying a File in Place Without a Temporary File
7.18 Locking a File
7.19 Flushing Output
7.20 Doing Non-Blocking I/O
7.21 Determining the Number of Unread Bytes
7.22 Reading from Many Filehandles Without Blocking
7.23 Reading an Entire Line Without Blocking
7.24 Program: netlock
7.25 Program: lockarea
Chapter 8: File Contents
8.1 Introduction
8.1 Reading Lines with Continuation Characters
8.2 Counting Lines (or Paragraphs or Records) in a File
8.3 Processing Every Word in a File
8.4 Reading a File Backward by Line or Paragraph
8.5 Trailing a Growing File
8.6 Picking a Random Line from a File
8.7 Randomizing All Lines
8.8 Reading a Particular Line in a File
8.9 Processing Variable-Length Text Fields
8.10 Removing the Last Line of a File
8.11 Processing Binary Files
8.12 Using Random-Access I/O
8.13 Updating a Random-Access File
8.14 Reading a String from a Binary File
8.15 Reading Fixed-Length Records
8.16 Reading Configuration Files
8.17 Testing a File for Trustworthiness
8.18 Treating a File as an Array
8.19 Setting the Default I/O Layers
8.20 Reading or Writing Unicode from a Filehandle
8.21 Converting Microsoft Text Files into Unicode
8.22 Comparing the Contents of Two Files
8.23 Pretending a String Is a File
8.24 Program: tailwtmp
8.25 Program: tctee
8.26 Program: laston
8.27 Program: Flat File Indexes
Chapter 9: Directories
9.1 Introduction
9.1 Getting and Setting Timestamps
9.2 Deleting a File
9.3 Copying or Moving a File
9.4 Recognizing Two Names for the Same File
9.5 Processing All Files in a Directory
9.6 Globbing, or Getting a List of Filenames Matching a Pattern
9.7 Processing All Files in a Directory Recursively
9.8 Removing a Directory and Its Contents
9.9 Renaming Files
9.10 Splitting a Filename into Its Component Parts
9.11 Working with Symbolic File Permissions Instead of Octal Values
9.12 Program: symirror
9.13 Program: lst
Chapter 10: Subroutines
10.1 Introduction
10.1 Accessing Subroutine Arguments
10.2 Making Variables Private to a Function
10.3 Creating Persistent Private Variables
10.4 Determining Current Function Name
10.5 Passing Arrays and Hashes by Reference
10.6 Detecting Return Context
10.7 Passing by Named Parameter
10.8 Skipping Selected Return Values
10.9 Returning More Than One Array or Hash
10.10 Returning Failure
10.11 Prototyping Functions
10.12 Handling Exceptions
10.13 Saving Global Values
10.14 Redefining a Function
10.15 Trapping Undefined Function Calls with AUTOLOAD
10.16 Nesting Subroutines
10.17 Writing a Switch Statement
10.18 Program: Sorting Your Mail
Chapter 11: References and Records
11.1 Introduction
11.1 Taking References to Arrays
11.2 Making Hashes of Arrays
11.3 Taking References to Hashes
11.4 Taking References to Functions
11.5 Taking References to Scalars
11.6 Creating Arrays of Scalar References
11.7 Using Closures Instead of Objects
11.8 Creating References to Methods
11.9 Constructing Records
11.10 Reading and Writing Hash Records to Text Files
11.11 Printing Data Structures
11.12 Copying Data Structures
11.13 Storing Data Structures to Disk
11.14 Transparently Persistent Data Structures
11.15 Coping with Circular Data Structures Using Weak References
11.16 Program: Outlines
11.17 Program: Binary Trees
Chapter 12: Packages, Libraries, and Modules
12.1 Introduction
12.1 Defining a Module's Interface
12.2 Trapping Errors in require or use
12.3 Delaying use Until Runtime
12.4 Making Variables Private to a Module
12.5 Making Functions Private to a Module
12.6 Determining the Caller's Package
12.7 Automating Module Cleanup
12.8 Keeping Your Own Module Directory
12.9 Preparing a Module for Distribution
12.10 Speeding Module Loading with SelfLoader
12.11 Speeding Up Module Loading with Autoloader
12.12 Overriding Built-in Functions
12.13 Overriding a Built-in Function in All Packages
12.14 Reporting Errors and Warnings Like Built-ins
12.15 Customizing Warnings
12.16 Referring to Packages Indirectly
12.17 Using h2ph to Translate C #include Files
12.18 Using h2xs to Make a Module with C Code
12.19 Writing Extensions in C with Inline::C
12.20 Documenting Your Module with Pod
12.21 Building and Installing a CPAN Module
12.22 Example: Module Template
12.23 Program: Finding Versions and Descriptions of Installed Modules
Chapter 13: Classes, Objects, and Ties
13.1 Introduction
13.1 Constructing an Object
13.2 Destroying an Object
13.3 Managing Instance Data
13.4 Managing Class Data
13.5 Using Classes as Structs
13.6 Cloning Constructors
13.7 Copy Constructors
13.8 Invoking Methods Indirectly
13.9 Determining Subclass Membership
13.10 Writing an Inheritable Class
13.11 Accessing Overridden Methods
13.12 Generating Attribute Methods Using AUTOLOAD
13.13 Coping with Circular Data Structures Using Objects
13.14 Overloading Operators
13.15 Creating Magic Variables with tie
Chapter 14: Database Access
14.1 Introduction
14.1 Making and Using a DBM File
14.2 Emptying a DBM File
14.3 Converting Between DBM Files
14.4 Merging DBM Files
14.5 Sorting Large DBM Files
14.6 Storing Complex Data in a DBM File
14.7 Persistent Data
14.8 Saving Query Results to Excel or CSV
14.9 Executing an SQL Command Using DBI
14.10 Escaping Quotes
14.11 Dealing with Database Errors
14.12 Repeating Queries Efficiently
14.13 Building Queries Programmatically
14.14 Finding the Number of Rows Returned by a Query
14.15 Using Transactions
14.16 Viewing Data One Page at a Time
14.17 Querying a CSV File with SQL
14.18 Using SQL Without a Database Server
14.19 Program: ggh-Grep Netscape Global History
Chapter 15: Interactivity
15.1 Introduction
15.1 Parsing Program Arguments
15.2 Testing Whether a Program Is Running Interactively
15.3 Clearing the Screen
15.4 Determining Terminal or Window Size
15.5 Changing Text Color
15.6 Reading Single Characters from the Keyboard
15.7 Ringing the Terminal Bell
15.8 Using POSIX termios
15.9 Checking for Waiting Input
15.10 Reading Passwords
15.11 Editing Input
15.12 Managing the Screen
15.13 Controlling Another Program with Expect
15.14 Creating Menus with Tk
15.15 Creating Dialog Boxes with Tk
15.16 Responding to Tk Resize Events
15.17 Removing the DOS Shell Window with Windows Perl/Tk
15.18 Graphing Data
15.19 Thumbnailing Images
15.20 Adding Text to an Image
15.21 Program: Small termcap Program
15.22 Program: tkshufflepod
15.23 Program: graphbox
Chapter 16: Process Management and Communication
16.1 Introduction
16.1 Gathering Output from a Program
16.2 Running Another Program
16.3 Replacing the Current Program with a Different One
16.4 Reading or Writing to Another Program
16.5 Filtering Your Own Output
16.6 Preprocessing Input
16.7 Reading STDERR from a Program
16.8 Controlling Input and Output of Another Program
16.9 Controlling the Input, Output, and Error of Another Program
16.10 Communicating Between Related Processes
16.11 Making a Process Look Like a File with Named Pipes
16.12 Sharing Variables in Different Processes
16.13 Listing Available Signals
16.14 Sending a Signal
16.15 Installing a Signal Handler
16.16 Temporarily Overriding a Signal Handler
16.17 Writing a Signal Handler
16.18 Catching Ctrl-C
16.19 Avoiding Zombie Processes
16.20 Blocking Signals
16.21 Timing Out an Operation
16.22 Turning Signals into Fatal Errors
16.23 Program: sigrand
Chapter 17: Sockets
17.1 Introduction
17.1 Writing a TCP Client
17.2 Writing a TCP Server
17.3 Communicating over TCP
17.4 Setting Up a UDP Client
17.5 Setting Up a UDP Server
17.6 Using Unix Domain Sockets
17.7 Identifying the Other End of a Socket
17.8 Finding Your Own Name and Address
17.9 Closing a Socket After Forking
17.10 Writing Bidirectional Clients
17.11 Forking Servers
17.12 Pre-Forking Servers
17.13 Non-Forking Servers
17.14 Multitasking Server with Threads
17.15 Writing a Multitasking Server with POE
17.16 Writing a Multihomed Server
17.17 Making a Daemon Server
17.18 Restarting a Server on Demand
17.19 Managing Multiple Streams of Input
17.20 Program: backsniff
17.21 Program: fwdport
Chapter 18: Internet Services
18.1 Introduction
18.1 Simple DNS Lookups
18.2 Being an FTP Client
18.3 Sending Mail
18.4 Reading and Posting Usenet News Messages
18.5 Reading Mail with POP3
18.6 Simulating Telnet from a Program
18.7 Pinging a Machine
18.8 Accessing an LDAP Server
18.9 Sending Attachments in Mail
18.10 Extracting Attachments from Mail
18.11 Writing an XML-RPC Server
18.12 Writing an XML-RPC Client
18.13 Writing a SOAP Server
18.14 Writing a SOAP Client
18.15 Program: rfrm
18.16 Program: expn and vrfy
Chapter 19: CGI Programming
19.1 Introduction
19.1 Writing a CGI Script
19.2 Redirecting Error Messages
19.3 Fixing a 500 Server Error
19.4 Writing a Safe CGI Program
19.5 Executing Commands Without Shell Escapes
19.6 Formatting Lists and Tables with HTML Shortcuts
19.7 Redirecting to a Different Location
19.8 Debugging the Raw HTTP Exchange
19.9 Managing Cookies
19.10 Creating Sticky Widgets
19.11 Writing a Multiscreen CGI Script
19.12 Saving a Form to a File or Mail Pipe
19.13 Program: chemiserie
Chapter 20: Web Automation
20.1 Introduction
20.1 Fetching a URL from a Perl Script
20.2 Automating Form Submission
20.3 Extracting URLs
20.4 Converting ASCII to HTML
20.5 Converting HTML to ASCII
20.6 Extracting or Removing HTML Tags
20.7 Finding Stale Links
20.8 Finding Fresh Links
20.9 Using Templates to Generate HTML
20.10 Mirroring Web Pages
20.11 Creating a Robot
20.12 Parsing a Web Server Log File
20.13 Processing Server Logs
20.14 Using Cookies
20.15 Fetching Password-Protected Pages
20.16 Fetching https:// Web Pages
20.17 Resuming an HTTP GET
20.18 Parsing HTML
20.19 Extracting Table Data
20.20 Program: htmlsub
20.21 Program: hrefsub
Chapter 21: mod_perl
21.1 Introduction
21.1 Authenticating
21.2 Setting Cookies
21.3 Accessing Cookie Values
21.4 Redirecting the Browser
21.5 Interrogating Headers
21.6 Accessing Form Parameters
21.7 Receiving Uploaded Files
21.8 Speeding Up Database Access
21.9 Customizing Apache's Logging
21.10 Transparently Storing Information in URLs
21.11 Communicating Between mod_perl and PHP
21.12 Migrating from CGI to mod_perl
21.13 Sharing Information Between Handlers
21.14 Reloading Changed Modules
21.15 Benchmarking a mod_perl Application
21.16 Templating with HTML::Mason
21.17 Templating with Template Toolkit
Chapter 22: XML
22.1 Introduction
22.1 Parsing XML into Data Structures
22.2 Parsing XML into a DOM Tree
22.3 Parsing XML into SAX Events
22.4 Making Simple Changes to Elements or Text
22.5 Validating XML
22.6 Finding Elements and Text Within an XML Document
22.7 Processing XML Stylesheet Transformations
22.8 Processing Files Larger Than Available Memory
22.9 Reading and Writing RSS Files
22.10 Writing XML
Colophon
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
1.1 Introduction
1.1 Accessing Substrings
1.2 Establishing a Default Value
1.3 Exchanging Values Without Using Temporary Variables
1.4 Converting Between Characters and Values
1.5 Using Named Unicode Characters
1.6 Processing a String One Character at a Time
1.7 Reversing a String by Word or Character
1.8 Treating Unicode Combined Characters as Single Characters
1.9 Canonicalizing Strings with Unicode Combined Characters
1.10 Treating a Unicode String as Octets
1.11 Expanding and Compressing Tabs
1.12 Expanding Variables in User Input
1.13 Controlling Case
1.14 Properly Capitalizing a Title or Headline
1.15 Interpolating Functions and Expressions Within Strings
1.16 Indenting Here Documents
1.17 Reformatting Paragraphs
1.18 Escaping Characters
1.19 Trimming Blanks from the Ends of a String
1.20 Parsing Comma-Separated Data
1.21 Constant Variables
1.22 Soundex Matching
1.23 Program: fixstyle
1.24 Program: psgrep
Chapter 2: Numbers
2.1 Introduction
2.1 Checking Whether a String Is a Valid Number
2.2 Rounding Floating-Point Numbers
2.3 Comparing Floating-Point Numbers
2.4 Operating on a Series of Integers
2.5 Working with Roman Numerals
2.6 Generating Random Numbers
2.7 Generating Repeatable Random Number Sequences
2.8 Making Numbers Even More Random
2.9 Generating Biased Random Numbers
2.10 Doing Trigonometry in Degrees, Not Radians
2.11 Calculating More Trigonometric Functions
2.12 Taking Logarithms
2.13 Multiplying Matrices
2.14 Using Complex Numbers
2.15 Converting Binary, Octal, and Hexadecimal Numbers
2.16 Putting Commas in Numbers
2.17 Printing Correct Plurals
2.18 Program: Calculating Prime Factors
Chapter 3: Dates and Times
3.1 Introduction
3.1 Finding Today's Date
3.2 Converting DMYHMS to Epoch Seconds
3.3 Converting Epoch Seconds to DMYHMS
3.4 Adding to or Subtracting from a Date
3.5 Difference of Two Dates
3.6 Day in a Week/Month/Year or Week Number
3.7 Parsing Dates and Times from Strings
3.8 Printing a Date
3.9 High-Resolution Timers
3.10 Short Sleeps
3.11 Program: hopdelta
Chapter 4: Arrays
4.1 Introduction
4.1 Specifying a List in Your Program
4.2 Printing a List with Commas
4.3 Changing Array Size
4.4 Implementing a Sparse Array
4.5 Iterating Over an Array
4.6 Iterating Over an Array by Reference
4.7 Extracting Unique Elements from a List
4.8 Finding Elements in One Array but Not Another
4.9 Computing Union, Intersection, or Difference of Unique Lists
4.10 Appending One Array to Another
4.11 Reversing an Array
4.12 Processing Multiple Elements of an Array
4.13 Finding the First List Element That Passes a Test
4.14 Finding All Elements in an Array Matching Certain Criteria
4.15 Sorting an Array Numerically
4.16 Sorting a List by Computable Field
4.17 Implementing a Circular List
4.18 Randomizing an Array
4.19 Program: words
4.20 Program: permute
Chapter 5: Hashes
5.1 Introduction
5.1 Adding an Element to a Hash
5.2 Testing for the Presence of a Key in a Hash
5.3 Creating a Hash with Immutable Keys or Values
5.4 Deleting from a Hash
5.5 Traversing a Hash
5.6 Printing a Hash
5.7 Retrieving from a Hash in Insertion Order
5.8 Hashes with Multiple Values per Key
5.9 Inverting a Hash
5.10 Sorting a Hash
5.11 Merging Hashes
5.12 Finding Common or Different Keys in Two Hashes
5.13 Hashing References
5.14 Presizing a Hash
5.15 Finding the Most Common Anything
5.16 Representing Relationships Between Data
5.17 Program: dutree
Chapter 6: Pattern Matching
6.1 Introduction
6.1 Copying and Substituting Simultaneously
6.2 Matching Letters
6.3 Matching Words
6.4 Commenting Regular Expressions
6.5 Finding the Nth Occurrence of a Match
6.6 Matching Within Multiple Lines
6.7 Reading Records with a Separator
6.8 Extracting a Range of Lines
6.9 Matching Shell Globs as Regular Expressions
6.10 Speeding Up Interpolated Matches
6.11 Testing for a Valid Pattern
6.12 Honoring Locale Settings in Regular Expressions
6.13 Approximate Matching
6.14 Matching from Where the Last Pattern Left Off
6.15 Greedy and Non-Greedy Matches
6.16 Detecting Doubled Words
6.17 Matching Nested Patterns
6.18 Expressing AND, OR, and NOT in a Single Pattern
6.19 Matching a Valid Mail Address
6.20 Matching Abbreviations
6.21 Program: urlify
6.22 Program: tcgrep
6.23 Regular Expression Grab Bag
Chapter 7: File Access
7.1 Introduction
7.1 Opening a File
7.2 Opening Files with Unusual Filenames
7.3 Expanding Tildes in Filenames
7.4 Making Perl Report Filenames in Error Messages
7.5 Storing Filehandles into Variables
7.6 Writing a Subroutine That Takes Filehandles as Built-ins Do
7.7 Caching Open Output Filehandles
7.8 Printing to Many Filehandles Simultaneously
7.9 Opening and Closing File Descriptors by Number
7.10 Copying Filehandles
7.11 Creating Temporary Files
7.12 Storing a File Inside Your Program Text
7.13 Storing Multiple Files in the DATA Area
7.14 Writing a Unix-Style Filter Program
7.15 Modifying a File in Place with a Temporary File
7.16 Modifying a File in Place with the -i Switch
7.17 Modifying a File in Place Without a Temporary File
7.18 Locking a File
7.19 Flushing Output
7.20 Doing Non-Blocking I/O
7.21 Determining the Number of Unread Bytes
7.22 Reading from Many Filehandles Without Blocking
7.23 Reading an Entire Line Without Blocking
7.24 Program: netlock
7.25 Program: lockarea
Chapter 8: File Contents
8.1 Introduction
8.1 Reading Lines with Continuation Characters
8.2 Counting Lines (or Paragraphs or Records) in a File
8.3 Processing Every Word in a File
8.4 Reading a File Backward by Line or Paragraph
8.5 Trailing a Growing File
8.6 Picking a Random Line from a File
8.7 Randomizing All Lines
8.8 Reading a Particular Line in a File
8.9 Processing Variable-Length Text Fields
8.10 Removing the Last Line of a File
8.11 Processing Binary Files
8.12 Using Random-Access I/O
8.13 Updating a Random-Access File
8.14 Reading a String from a Binary File
8.15 Reading Fixed-Length Records
8.16 Reading Configuration Files
8.17 Testing a File for Trustworthiness
8.18 Treating a File as an Array
8.19 Setting the Default I/O Layers
8.20 Reading or Writing Unicode from a Filehandle
8.21 Converting Microsoft Text Files into Unicode
8.22 Comparing the Contents of Two Files
8.23 Pretending a String Is a File
8.24 Program: tailwtmp
8.25 Program: tctee
8.26 Program: laston
8.27 Program: Flat File Indexes
Chapter 9: Directories
9.1 Introduction
9.1 Getting and Setting Timestamps
9.2 Deleting a File
9.3 Copying or Moving a File
9.4 Recognizing Two Names for the Same File
9.5 Processing All Files in a Directory
9.6 Globbing, or Getting a List of Filenames Matching a Pattern
9.7 Processing All Files in a Directory Recursively
9.8 Removing a Directory and Its Contents
9.9 Renaming Files
9.10 Splitting a Filename into Its Component Parts
9.11 Working with Symbolic File Permissions Instead of Octal Values
9.12 Program: symirror
9.13 Program: lst
Chapter 10: Subroutines
10.1 Introduction
10.1 Accessing Subroutine Arguments
10.2 Making Variables Private to a Function
10.3 Creating Persistent Private Variables
10.4 Determining Current Function Name
10.5 Passing Arrays and Hashes by Reference
10.6 Detecting Return Context
10.7 Passing by Named Parameter
10.8 Skipping Selected Return Values
10.9 Returning More Than One Array or Hash
10.10 Returning Failure
10.11 Prototyping Functions
10.12 Handling Exceptions
10.13 Saving Global Values
10.14 Redefining a Function
10.15 Trapping Undefined Function Calls with AUTOLOAD
10.16 Nesting Subroutines
10.17 Writing a Switch Statement
10.18 Program: Sorting Your Mail
Chapter 11: References and Records
11.1 Introduction
11.1 Taking References to Arrays
11.2 Making Hashes of Arrays
11.3 Taking References to Hashes
11.4 Taking References to Functions
11.5 Taking References to Scalars
11.6 Creating Arrays of Scalar References
11.7 Using Closures Instead of Objects
11.8 Creating References to Methods
11.9 Constructing Records
11.10 Reading and Writing Hash Records to Text Files
11.11 Printing Data Structures
11.12 Copying Data Structures
11.13 Storing Data Structures to Disk
11.14 Transparently Persistent Data Structures
11.15 Coping with Circular Data Structures Using Weak References
11.16 Program: Outlines
11.17 Program: Binary Trees
Chapter 12: Packages, Libraries, and Modules
12.1 Introduction
12.1 Defining a Module's Interface
12.2 Trapping Errors in require or use
12.3 Delaying use Until Runtime
12.4 Making Variables Private to a Module
12.5 Making Functions Private to a Module
12.6 Determining the Caller's Package
12.7 Automating Module Cleanup
12.8 Keeping Your Own Module Directory
12.9 Preparing a Module for Distribution
12.10 Speeding Module Loading with SelfLoader
12.11 Speeding Up Module Loading with Autoloader
12.12 Overriding Built-in Functions
12.13 Overriding a Built-in Function in All Packages
12.14 Reporting Errors and Warnings Like Built-ins
12.15 Customizing Warnings
12.16 Referring to Packages Indirectly
12.17 Using h2ph to Translate C #include Files
12.18 Using h2xs to Make a Module with C Code
12.19 Writing Extensions in C with Inline::C
12.20 Documenting Your Module with Pod
12.21 Building and Installing a CPAN Module
12.22 Example: Module Template
12.23 Program: Finding Versions and Descriptions of Installed Modules
Chapter 13: Classes, Objects, and Ties
13.1 Introduction
13.1 Constructing an Object
13.2 Destroying an Object
13.3 Managing Instance Data
13.4 Managing Class Data
13.5 Using Classes as Structs
13.6 Cloning Constructors
13.7 Copy Constructors
13.8 Invoking Methods Indirectly
13.9 Determining Subclass Membership
13.10 Writing an Inheritable Class
13.11 Accessing Overridden Methods
13.12 Generating Attribute Methods Using AUTOLOAD
13.13 Coping with Circular Data Structures Using Objects
13.14 Overloading Operators
13.15 Creating Magic Variables with tie
Chapter 14: Database Access
14.1 Introduction
14.1 Making and Using a DBM File
14.2 Emptying a DBM File
14.3 Converting Between DBM Files
14.4 Merging DBM Files
14.5 Sorting Large DBM Files
14.6 Storing Complex Data in a DBM File
14.7 Persistent Data
14.8 Saving Query Results to Excel or CSV
14.9 Executing an SQL Command Using DBI
14.10 Escaping Quotes
14.11 Dealing with Database Errors
14.12 Repeating Queries Efficiently
14.13 Building Queries Programmatically
14.14 Finding the Number of Rows Returned by a Query
14.15 Using Transactions
14.16 Viewing Data One Page at a Time
14.17 Querying a CSV File with SQL
14.18 Using SQL Without a Database Server
14.19 Program: ggh-Grep Netscape Global History
Chapter 15: Interactivity
15.1 Introduction
15.1 Parsing Program Arguments
15.2 Testing Whether a Program Is Running Interactively
15.3 Clearing the Screen
15.4 Determining Terminal or Window Size
15.5 Changing Text Color
15.6 Reading Single Characters from the Keyboard
15.7 Ringing the Terminal Bell
15.8 Using POSIX termios
15.9 Checking for Waiting Input
15.10 Reading Passwords
15.11 Editing Input
15.12 Managing the Screen
15.13 Controlling Another Program with Expect
15.14 Creating Menus with Tk
15.15 Creating Dialog Boxes with Tk
15.16 Responding to Tk Resize Events
15.17 Removing the DOS Shell Window with Windows Perl/Tk
15.18 Graphing Data
15.19 Thumbnailing Images
15.20 Adding Text to an Image
15.21 Program: Small termcap Program
15.22 Program: tkshufflepod
15.23 Program: graphbox
Chapter 16: Process Management and Communication
16.1 Introduction
16.1 Gathering Output from a Program
16.2 Running Another Program
16.3 Replacing the Current Program with a Different One
16.4 Reading or Writing to Another Program
16.5 Filtering Your Own Output
16.6 Preprocessing Input
16.7 Reading STDERR from a Program
16.8 Controlling Input and Output of Another Program
16.9 Controlling the Input, Output, and Error of Another Program
16.10 Communicating Between Related Processes
16.11 Making a Process Look Like a File with Named Pipes
16.12 Sharing Variables in Different Processes
16.13 Listing Available Signals
16.14 Sending a Signal
16.15 Installing a Signal Handler
16.16 Temporarily Overriding a Signal Handler
16.17 Writing a Signal Handler
16.18 Catching Ctrl-C
16.19 Avoiding Zombie Processes
16.20 Blocking Signals
16.21 Timing Out an Operation
16.22 Turning Signals into Fatal Errors
16.23 Program: sigrand
Chapter 17: Sockets
17.1 Introduction
17.1 Writing a TCP Client
17.2 Writing a TCP Server
17.3 Communicating over TCP
17.4 Setting Up a UDP Client
17.5 Setting Up a UDP Server
17.6 Using Unix Domain Sockets
17.7 Identifying the Other End of a Socket
17.8 Finding Your Own Name and Address
17.9 Closing a Socket After Forking
17.10 Writing Bidirectional Clients
17.11 Forking Servers
17.12 Pre-Forking Servers
17.13 Non-Forking Servers
17.14 Multitasking Server with Threads
17.15 Writing a Multitasking Server with POE
17.16 Writing a Multihomed Server
17.17 Making a Daemon Server
17.18 Restarting a Server on Demand
17.19 Managing Multiple Streams of Input
17.20 Program: backsniff
17.21 Program: fwdport
Chapter 18: Internet Services
18.1 Introduction
18.1 Simple DNS Lookups
18.2 Being an FTP Client
18.3 Sending Mail
18.4 Reading and Posting Usenet News Messages
18.5 Reading Mail with POP3
18.6 Simulating Telnet from a Program
18.7 Pinging a Machine
18.8 Accessing an LDAP Server
18.9 Sending Attachments in Mail
18.10 Extracting Attachments from Mail
18.11 Writing an XML-RPC Server
18.12 Writing an XML-RPC Client
18.13 Writing a SOAP Server
18.14 Writing a SOAP Client
18.15 Program: rfrm
18.16 Program: expn and vrfy
Chapter 19: CGI Programming
19.1 Introduction
19.1 Writing a CGI Script
19.2 Redirecting Error Messages
19.3 Fixing a 500 Server Error
19.4 Writing a Safe CGI Program
19.5 Executing Commands Without Shell Escapes
19.6 Formatting Lists and Tables with HTML Shortcuts
19.7 Redirecting to a Different Location
19.8 Debugging the Raw HTTP Exchange
19.9 Managing Cookies
19.10 Creating Sticky Widgets
19.11 Writing a Multiscreen CGI Script
19.12 Saving a Form to a File or Mail Pipe
19.13 Program: chemiserie
Chapter 20: Web Automation
20.1 Introduction
20.1 Fetching a URL from a Perl Script
20.2 Automating Form Submission
20.3 Extracting URLs
20.4 Converting ASCII to HTML
20.5 Converting HTML to ASCII
20.6 Extracting or Removing HTML Tags
20.7 Finding Stale Links
20.8 Finding Fresh Links
20.9 Using Templates to Generate HTML
20.10 Mirroring Web Pages
20.11 Creating a Robot
20.12 Parsing a Web Server Log File
20.13 Processing Server Logs
20.14 Using Cookies
20.15 Fetching Password-Protected Pages
20.16 Fetching https:// Web Pages
20.17 Resuming an HTTP GET
20.18 Parsing HTML
20.19 Extracting Table Data
20.20 Program: htmlsub
20.21 Program: hrefsub
Chapter 21: mod_perl
21.1 Introduction
21.1 Authenticating
21.2 Setting Cookies
21.3 Accessing Cookie Values
21.4 Redirecting the Browser
21.5 Interrogating Headers
21.6 Accessing Form Parameters
21.7 Receiving Uploaded Files
21.8 Speeding Up Database Access
21.9 Customizing Apache's Logging
21.10 Transparently Storing Information in URLs
21.11 Communicating Between mod_perl and PHP
21.12 Migrating from CGI to mod_perl
21.13 Sharing Information Between Handlers
21.14 Reloading Changed Modules
21.15 Benchmarking a mod_perl Application
21.16 Templating with HTML::Mason
21.17 Templating with Template Toolkit
Chapter 22: XML
22.1 Introduction
22.1 Parsing XML into Data Structures
22.2 Parsing XML into a DOM Tree
22.3 Parsing XML into SAX Events
22.4 Making Simple Changes to Elements or Text
22.5 Validating XML
22.6 Finding Elements and Text Within an XML Document
22.7 Processing XML Stylesheet Transformations
22.8 Processing Files Larger Than Available Memory
22.9 Reading and Writing RSS Files
22.10 Writing XML
Colophon
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
1.1 Introduction
1.1 Accessing Substrings
1.2 Establishing a Default Value
1.3 Exchanging Values Without Using Temporary Variables
1.4 Converting Between Characters and Values
1.5 Using Named Unicode Characters
1.6 Processing a String One Character at a Time
1.7 Reversing a String by Word or Character
1.8 Treating Unicode Combined Characters as Single Characters
1.9 Canonicalizing Strings with Unicode Combined Characters
1.10 Treating a Unicode String as Octets
1.11 Expanding and Compressing Tabs
1.12 Expanding Variables in User Input
1.13 Controlling Case
1.14 Properly Capitalizing a Title or Headline
1.15 Interpolating Functions and Expressions Within Strings
1.16 Indenting Here Documents
1.17 Reformatting Paragraphs
1.18 Escaping Characters
1.19 Trimming Blanks from the Ends of a String
1.20 Parsing Comma-Separated Data
1.21 Constant Variables
1.22 Soundex Matching
1.23 Program: fixstyle
1.24 Program: psgrep
Chapter 2: Numbers
2.1 Introduction
2.1 Checking Whether a String Is a Valid Number
2.2 Rounding Floating-Point Numbers
2.3 Comparing Floating-Point Numbers
2.4 Operating on a Series of Integers
2.5 Working with Roman Numerals
2.6 Generating Random Numbers
2.7 Generating Repeatable Random Number Sequences
2.8 Making Numbers Even More Random
2.9 Generating Biased Random Numbers
2.10 Doing Trigonometry in Degrees, Not Radians
2.11 Calculating More Trigonometric Functions
2.12 Taking Logarithms
2.13 Multiplying Matrices
2.14 Using Complex Numbers
2.15 Converting Binary, Octal, and Hexadecimal Numbers
2.16 Putting Commas in Numbers
2.17 Printing Correct Plurals
2.18 Program: Calculating Prime Factors
Chapter 3: Dates and Times
3.1 Introduction
3.1 Finding Today's Date
3.2 Converting DMYHMS to Epoch Seconds
3.3 Converting Epoch Seconds to DMYHMS
3.4 Adding to or Subtracting from a Date
3.5 Difference of Two Dates
3.6 Day in a Week/Month/Year or Week Number
3.7 Parsing Dates and Times from Strings
3.8 Printing a Date
3.9 High-Resolution Timers
3.10 Short Sleeps
3.11 Program: hopdelta
Chapter 4: Arrays
4.1 Introduction
4.1 Specifying a List in Your Program
4.2 Printing a List with Commas
4.3 Changing Array Size
4.4 Implementing a Sparse Array
4.5 Iterating Over an Array
4.6 Iterating Over an Array by Reference
4.7 Extracting Unique Elements from a List
4.8 Finding Elements in One Array but Not Another
4.9 Computing Union, Intersection, or Difference of Unique Lists
4.10 Appending One Array to Another
4.11 Reversing an Array
4.12 Processing Multiple Elements of an Array
4.13 Finding the First List Element That Passes a Test
4.14 Finding All Elements in an Array Matching Certain Criteria
4.15 Sorting an Array Numerically
4.16 Sorting a List by Computable Field
4.17 Implementing a Circular List
4.18 Randomizing an Array
4.19 Program: words
4.20 Program: permute
Chapter 5: Hashes
5.1 Introduction
5.1 Adding an Element to a Hash
5.2 Testing for the Presence of a Key in a Hash
5.3 Creating a Hash with Immutable Keys or Values
5.4 Deleting from a Hash
5.5 Traversing a Hash
5.6 Printing a Hash
5.7 Retrieving from a Hash in Insertion Order
5.8 Hashes with Multiple Values per Key
5.9 Inverting a Hash
5.10 Sorting a Hash
5.11 Merging Hashes
5.12 Finding Common or Different Keys in Two Hashes
5.13 Hashing References
5.14 Presizing a Hash
5.15 Finding the Most Common Anything
5.16 Representing Relationships Between Data
5.17 Program: dutree
Chapter 6: Pattern Matching
6.1 Introduction
6.1 Copying and Substituting Simultaneously
6.2 Matching Letters
6.3 Matching Words
6.4 Commenting Regular Expressions
6.5 Finding the Nth Occurrence of a Match
6.6 Matching Within Multiple Lines
6.7 Reading Records with a Separator
6.8 Extracting a Range of Lines
6.9 Matching Shell Globs as Regular Expressions
6.10 Speeding Up Interpolated Matches
6.11 Testing for a Valid Pattern
6.12 Honoring Locale Settings in Regular Expressions
6.13 Approximate Matching
6.14 Matching from Where the Last Pattern Left Off
6.15 Greedy and Non-Greedy Matches
6.16 Detecting Doubled Words
6.17 Matching Nested Patterns
6.18 Expressing AND, OR, and NOT in a Single Pattern
6.19 Matching a Valid Mail Address
6.20 Matching Abbreviations
6.21 Program: urlify
6.22 Program: tcgrep
6.23 Regular Expression Grab Bag
Chapter 7: File Access
7.1 Introduction
7.1 Opening a File
7.2 Opening Files with Unusual Filenames
7.3 Expanding Tildes in Filenames
7.4 Making Perl Report Filenames in Error Messages
7.5 Storing Filehandles into Variables
7.6 Writing a Subroutine That Takes Filehandles as Built-ins Do
7.7 Caching Open Output Filehandles
7.8 Printing to Many Filehandles Simultaneously
7.9 Opening and Closing File Descriptors by Number
7.10 Copying Filehandles
7.11 Creating Temporary Files
7.12 Storing a File Inside Your Program Text
7.13 Storing Multiple Files in the DATA Area
7.14 Writing a Unix-Style Filter Program
7.15 Modifying a File in Place with a Temporary File
7.16 Modifying a File in Place with the -i Switch
7.17 Modifying a File in Place Without a Temporary File
7.18 Locking a File
7.19 Flushing Output
7.20 Doing Non-Blocking I/O
7.21 Determining the Number of Unread Bytes
7.22 Reading from Many Filehandles Without Blocking
7.23 Reading an Entire Line Without Blocking
7.24 Program: netlock
7.25 Program: lockarea
Chapter 8: File Contents
8.1 Introduction
8.1 Reading Lines with Continuation Characters
8.2 Counting Lines (or Paragraphs or Records) in a File
8.3 Processing Every Word in a File
8.4 Reading a File Backward by Line or Paragraph
8.5 Trailing a Growing File
8.6 Picking a Random Line from a File
8.7 Randomizing All Lines
8.8 Reading a Particular Line in a File
8.9 Processing Variable-Length Text Fields
8.10 Removing the Last Line of a File
8.11 Processing Binary Files
8.12 Using Random-Access I/O
8.13 Updating a Random-Access File
8.14 Reading a String from a Binary File
8.15 Reading Fixed-Length Records
8.16 Reading Configuration Files
8.17 Testing a File for Trustworthiness
8.18 Treating a File as an Array
8.19 Setting the Default I/O Layers
8.20 Reading or Writing Unicode from a Filehandle
8.21 Converting Microsoft Text Files into Unicode
8.22 Comparing the Contents of Two Files
8.23 Pretending a String Is a File
8.24 Program: tailwtmp
8.25 Program: tctee
8.26 Program: laston
8.27 Program: Flat File Indexes
Chapter 9: Directories
9.1 Introduction
9.1 Getting and Setting Timestamps
9.2 Deleting a File
9.3 Copying or Moving a File
9.4 Recognizing Two Names for the Same File
9.5 Processing All Files in a Directory
9.6 Globbing, or Getting a List of Filenames Matching a Pattern
9.7 Processing All Files in a Directory Recursively
9.8 Removing a Directory and Its Contents
9.9 Renaming Files
9.10 Splitting a Filename into Its Component Parts
9.11 Working with Symbolic File Permissions Instead of Octal Values
9.12 Program: symirror
9.13 Program: lst
Chapter 10: Subroutines
10.1 Introduction
10.1 Accessing Subroutine Arguments
10.2 Making Variables Private to a Function
10.3 Creating Persistent Private Variables
10.4 Determining Current Function Name
10.5 Passing Arrays and Hashes by Reference
10.6 Detecting Return Context
10.7 Passing by Named Parameter
10.8 Skipping Selected Return Values
10.9 Returning More Than One Array or Hash
10.10 Returning Failure
10.11 Prototyping Functions
10.12 Handling Exceptions
10.13 Saving Global Values
10.14 Redefining a Function
10.15 Trapping Undefined Function Calls with AUTOLOAD
10.16 Nesting Subroutines
10.17 Writing a Switch Statement
10.18 Program: Sorting Your Mail
Chapter 11: References and Records
11.1 Introduction
11.1 Taking References to Arrays
11.2 Making Hashes of Arrays
11.3 Taking References to Hashes
11.4 Taking References to Functions
11.5 Taking References to Scalars
11.6 Creating Arrays of Scalar References
11.7 Using Closures Instead of Objects
11.8 Creating References to Methods
11.9 Constructing Records
11.10 Reading and Writing Hash Records to Text Files
11.11 Printing Data Structures
11.12 Copying Data Structures
11.13 Storing Data Structures to Disk
11.14 Transparently Persistent Data Structures
11.15 Coping with Circular Data Structures Using Weak References
11.16 Program: Outlines
11.17 Program: Binary Trees
Chapter 12: Packages, Libraries, and Modules
12.1 Introduction
12.1 Defining a Module's Interface
12.2 Trapping Errors in require or use
12.3 Delaying use Until Runtime
12.4 Making Variables Private to a Module
12.5 Making Functions Private to a Module
12.6 Determining the Caller's Package
12.7 Automating Module Cleanup
12.8 Keeping Your Own Module Directory
12.9 Preparing a Module for Distribution
12.10 Speeding Module Loading with SelfLoader
12.11 Speeding Up Module Loading with Autoloader
12.12 Overriding Built-in Functions
12.13 Overriding a Built-in Function in All Packages
12.14 Reporting Errors and Warnings Like Built-ins
12.15 Customizing Warnings
12.16 Referring to Packages Indirectly
12.17 Using h2ph to Translate C #include Files
12.18 Using h2xs to Make a Module with C Code
12.19 Writing Extensions in C with Inline::C
12.20 Documenting Your Module with Pod
12.21 Building and Installing a CPAN Module
12.22 Example: Module Template
12.23 Program: Finding Versions and Descriptions of Installed Modules
Chapter 13: Classes, Objects, and Ties
13.1 Introduction
13.1 Constructing an Object
13.2 Destroying an Object
13.3 Managing Instance Data
13.4 Managing Class Data
13.5 Using Classes as Structs
13.6 Cloning Constructors
13.7 Copy Constructors
13.8 Invoking Methods Indirectly
13.9 Determining Subclass Membership
13.10 Writing an Inheritable Class
13.11 Accessing Overridden Methods
13.12 Generating Attribute Methods Using AUTOLOAD
13.13 Coping with Circular Data Structures Using Objects
13.14 Overloading Operators
13.15 Creating Magic Variables with tie
Chapter 14: Database Access
14.1 Introduction
14.1 Making and Using a DBM File
14.2 Emptying a DBM File
14.3 Converting Between DBM Files
14.4 Merging DBM Files
14.5 Sorting Large DBM Files
14.6 Storing Complex Data in a DBM File
14.7 Persistent Data
14.8 Saving Query Results to Excel or CSV
14.9 Executing an SQL Command Using DBI
14.10 Escaping Quotes
14.11 Dealing with Database Errors
14.12 Repeating Queries Efficiently
14.13 Building Queries Programmatically
14.14 Finding the Number of Rows Returned by a Query
14.15 Using Transactions
14.16 Viewing Data One Page at a Time
14.17 Querying a CSV File with SQL
14.18 Using SQL Without a Database Server
14.19 Program: ggh-Grep Netscape Global History
Chapter 15: Interactivity
15.1 Introduction
15.1 Parsing Program Arguments
15.2 Testing Whether a Program Is Running Interactively
15.3 Clearing the Screen
15.4 Determining Terminal or Window Size
15.5 Changing Text Color
15.6 Reading Single Characters from the Keyboard
15.7 Ringing the Terminal Bell
15.8 Using POSIX termios
15.9 Checking for Waiting Input
15.10 Reading Passwords
15.11 Editing Input
15.12 Managing the Screen
15.13 Controlling Another Program with Expect
15.14 Creating Menus with Tk
15.15 Creating Dialog Boxes with Tk
15.16 Responding to Tk Resize Events
15.17 Removing the DOS Shell Window with Windows Perl/Tk
15.18 Graphing Data
15.19 Thumbnailing Images
15.20 Adding Text to an Image
15.21 Program: Small termcap Program
15.22 Program: tkshufflepod
15.23 Program: graphbox
Chapter 16: Process Management and Communication
16.1 Introduction
16.1 Gathering Output from a Program
16.2 Running Another Program
16.3 Replacing the Current Program with a Different One
16.4 Reading or Writing to Another Program
16.5 Filtering Your Own Output
16.6 Preprocessing Input
16.7 Reading STDERR from a Program
16.8 Controlling Input and Output of Another Program
16.9 Controlling the Input, Output, and Error of Another Program
16.10 Communicating Between Related Processes
16.11 Making a Process Look Like a File with Named Pipes
16.12 Sharing Variables in Different Processes
16.13 Listing Available Signals
16.14 Sending a Signal
16.15 Installing a Signal Handler
16.16 Temporarily Overriding a Signal Handler
16.17 Writing a Signal Handler
16.18 Catching Ctrl-C
16.19 Avoiding Zombie Processes
16.20 Blocking Signals
16.21 Timing Out an Operation
16.22 Turning Signals into Fatal Errors
16.23 Program: sigrand
Chapter 17: Sockets
17.1 Introduction
17.1 Writing a TCP Client
17.2 Writing a TCP Server
17.3 Communicating over TCP
17.4 Setting Up a UDP Client
17.5 Setting Up a UDP Server
17.6 Using Unix Domain Sockets
17.7 Identifying the Other End of a Socket
17.8 Finding Your Own Name and Address
17.9 Closing a Socket After Forking
17.10 Writing Bidirectional Clients
17.11 Forking Servers
17.12 Pre-Forking Servers
17.13 Non-Forking Servers
17.14 Multitasking Server with Threads
17.15 Writing a Multitasking Server with POE
17.16 Writing a Multihomed Server
17.17 Making a Daemon Server
17.18 Restarting a Server on Demand
17.19 Managing Multiple Streams of Input
17.20 Program: backsniff
17.21 Program: fwdport
Chapter 18: Internet Services
18.1 Introduction
18.1 Simple DNS Lookups
18.2 Being an FTP Client
18.3 Sending Mail
18.4 Reading and Posting Usenet News Messages
18.5 Reading Mail with POP3
18.6 Simulating Telnet from a Program
18.7 Pinging a Machine
18.8 Accessing an LDAP Server
18.9 Sending Attachments in Mail
18.10 Extracting Attachments from Mail
18.11 Writing an XML-RPC Server
18.12 Writing an XML-RPC Client
18.13 Writing a SOAP Server
18.14 Writing a SOAP Client
18.15 Program: rfrm
18.16 Program: expn and vrfy
Chapter 19: CGI Programming
19.1 Introduction
19.1 Writing a CGI Script
19.2 Redirecting Error Messages
19.3 Fixing a 500 Server Error
19.4 Writing a Safe CGI Program
19.5 Executing Commands Without Shell Escapes
19.6 Formatting Lists and Tables with HTML Shortcuts
19.7 Redirecting to a Different Location
19.8 Debugging the Raw HTTP Exchange
19.9 Managing Cookies
19.10 Creating Sticky Widgets
19.11 Writing a Multiscreen CGI Script
19.12 Saving a Form to a File or Mail Pipe
19.13 Program: chemiserie
Chapter 20: Web Automation
20.1 Introduction
20.1 Fetching a URL from a Perl Script
20.2 Automating Form Submission
20.3 Extracting URLs
20.4 Converting ASCII to HTML
20.5 Converting HTML to ASCII
20.6 Extracting or Removing HTML Tags
20.7 Finding Stale Links
20.8 Finding Fresh Links
20.9 Using Templates to Generate HTML
20.10 Mirroring Web Pages
20.11 Creating a Robot
20.12 Parsing a Web Server Log File
20.13 Processing Server Logs
20.14 Using Cookies
20.15 Fetching Password-Protected Pages
20.16 Fetching https:// Web Pages
20.17 Resuming an HTTP GET
20.18 Parsing HTML
20.19 Extracting Table Data
20.20 Program: htmlsub
20.21 Program: hrefsub
Chapter 21: mod_perl
21.1 Introduction
21.1 Authenticating
21.2 Setting Cookies
21.3 Accessing Cookie Values
21.4 Redirecting the Browser
21.5 Interrogating Headers
21.6 Accessing Form Parameters
21.7 Receiving Uploaded Files
21.8 Speeding Up Database Access
21.9 Customizing Apache's Logging
21.10 Transparently Storing Information in URLs
21.11 Communicating Between mod_perl and PHP
21.12 Migrating from CGI to mod_perl
21.13 Sharing Information Between Handlers
21.14 Reloading Changed Modules
21.15 Benchmarking a mod_perl Application
21.16 Templating with HTML::Mason
21.17 Templating with Template Toolkit
Chapter 22: XML
22.1 Introduction
22.1 Parsing XML into Data Structures
22.2 Parsing XML into a DOM Tree
22.3 Parsing XML into SAX Events
22.4 Making Simple Changes to Elements or Text
22.5 Validating XML
22.6 Finding Elements and Text Within an XML Document
22.7 Processing XML Stylesheet Transformations
22.8 Processing Files Larger Than Available Memory
22.9 Reading and Writing RSS Files
22.10 Writing XML
Colophon
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
1.1 Introduction
1.1 Accessing Substrings
1.2 Establishing a Default Value
1.3 Exchanging Values Without Using Temporary Variables
1.4 Converting Between Characters and Values
1.5 Using Named Unicode Characters
1.6 Processing a String One Character at a Time
1.7 Reversing a String by Word or Character
1.8 Treating Unicode Combined Characters as Single Characters
1.9 Canonicalizing Strings with Unicode Combined Characters
1.10 Treating a Unicode String as Octets
1.11 Expanding and Compressing Tabs
1.12 Expanding Variables in User Input
1.13 Controlling Case
1.14 Properly Capitalizing a Title or Headline
1.15 Interpolating Functions and Expressions Within Strings
1.16 Indenting Here Documents
1.17 Reformatting Paragraphs
1.18 Escaping Characters
1.19 Trimming Blanks from the Ends of a String
1.20 Parsing Comma-Separated Data
1.21 Constant Variables
1.22 Soundex Matching
1.23 Program: fixstyle
1.24 Program: psgrep
Chapter 2: Numbers
2.1 Introduction
2.1 Checking Whether a String Is a Valid Number
2.2 Rounding Floating-Point Numbers
2.3 Comparing Floating-Point Numbers
2.4 Operating on a Series of Integers
2.5 Working with Roman Numerals
2.6 Generating Random Numbers
2.7 Generating Repeatable Random Number Sequences
2.8 Making Numbers Even More Random
2.9 Generating Biased Random Numbers
2.10 Doing Trigonometry in Degrees, Not Radians
2.11 Calculating More Trigonometric Functions
2.12 Taking Logarithms
2.13 Multiplying Matrices
2.14 Using Complex Numbers
2.15 Converting Binary, Octal, and Hexadecimal Numbers
2.16 Putting Commas in Numbers
2.17 Printing Correct Plurals
2.18 Program: Calculating Prime Factors
Chapter 3: Dates and Times
3.1 Introduction
3.1 Finding Today's Date
3.2 Converting DMYHMS to Epoch Seconds
3.3 Converting Epoch Seconds to DMYHMS
3.4 Adding to or Subtracting from a Date
3.5 Difference of Two Dates
3.6 Day in a Week/Month/Year or Week Number
3.7 Parsing Dates and Times from Strings
3.8 Printing a Date
3.9 High-Resolution Timers
3.10 Short Sleeps
3.11 Program: hopdelta
Chapter 4: Arrays
4.1 Introduction
4.1 Specifying a List in Your Program
4.2 Printing a List with Commas
4.3 Changing Array Size
4.4 Implementing a Sparse Array
4.5 Iterating Over an Array
4.6 Iterating Over an Array by Reference
4.7 Extracting Unique Elements from a List
4.8 Finding Elements in One Array but Not Another
4.9 Computing Union, Intersection, or Difference of Unique Lists
4.10 Appending One Array to Another
4.11 Reversing an Array
4.12 Processing Multiple Elements of an Array
4.13 Finding the First List Element That Passes a Test
4.14 Finding All Elements in an Array Matching Certain Criteria
4.15 Sorting an Array Numerically
4.16 Sorting a List by Computable Field
4.17 Implementing a Circular List
4.18 Randomizing an Array
4.19 Program: words
4.20 Program: permute
Chapter 5: Hashes
5.1 Introduction
5.1 Adding an Element to a Hash
5.2 Testing for the Presence of a Key in a Hash
5.3 Creating a Hash with Immutable Keys or Values
5.4 Deleting from a Hash
5.5 Traversing a Hash
5.6 Printing a Hash
5.7 Retrieving from a Hash in Insertion Order
5.8 Hashes with Multiple Values per Key
5.9 Inverting a Hash
5.10 Sorting a Hash
5.11 Merging Hashes
5.12 Finding Common or Different Keys in Two Hashes
5.13 Hashing References
5.14 Presizing a Hash
5.15 Finding the Most Common Anything
5.16 Representing Relationships Between Data
5.17 Program: dutree
Chapter 6: Pattern Matching
6.1 Introduction
6.1 Copying and Substituting Simultaneously
6.2 Matching Letters
6.3 Matching Words
6.4 Commenting Regular Expressions
6.5 Finding the Nth Occurrence of a Match
6.6 Matching Within Multiple Lines
6.7 Reading Records with a Separator
6.8 Extracting a Range of Lines
6.9 Matching Shell Globs as Regular Expressions
6.10 Speeding Up Interpolated Matches
6.11 Testing for a Valid Pattern
6.12 Honoring Locale Settings in Regular Expressions
6.13 Approximate Matching
6.14 Matching from Where the Last Pattern Left Off
6.15 Greedy and Non-Greedy Matches
6.16 Detecting Doubled Words
6.17 Matching Nested Patterns
6.18 Expressing AND, OR, and NOT in a Single Pattern
6.19 Matching a Valid Mail Address
6.20 Matching Abbreviations
6.21 Program: urlify
6.22 Program: tcgrep
6.23 Regular Expression Grab Bag
Chapter 7: File Access
7.1 Introduction
7.1 Opening a File
7.2 Opening Files with Unusual Filenames
7.3 Expanding Tildes in Filenames
7.4 Making Perl Report Filenames in Error Messages
7.5 Storing Filehandles into Variables
7.6 Writing a Subroutine That Takes Filehandles as Built-ins Do
7.7 Caching Open Output Filehandles
7.8 Printing to Many Filehandles Simultaneously
7.9 Opening and Closing File Descriptors by Number
7.10 Copying Filehandles
7.11 Creating Temporary Files
7.12 Storing a File Inside Your Program Text
7.13 Storing Multiple Files in the DATA Area
7.14 Writing a Unix-Style Filter Program
7.15 Modifying a File in Place with a Temporary File
7.16 Modifying a File in Place with the -i Switch
7.17 Modifying a File in Place Without a Temporary File
7.18 Locking a File
7.19 Flushing Output
7.20 Doing Non-Blocking I/O
7.21 Determining the Number of Unread Bytes
7.22 Reading from Many Filehandles Without Blocking
7.23 Reading an Entire Line Without Blocking
7.24 Program: netlock
7.25 Program: lockarea
Chapter 8: File Contents
8.1 Introduction
8.1 Reading Lines with Continuation Characters
8.2 Counting Lines (or Paragraphs or Records) in a File
8.3 Processing Every Word in a File
8.4 Reading a File Backward by Line or Paragraph
8.5 Trailing a Growing File
8.6 Picking a Random Line from a File
8.7 Randomizing All Lines
8.8 Reading a Particular Line in a File
8.9 Processing Variable-Length Text Fields
8.10 Removing the Last Line of a File
8.11 Processing Binary Files
8.12 Using Random-Access I/O
8.13 Updating a Random-Access File
8.14 Reading a String from a Binary File
8.15 Reading Fixed-Length Records
8.16 Reading Configuration Files
8.17 Testing a File for Trustworthiness
8.18 Treating a File as an Array
8.19 Setting the Default I/O Layers
8.20 Reading or Writing Unicode from a Filehandle
8.21 Converting Microsoft Text Files into Unicode
8.22 Comparing the Contents of Two Files
8.23 Pretending a String Is a File
8.24 Program: tailwtmp
8.25 Program: tctee
8.26 Program: laston
8.27 Program: Flat File Indexes
Chapter 9: Directories
9.1 Introduction
9.1 Getting and Setting Timestamps
9.2 Deleting a File
9.3 Copying or Moving a File
9.4 Recognizing Two Names for the Same File
9.5 Processing All Files in a Directory
9.6 Globbing, or Getting a List of Filenames Matching a Pattern
9.7 Processing All Files in a Directory Recursively
9.8 Removing a Directory and Its Contents
9.9 Renaming Files
9.10 Splitting a Filename into Its Component Parts
9.11 Working with Symbolic File Permissions Instead of Octal Values
9.12 Program: symirror
9.13 Program: lst
Chapter 10: Subroutines
10.1 Introduction
10.1 Accessing Subroutine Arguments
10.2 Making Variables Private to a Function
10.3 Creating Persistent Private Variables
10.4 Determining Current Function Name
10.5 Passing Arrays and Hashes by Reference
10.6 Detecting Return Context
10.7 Passing by Named Parameter
10.8 Skipping Selected Return Values
10.9 Returning More Than One Array or Hash
10.10 Returning Failure
10.11 Prototyping Functions
10.12 Handling Exceptions
10.13 Saving Global Values
10.14 Redefining a Function
10.15 Trapping Undefined Function Calls with AUTOLOAD
10.16 Nesting Subroutines
10.17 Writing a Switch Statement
10.18 Program: Sorting Your Mail
Chapter 11: References and Records
11.1 Introduction
11.1 Taking References to Arrays
11.2 Making Hashes of Arrays
11.3 Taking References to Hashes
11.4 Taking References to Functions
11.5 Taking References to Scalars
11.6 Creating Arrays of Scalar References
11.7 Using Closures Instead of Objects
11.8 Creating References to Methods
11.9 Constructing Records
11.10 Reading and Writing Hash Records to Text Files
11.11 Printing Data Structures
11.12 Copying Data Structures
11.13 Storing Data Structures to Disk
11.14 Transparently Persistent Data Structures
11.15 Coping with Circular Data Structures Using Weak References
11.16 Program: Outlines
11.17 Program: Binary Trees
Chapter 12: Packages, Libraries, and Modules
12.1 Introduction
12.1 Defining a Module's Interface
12.2 Trapping Errors in require or use
12.3 Delaying use Until Runtime
12.4 Making Variables Private to a Module
12.5 Making Functions Private to a Module
12.6 Determining the Caller's Package
12.7 Automating Module Cleanup
12.8 Keeping Your Own Module Directory
12.9 Preparing a Module for Distribution
12.10 Speeding Module Loading with SelfLoader
12.11 Speeding Up Module Loading with Autoloader
12.12 Overriding Built-in Functions
12.13 Overriding a Built-in Function in All Packages
12.14 Reporting Errors and Warnings Like Built-ins
12.15 Customizing Warnings
12.16 Referring to Packages Indirectly
12.17 Using h2ph to Translate C #include Files
12.18 Using h2xs to Make a Module with C Code
12.19 Writing Extensions in C with Inline::C
12.20 Documenting Your Module with Pod
12.21 Building and Installing a CPAN Module
12.22 Example: Module Template
12.23 Program: Finding Versions and Descriptions of Installed Modules
Chapter 13: Classes, Objects, and Ties
13.1 Introduction
13.1 Constructing an Object
13.2 Destroying an Object
13.3 Managing Instance Data
13.4 Managing Class Data
13.5 Using Classes as Structs
13.6 Cloning Constructors
13.7 Copy Constructors
13.8 Invoking Methods Indirectly
13.9 Determining Subclass Membership
13.10 Writing an Inheritable Class
13.11 Accessing Overridden Methods
13.12 Generating Attribute Methods Using AUTOLOAD
13.13 Coping with Circular Data Structures Using Objects
13.14 Overloading Operators
13.15 Creating Magic Variables with tie
Chapter 14: Database Access
14.1 Introduction
14.1 Making and Using a DBM File
14.2 Emptying a DBM File
14.3 Converting Between DBM Files
14.4 Merging DBM Files
14.5 Sorting Large DBM Files
14.6 Storing Complex Data in a DBM File
14.7 Persistent Data
14.8 Saving Query Results to Excel or CSV
14.9 Executing an SQL Command Using DBI
14.10 Escaping Quotes
14.11 Dealing with Database Errors
14.12 Repeating Queries Efficiently
14.13 Building Queries Programmatically
14.14 Finding the Number of Rows Returned by a Query
14.15 Using Transactions
14.16 Viewing Data One Page at a Time
14.17 Querying a CSV File with SQL
14.18 Using SQL Without a Database Server
14.19 Program: ggh-Grep Netscape Global History
Chapter 15: Interactivity
15.1 Introduction
15.1 Parsing Program Arguments
15.2 Testing Whether a Program Is Running Interactively
15.3 Clearing the Screen
15.4 Determining Terminal or Window Size
15.5 Changing Text Color
15.6 Reading Single Characters from the Keyboard
15.7 Ringing the Terminal Bell
15.8 Using POSIX termios
15.9 Checking for Waiting Input
15.10 Reading Passwords
15.11 Editing Input
15.12 Managing the Screen
15.13 Controlling Another Program with Expect
15.14 Creating Menus with Tk
15.15 Creating Dialog Boxes with Tk
15.16 Responding to Tk Resize Events
15.17 Removing the DOS Shell Window with Windows Perl/Tk
15.18 Graphing Data
15.19 Thumbnailing Images
15.20 Adding Text to an Image
15.21 Program: Small termcap Program
15.22 Program: tkshufflepod
15.23 Program: graphbox
Chapter 16: Process Management and Communication
16.1 Introduction
16.1 Gathering Output from a Program
16.2 Running Another Program
16.3 Replacing the Current Program with a Different One
16.4 Reading or Writing to Another Program
16.5 Filtering Your Own Output
16.6 Preprocessing Input
16.7 Reading STDERR from a Program
16.8 Controlling Input and Output of Another Program
16.9 Controlling the Input, Output, and Error of Another Program
16.10 Communicating Between Related Processes
16.11 Making a Process Look Like a File with Named Pipes
16.12 Sharing Variables in Different Processes
16.13 Listing Available Signals
16.14 Sending a Signal
16.15 Installing a Signal Handler
16.16 Temporarily Overriding a Signal Handler
16.17 Writing a Signal Handler
16.18 Catching Ctrl-C
16.19 Avoiding Zombie Processes
16.20 Blocking Signals
16.21 Timing Out an Operation
16.22 Turning Signals into Fatal Errors
16.23 Program: sigrand
Chapter 17: Sockets
17.1 Introduction
17.1 Writing a TCP Client
17.2 Writing a TCP Server
17.3 Communicating over TCP
17.4 Setting Up a UDP Client
17.5 Setting Up a UDP Server
17.6 Using Unix Domain Sockets
17.7 Identifying the Other End of a Socket
17.8 Finding Your Own Name and Address
17.9 Closing a Socket After Forking
17.10 Writing Bidirectional Clients
17.11 Forking Servers
17.12 Pre-Forking Servers
17.13 Non-Forking Servers
17.14 Multitasking Server with Threads
17.15 Writing a Multitasking Server with POE
17.16 Writing a Multihomed Server
17.17 Making a Daemon Server
17.18 Restarting a Server on Demand
17.19 Managing Multiple Streams of Input
17.20 Program: backsniff
17.21 Program: fwdport
Chapter 18: Internet Services
18.1 Introduction
18.1 Simple DNS Lookups
18.2 Being an FTP Client
18.3 Sending Mail
18.4 Reading and Posting Usenet News Messages
18.5 Reading Mail with POP3
18.6 Simulating Telnet from a Program
18.7 Pinging a Machine
18.8 Accessing an LDAP Server
18.9 Sending Attachments in Mail
18.10 Extracting Attachments from Mail
18.11 Writing an XML-RPC Server
18.12 Writing an XML-RPC Client
18.13 Writing a SOAP Server
18.14 Writing a SOAP Client
18.15 Program: rfrm
18.16 Program: expn and vrfy
Chapter 19: CGI Programming
19.1 Introduction
19.1 Writing a CGI Script
19.2 Redirecting Error Messages
19.3 Fixing a 500 Server Error
19.4 Writing a Safe CGI Program
19.5 Executing Commands Without Shell Escapes
19.6 Formatting Lists and Tables with HTML Shortcuts
19.7 Redirecting to a Different Location
19.8 Debugging the Raw HTTP Exchange
19.9 Managing Cookies
19.10 Creating Sticky Widgets
19.11 Writing a Multiscreen CGI Script
19.12 Saving a Form to a File or Mail Pipe
19.13 Program: chemiserie
Chapter 20: Web Automation
20.1 Introduction
20.1 Fetching a URL from a Perl Script
20.2 Automating Form Submission
20.3 Extracting URLs
20.4 Converting ASCII to HTML
20.5 Converting HTML to ASCII
20.6 Extracting or Removing HTML Tags
20.7 Finding Stale Links
20.8 Finding Fresh Links
20.9 Using Templates to Generate HTML
20.10 Mirroring Web Pages
20.11 Creating a Robot
20.12 Parsing a Web Server Log File
20.13 Processing Server Logs
20.14 Using Cookies
20.15 Fetching Password-Protected Pages
20.16 Fetching https:// Web Pages
20.17 Resuming an HTTP GET
20.18 Parsing HTML
20.19 Extracting Table Data
20.20 Program: htmlsub
20.21 Program: hrefsub
Chapter 21: mod_perl
21.1 Introduction
21.1 Authenticating
21.2 Setting Cookies
21.3 Accessing Cookie Values
21.4 Redirecting the Browser
21.5 Interrogating Headers
21.6 Accessing Form Parameters
21.7 Receiving Uploaded Files
21.8 Speeding Up Database Access
21.9 Customizing Apache's Logging
21.10 Transparently Storing Information in URLs
21.11 Communicating Between mod_perl and PHP
21.12 Migrating from CGI to mod_perl
21.13 Sharing Information Between Handlers
21.14 Reloading Changed Modules
21.15 Benchmarking a mod_perl Application
21.16 Templating with HTML::Mason
21.17 Templating with Template Toolkit
Chapter 22: XML
22.1 Introduction
22.1 Parsing XML into Data Structures
22.2 Parsing XML into a DOM Tree
22.3 Parsing XML into SAX Events
22.4 Making Simple Changes to Elements or Text
22.5 Validating XML
22.6 Finding Elements and Text Within an XML Document
22.7 Processing XML Stylesheet Transformations
22.8 Processing Files Larger Than Available Memory
22.9 Reading and Writing RSS Files
22.10 Writing XML
Colophon
"Mit der zweiten Auflage des englischsprachigen Werkes Perl Cookbook haben die beiden Autoren Tom Christiansen und Nathan Torkington bewiesen, dass sie die Qualität der ersten Auflage noch toppen können. [...] bietet praxisnahe Lösungen und Beispiele, die Perl-Programmierern viele Mühe und Zeit sparen. Die Autoren schneiden Probleme an, die in der täglichen Programmierpraxis früher oder später auftreten, und präsentieren wenige Zeilen später bereits eine Lösung für das Problem. Dadurch und durch die Quantität und Qualität der angesprochenen Problemfälle und Lösungen prädestiniert sich das Perl Cookbook für alle engagierten Perl-Programmierer, die schnell und zielgerichtet programmieren möchten. Fazit: Biolek, Zacherl und Konsorten können einpacken, wenn der O Reilly-Verlag wieder eins seiner Kochbücher veröffentlicht. [...] 927 Seiten voller Informationen und nützlicher Codeschnipsel wurden von Tom Christiansen und Nathan Torkington verfasst, die neben Quantität einen großen Wert auf Qualität legten, was sich im lockerflockigen Schreibstil und dem hohen Nutzwert niederschlägt. Das Perl Cookbook ist in der zweiten Auflage ein heißer Kandidat auf die Perl-Referenz." - Tino Hahn, webcritics.de