| |  | Copyright |
| |  | Dedication |
| |  | Preface |
| |
|  | Contents of This Book |
| |
|  | Conventions Used in This Book |
| |
|  | Code Examples |
| |
|  | Feedback |
| |
|  | Acknowledgments |
| |  |
Chapter 1.
Best Practices |
| |
|  |
Section 1.1.
Three Goals |
| |
|  |
Section 1.2.
This Book |
| |
|  |
Section 1.3.
Rehabiting |
| |  |
Chapter 2.
Code Layout |
| |
|  |
Section 2.1.
Bracketing |
| |
|  |
Section 2.2.
Keywords |
| |
|  |
Section 2.3.
Subroutines and Variables |
| |
|  |
Section 2.4.
Builtins |
| |
|  |
Section 2.5.
Keys and Indices |
| |
|  |
Section 2.6.
Operators |
| |
|  |
Section 2.7.
Semicolons |
| |
|  |
Section 2.8.
Commas |
| |
|  |
Section 2.9.
Line Lengths |
| |
|  |
Section 2.10.
Indentation |
| |
|  |
Section 2.11.
Tabs |
| |
|  |
Section 2.12.
Blocks |
| |
|  |
Section 2.13.
Chunking |
| |
|  |
Section 2.14.
Elses |
| |
|  |
Section 2.15.
Vertical Alignment |
| |
|  |
Section 2.16.
Breaking Long Lines |
| |
|  |
Section 2.17.
Non-Terminal Expressions |
| |
|  |
Section 2.18.
Breaking by Precedence |
| |
|  |
Section 2.19.
Assignments |
| |
|  |
Section 2.20.
Ternaries |
| |
|  |
Section 2.21.
Lists |
| |
|  |
Section 2.22.
Automated Layout |
| |  |
Chapter 3.
Naming Conventions |
| |
|  |
Section 3.1.
Identifiers |
| |
|  |
Section 3.2.
Booleans |
| |
|  |
Section 3.3.
Reference Variables |
| |
|  |
Section 3.4.
Arrays and Hashes |
| |
|  |
Section 3.5.
Underscores |
| |
|  |
Section 3.6.
Capitalization |
| |
|  |
Section 3.7.
Abbreviations |
| |
|  |
Section 3.8.
Ambiguous Abbreviations |
| |
|  |
Section 3.9.
Ambiguous Names |
| |
|  |
Section 3.10.
Utility Subroutines |
| |  |
Chapter 4.
Values and Expressions |
| |
|  |
Section 4.1.
String Delimiters |
| |
|  |
Section 4.2.
Empty Strings |
| |
|  |
Section 4.3.
Single-Character Strings |
| |
|  |
Section 4.4.
Escaped Characters |
| |
|  |
Section 4.5.
Constants |
| |
|  |
Section 4.6.
Leading Zeros |
| |
|  |
Section 4.7.
Long Numbers |
| |
|  |
Section 4.8.
Multiline Strings |
| |
|  |
Section 4.9.
Here Documents |
| |
|  |
Section 4.10.
Heredoc Indentation |
| |
|  |
Section 4.11.
Heredoc Terminators |
| |
|  |
Section 4.12.
Heredoc Quoters |
| |
|  |
Section 4.13.
Barewords |
| |
|  |
Section 4.14.
Fat Commas |
| |
|  |
Section 4.15.
Thin Commas |
| |
|  |
Section 4.16.
Low-Precedence Operators |
| |
|  |
Section 4.17.
Lists |
| |
|  |
Section 4.18.
List Membership |
| |  |
Chapter 5.
Variables |
| |
|  |
Section 5.1.
Lexical Variables |
| |
|  |
Section 5.2.
Package Variables |
| |
|  |
Section 5.3.
Localization |
| |
|  |
Section 5.4.
Initialization |
| |
|  |
Section 5.5.
Punctuation Variables |
| |
|  |
Section 5.6.
Localizing Punctuation Variables |
| |
|  |
Section 5.7.
Match Variables |
| |
|  |
Section 5.8.
Dollar-Underscore |
| |
|  |
Section 5.9.
Array Indices |
| |
|  |
Section 5.10.
Slicing |
| |
|  |
Section 5.11.
Slice Layout |
| |
|  |
Section 5.12.
Slice Factoring |
| |  |
Chapter 6.
Control Structures |
| |
|  |
Section 6.1.
If Blocks |
| |
|  |
Section 6.2.
Postfix Selectors |
| |
|  |
Section 6.3.
Other Postfix Modifiers |
| |
|  |
Section 6.4.
Negative Control Statements |
| |
|  |
Section 6.5.
C-Style Loops |
| |
|  |
Section 6.6.
Unnecessary Subscripting |
| |
|  |
Section 6.7.
Necessary Subscripting |
| |
|  |
Section 6.8.
Iterator Variables |
| |
|  |
Section 6.9.
Non-Lexical Loop Iterators |
| |
|  |
Section 6.10.
List Generation |
| |
|  |
Section 6.11.
List Selections |
| |
|  |
Section 6.12.
List Transformation |
| |
|  |
Section 6.13.
Complex Mappings |
| |
|  |
Section 6.14.
List Processing Side Effects |
| |
|  |
Section 6.15.
Multipart Selections |
| |
|  |
Section 6.16.
Value Switches |
| |
|  |
Section 6.17.
Tabular Ternaries |
| |
|  |
Section 6.18.
do-while Loops |
| |
|  |
Section 6.19.
Linear Coding |
| |
|  |
Section 6.20.
Distributed Control |
| |
|  |
Section 6.21.
Redoing |
| |
|  |
Section 6.22.
Loop Labels |
| |  |
Chapter 7.
Documentation |
| |
|  |
Section 7.1.
Types of Documentation |
| |
|  |
Section 7.2.
Boilerplates |
| |
|  |
Section 7.3.
Extended Boilerplates |
| |
|  |
Section 7.4.
Location |
| |
|  |
Section 7.5.
Contiguity |
| |
|  |
Section 7.6.
Position |
| |
|  |
Section 7.7.
Technical Documentation |
| |
|  |
Section 7.8.
Comments |
| |
|  |
Section 7.9.
Algorithmic Documentation |
| |
|  |
Section 7.10.
Elucidating Documentation |
| |
|  |
Section 7.11.
Defensive Documentation |
| |
|  |
Section 7.12.
Indicative Documentation |
| |
|  |
Section 7.13.
Discursive Documentation |
| |
|  |
Section 7.14.
Proofreading |
| |  |
Chapter 8.
Built-in Functions |
| |
|  |
Section 8.1.
Sorting |
| |
|  |
Section 8.2.
Reversing Lists |
| |
|  |
Section 8.3.
Reversing Scalars |
| |
|  |
Section 8.4.
Fixed-Width Data |
| |
|  |
Section 8.5.
Separated Data |
| |
|  |
Section 8.6.
Variable-Width Data |
| |
|  |
Section 8.7.
String Evaluations |
| |
|  |
Section 8.8.
Automating Sorts |
| |
|  |
Section 8.9.
Substrings |
| |
|  |
Section 8.10.
Hash Values |
| |
|  |
Section 8.11.
Globbing |
| |
|  |
Section 8.12.
Sleeping |
| |
|  |
Section 8.13.
Mapping and Grepping |
| |
|  |
Section 8.14.
Utilities |
| |  |
Chapter 9.
Subroutines |
| |
|  |
Section 9.1.
Call Syntax |
| |
|  |
Section 9.2.
Homonyms |
| |
|  |
Section 9.3.
Argument Lists |
| |
|  |
Section 9.4.
Named Arguments |
| |
|  |
Section 9.5.
Missing Arguments |
| |
|  |
Section 9.6.
Default Argument Values |
| |
|  |
Section 9.7.
Scalar Return Values |
| |
|  |
Section 9.8.
Contextual Return Values |
| |
|  |
Section 9.9.
Multi-Contextual Return Values |
| |
|  |
Section 9.10.
Prototypes |
| |
|  |
Section 9.11.
Implicit Returns |
| |
|  |
Section 9.12.
Returning Failure |
| |  |
Chapter 10.
I/O |
| |
|  |
Section 10.1.
Filehandles |
| |
|  |
Section 10.2.
Indirect Filehandles |
| |
|  |
Section 10.3.
Localizing Filehandles |
| |
|  |
Section 10.4.
Opening Cleanly |
| |
|  |
Section 10.5.
Error Checking |
| |
|  |
Section 10.6.
Cleanup |
| |
|  |
Section 10.7.
Input Loops |
| |
|  |
Section 10.8.
Line-Based Input |
| |
|  |
Section 10.9.
Simple Slurping |
| |
|  |
Section 10.10.
Power Slurping |
| |
|  |
Section 10.11.
Standard Input |
| |
|  |
Section 10.12.
Printing to Filehandles |
| |
|  |
Section 10.13.
Simple Prompting |
| |
|  |
Section 10.14.
Interactivity |
| |
|  |
Section 10.15.
Power Prompting |
| |
|  |
Section 10.16.
Progress Indicators |
| |
|  |
Section 10.17.
Automatic Progress Indicators |
| |
|  |
Section 10.18.
Autoflushing |
| |  |
Chapter 11.
References |
| |
|  |
Section 11.1.
Dereferencing |
| |
|  |
Section 11.2.
Braced References |
| |
|  |
Section 11.3.
Symbolic References |
| |
|  |
Section 11.4.
Cyclic References |
| |  |
Chapter 12.
Regular Expressions |
| |
|  |
Section 12.1.
Extended Formatting |
| |
|  |
Section 12.2.
Line Boundaries |
| |
|  |
Section 12.3.
String Boundaries |
| |
|  |
Section 12.4.
End of String |
| |
|  |
Section 12.5.
Matching Anything |
| |
|  |
Section 12.6.
Lazy Flags |
| |
|  |
Section 12.7.
Brace Delimiters |
| |
|  |
Section 12.8.
Other Delimiters |
| |
|  |
Section 12.9.
Metacharacters |
| |
|  |
Section 12.10.
Named Characters |
| |
|  |
Section 12.11.
Properties |
| |
|  |
Section 12.12.
Whitespace |
| |
|  |
Section 12.13.
Unconstrained Repetitions |
| |
|  |
Section 12.14.
Capturing Parentheses |
| |
|  |
Section 12.15.
Captured Values |
| |
|  |
Section 12.16.
Capture Variables |
| |
|  |
Section 12.17.
Piecewise Matching |
| |
|  |
Section 12.18.
Tabular Regexes |
| |
|  |
Section 12.19.
Constructing Regexes |
| |
|  |
Section 12.20.
Canned Regexes |
| |
|  |
Section 12.21.
Alternations |
| |
|  |
Section 12.22.
Factoring Alternations |
| |
|  |
Section 12.23.
Backtracking |
| |
|  |
Section 12.24.
String Comparisons |
| |  |
Chapter 13.
Error Handling |
| |
|  |
Section 13.1.
Exceptions |
| |
|  |
Section 13.2.
Builtin Failures |
| |
|  |
Section 13.3.
Contextual Failure |
| |
|  |
Section 13.4.
Systemic Failure |
| |
|  |
Section 13.5.
Recoverable Failure |
| |
|  |
Section 13.6.
Reporting Failure |
| |
|  |
Section 13.7.
Error Messages |
| |
|  |
Section 13.8.
Documenting Errors |
| |
|  |
Section 13.9.
OO Exceptions |
| |
|  |
Section 13.10.
Volatile Error Messages |
| |
|  |
Section 13.11.
Exception Hierarchies |
| |
|  |
Section 13.12.
Processing Exceptions |
| |
|  |
Section 13.13.
Exception Classes |
| |
|  |
Section 13.14.
Unpacking Exceptions |
| |  |
Chapter 14.
Command-Line Processing |
| |
|  |
Section 14.1.
Command-Line Structure |
| |
|  |
Section 14.2.
Command-Line Conventions |
| |
|  |
Section 14.3.
Meta-options |
| |
|  |
Section 14.4.
In-situ Arguments |
| |
|  |
Section 14.5.
Command-Line Processing |
| |
|  |
Section 14.6.
Interface Consistency |
| |
|  |
Section 14.7.
Interapplication Consistency |
| |  |
Chapter 15.
Objects |
| |
|  |
Section 15.1.
Using OO |
| |
|  |
Section 15.2.
Criteria |
| |
|  |
Section 15.3.
Pseudohashes |
| |
|  |
Section 15.4.
Restricted Hashes |
| |
|  |
Section 15.5.
Encapsulation |
| |
|  |
Section 15.6.
Constructors |
| |
|  |
Section 15.7.
Cloning |
| |
|  |
Section 15.8.
Destructors |
| |
|  |
Section 15.9.
Methods |
| |
|  |
Section 15.10.
Accessors |
| |
|  |
Section 15.11.
Lvalue Accessors |
| |
|  |
Section 15.12.
Indirect Objects |
| |
|  |
Section 15.13.
Class Interfaces |
| |
|  |
Section 15.14.
Operator Overloading |
| |
|  |
Section 15.15.
Coercions |
| |  |
Chapter 16.
Class Hierarchies |
| |
|  |
Section 16.1.
Inheritance |
| |
|  |
Section 16.2.
Objects |
| |
|  |
Section 16.3.
Blessing Objects |
| |
|  |
Section 16.4.
Constructor Arguments |
| |
|  |
Section 16.5.
Base Class Initialization |
| |
|  |
Section 16.6.
Construction and Destruction |
| |
|  |
Section 16.7.
Automating Class Hierarchies |
| |
|  |
Section 16.8.
Attribute Demolition |
| |
|  |
Section 16.9.
Attribute Building |
| |
|  |
Section 16.10.
Coercions |
| |
|  |
Section 16.11.
Cumulative Methods |
| |
|  |
Section 16.12.
Autoloading |
| |  |
Chapter 17.
Modules |
| |
|  |
Section 17.1.
Interfaces |
| |
|  |
Section 17.2.
Refactoring |
| |
|  |
Section 17.3.
Version Numbers |
| |
|  |
Section 17.4.
Version Requirements |
| |
|  |
Section 17.5.
Exporting |
| |
|  |
Section 17.6.
Declarative Exporting |
| |
|  |
Section 17.7.
Interface Variables |
| |
|  |
Section 17.8.
Creating Modules |
| |
|  |
Section 17.9.
The Standard Library |
| |
|  |
Section 17.10.
CPAN |
| |  |
Chapter 18.
Testing and Debugging |
| |
|  |
Section 18.1.
Test Cases |
| |
|  |
Section 18.2.
Modular Testing |
| |
|  |
Section 18.3.
Test Suites |
| |
|  |
Section 18.4.
Failure |
| |
|  |
Section 18.5.
What to Test |
| |
|  |
Section 18.6.
Debugging and Testing |
| |
|  |
Section 18.7.
Strictures |
| |
|  |
Section 18.8.
Warnings |
| |
|  |
Section 18.9.
Correctness |
| |
|  |
Section 18.10.
Overriding Strictures |
| |
|  |
Section 18.11.
The Debugger |
| |
|  |
Section 18.12.
Manual Debugging |
| |
|  |
Section 18.13.
Semi-Automatic Debugging |
| |  |
Chapter 19.
Miscellanea |
| |
|  |
Section 19.1.
Revision Control |
| |
|  |
Section 19.2.
Other Languages |
| |
|  |
Section 19.3.
Configuration Files |
| |
|  |
Section 19.4.
Formats |
| |
|  |
Section 19.5.
Ties |
| |
|  |
Section 19.6.
Cleverness |
| |
|  |
Section 19.7.
Encapsulated Cleverness |
| |
|  |
Section 19.8.
Benchmarking |
| |
|  |
Section 19.9.
Memory |
| |
|  |
Section 19.10.
Caching |
| |
|  |
Section 19.11.
Memoization |
| |
|  |
Section 19.12.
Caching for Optimization |
| |
|  |
Section 19.13.
Profiling |
| |
|  |
Section 19.14.
Enbugging |
| |  |
Appendix A.
Essential Perl Best Practices |
| |  |
Appendix B.
Perl Best Practices |
| |
|  |
Section B.1.
Chapter 2, Code Layout |
| |
|  |
Section B.2.
Chapter 3, Naming Conventions |
| |
|  |
Section B.3.
Chapter 4, Values and Expressions |
| |
|  |
Section B.4.
Chapter 5, Variables |
| |
|  |
Section B.5.
Chapter 6, Control Structures |
| |
|  |
Section B.6.
Chapter 7, Documentation |
| |
|  |
Section B.7.
Chapter 8, Built-in Functions |
| |
|  |
Section B.8.
Chapter 9, Subroutines |
| |
|  |
Section B.9.
Chapter 10, I/O |
| |
|  |
Section B.10.
Chapter 11, References |
| |
|  |
Section B.11.
Chapter 12, Regular Expressions |
| |
|  |
Section B.12.
Chapter 13, Error Handling |
| |
|  |
Section B.13.
Chapter 14, Command-Line Processing |
| |
|  |
Section B.14.
Chapter 15, Objects |
| |
|  |
Section B.15.
Chapter 16, Class Hierarchies |
| |
|  |
Section B.16.
Chapter 17, Modules |
| |
|  |
Section B.17.
Chapter 18, Testing and Debugging |
| |
|  |
Section B.18.
Chapter 19, Miscellanea |
| |  |
Appendix C.
Editor Configurations |
| |
|  |
Section C.1.
vim |
| |
|  |
Section C.2.
vile |
| |
|  |
Section C.3.
Emacs |
| |
|  |
Section C.4.
BBEdit |
| |
|  |
Section C.5.
TextWrangler |
| |  |
Appendix D.
Recommended Modules and Utilities |
| |
|  |
Section D.1.
Recommended Core Modules |
| |
|  |
Section D.2.
Recommended CPAN Modules |
| |
|  |
Section D.3.
Utility Subroutines |
| |  |
Appendix Bibliography.
Bibliography |
| |  | Colophon |
| |
|  | About the Author |
| |
|  | Colophon |
| |  | Index |