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