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