Perl Best Practices
Standards and Styles for Developing Maintainable Code
Publisher: O'Reilly Media
Release Date: June 2009
Pages: 544
Read on Safari with a 10-day trial
Start your free trial now Buy on AmazonWhere’s the cart? Now you can get everything on Safari. To purchase books, visit Amazon or your favorite retailer. Questions? See our FAQ or contact customer service:
1-800-889-8969 / 707-827-7019
support@oreilly.com
But if you're serious about your profession, intuition isn't enough. Perl Best Practices author Damian Conway explains that rules, conventions, standards, and practices not only help programmers communicate and coordinate with one another, they also provide a reliable framework for thinking about problems, and a common language for expressing solutions. This is especially critical in Perl, because the language is designed to offer many ways to accomplish the same task, and consequently it supports many incompatible dialects.
With a good dose of Aussie humor, Dr. Conway (familiar to many in the Perl community) offers 256 guidelines on the art of coding to help you write better Perl code--in fact, the best Perl code you possibly can. The guidelines cover code layout, naming conventions, choice of data and control structures, program decomposition, interface design and implementation, modularity, object orientation, error handling, testing, and debugging.
They're designed to work together to produce code that is clear, robust, efficient, maintainable, and concise, but Dr. Conway doesn't pretend that this is the one true universal and unequivocal set of best practices. Instead, Perl Best Practices offers coherent and widely applicable suggestions based on real-world experience of how code is actually written, rather than on someone's ivory-tower theories on how software ought to be created.
Most of all, Perl Best Practices offers guidelines that actually work, and that many developers around the world are already using. Much like Perl itself, these guidelines are about helping you to get your job done, without getting in the way.
Praise for Perl Best Practices from Perl community members:
"As a manager of a large Perl project, I'd ensure that every member of my team has a copy of Perl Best Practices on their desk, and use it as the basis for an in-house style guide." -- Randal Schwartz
"There are no more excuses for writing bad Perl programs. All levels of Perl programmer will be more productive after reading this book." -- Peter Scott
"Perl Best Practices will be the next big important book in the evolution of Perl. The ideas and practices Damian lays down will help bring Perl out from under the embarrassing heading of "scripting languages". Many of us have known Perl is a real programming language, worthy of all the tasks normally delegated to Java and C++. With Perl Best Practices, Damian shows specifically how and why, so everyone else can see, too." -- Andy Lester
"Damian's done what many thought impossible: show how to build large, maintainable Perl applications, while still letting Perl be the powerful, expressive language that programmers have loved for years." -- Bill Odom
"Finally, a means to bring lasting order to the process and product of real Perl development teams." -- Andrew Sundstrom
"Perl Best Practices provides a valuable education in how to write robust, maintainable Perl, and is a definitive citation source when coaching other programmers." -- Bennett Todd "I've been teaching Perl for years, and find the same question keeps being asked: Where can I find a reference for writing reusable, maintainable Perl code? Finally I have a decent answer." -- Paul Fenwick "At last a well researched, well thought-out, comprehensive guide to Perl style. Instead of each of us developing our own, we can learn good practices from one of Perl's most prolific and experienced authors. I recommend this book to anyone who prefers getting on with the job rather than going back and fixing errors caused by syntax and poor style issues." -- Jacinta Richardson "If you care about programming in any language read this book. Even if you don't intend to follow all of the practices, thinking through your style will improve it." -- Steven Lembark "The Perl community's best author is back with another outstanding book. There has never been a comprehensive reference on high quality Perl coding and style until Perl Best Practices. This book fills a large gap in every Perl bookshelf." -- Uri GuttmanTable of Contents
-
Chapter 1 Best Practices
-
Three Goals
-
This Book
-
Rehabiting
-
-
Chapter 2 Code Layout
-
Bracketing
-
Keywords
-
Subroutines and Variables
-
Builtins
-
Keys and Indices
-
Operators
-
Semicolons
-
Commas
-
Line Lengths
-
Indentation
-
Tabs
-
Blocks
-
Chunking
-
Elses
-
Vertical Alignment
-
Breaking Long Lines
-
Non-Terminal Expressions
-
Breaking by Precedence
-
Assignments
-
Ternaries
-
Lists
-
Automated Layout
-
-
Chapter 3 Naming Conventions
-
Identifiers
-
Booleans
-
Reference Variables
-
Arrays and Hashes
-
Underscores
-
Capitalization
-
Abbreviations
-
Ambiguous Abbreviations
-
Ambiguous Names
-
Utility Subroutines
-
-
Chapter 4 Values and Expressions
-
String Delimiters
-
Empty Strings
-
Single-Character Strings
-
Escaped Characters
-
Constants
-
Leading Zeros
-
Long Numbers
-
Multiline Strings
-
Here Documents
-
Heredoc Indentation
-
Heredoc Terminators
-
Heredoc Quoters
-
Barewords
-
Fat Commas
-
Thin Commas
-
Low-Precedence Operators
-
Lists
-
List Membership
-
-
Chapter 5 Variables
-
Lexical Variables
-
Package Variables
-
Localization
-
Initialization
-
Punctuation Variables
-
Localizing Punctuation Variables
-
Match Variables
-
Dollar-Underscore
-
Array Indices
-
Slicing
-
Slice Layout
-
Slice Factoring
-
-
Chapter 6 Control Structures
-
If Blocks
-
Postfix Selectors
-
Other Postfix Modifiers
-
Negative Control Statements
-
C-Style Loops
-
Unnecessary Subscripting
-
Necessary Subscripting
-
Iterator Variables
-
Non-Lexical Loop Iterators
-
List Generation
-
List Selections
-
List Transformation
-
Complex Mappings
-
List Processing Side Effects
-
Multipart Selections
-
Value Switches
-
Tabular Ternaries
-
do-while Loops
-
Linear Coding
-
Distributed Control
-
Redoing
-
Loop Labels
-
-
Chapter 7 Documentation
-
Types of Documentation
-
Boilerplates
-
Extended Boilerplates
-
Location
-
Contiguity
-
Position
-
Technical Documentation
-
Comments
-
Algorithmic Documentation
-
Elucidating Documentation
-
Defensive Documentation
-
Indicative Documentation
-
Discursive Documentation
-
Proofreading
-
-
Chapter 8 Built-in Functions
-
Sorting
-
Reversing Lists
-
Reversing Scalars
-
Fixed-Width Data
-
Separated Data
-
Variable-Width Data
-
String Evaluations
-
Automating Sorts
-
Substrings
-
Hash Values
-
Globbing
-
Sleeping
-
Mapping and Grepping
-
Utilities
-
-
Chapter 9 Subroutines
-
Call Syntax
-
Homonyms
-
Argument Lists
-
Named Arguments
-
Missing Arguments
-
Default Argument Values
-
Scalar Return Values
-
Contextual Return Values
-
Multi-Contextual Return Values
-
Prototypes
-
Implicit Returns
-
Returning Failure
-
-
Chapter 10 I/O
-
Filehandles
-
Indirect Filehandles
-
Localizing Filehandles
-
Opening Cleanly
-
Error Checking
-
Cleanup
-
Input Loops
-
Line-Based Input
-
Simple Slurping
-
Power Slurping
-
Standard Input
-
Printing to Filehandles
-
Simple Prompting
-
Interactivity
-
Power Prompting
-
Progress Indicators
-
Automatic Progress Indicators
-
Autoflushing
-
-
Chapter 11 References
-
Dereferencing
-
Braced References
-
Symbolic References
-
Cyclic References
-
-
Chapter 12 Regular Expressions
-
Extended Formatting
-
Line Boundaries
-
String Boundaries
-
End of String
-
Matching Anything
-
Lazy Flags
-
Brace Delimiters
-
Other Delimiters
-
Metacharacters
-
Named Characters
-
Properties
-
Whitespace
-
Unconstrained Repetitions
-
Capturing Parentheses
-
Captured Values
-
Capture Variables
-
Piecewise Matching
-
Tabular Regexes
-
Constructing Regexes
-
Canned Regexes
-
Alternations
-
Factoring Alternations
-
Backtracking
-
String Comparisons
-
-
Chapter 13 Error Handling
-
Exceptions
-
Builtin Failures
-
Contextual Failure
-
Systemic Failure
-
Recoverable Failure
-
Reporting Failure
-
Error Messages
-
Documenting Errors
-
OO Exceptions
-
Volatile Error Messages
-
Exception Hierarchies
-
Processing Exceptions
-
Exception Classes
-
Unpacking Exceptions
-
-
Chapter 14 Command-Line Processing
-
Command-Line Structure
-
Command-Line Conventions
-
Meta-options
-
In-situ Arguments
-
Command-Line Processing
-
Interface Consistency
-
Interapplication Consistency
-
-
Chapter 15 Objects
-
Using OO
-
Criteria
-
Pseudohashes
-
Restricted Hashes
-
Encapsulation
-
Constructors
-
Cloning
-
Destructors
-
Methods
-
Accessors
-
Lvalue Accessors
-
Indirect Objects
-
Class Interfaces
-
Operator Overloading
-
Coercions
-
-
Chapter 16 Class Hierarchies
-
Inheritance
-
Objects
-
Blessing Objects
-
Constructor Arguments
-
Base Class Initialization
-
Construction and Destruction
-
Automating Class Hierarchies
-
Attribute Demolition
-
Attribute Building
-
Coercions
-
Cumulative Methods
-
Autoloading
-
-
Chapter 17 Modules
-
Interfaces
-
Refactoring
-
Version Numbers
-
Version Requirements
-
Exporting
-
Declarative Exporting
-
Interface Variables
-
Creating Modules
-
The Standard Library
-
CPAN
-
-
Chapter 18 Testing and Debugging
-
Test Cases
-
Modular Testing
-
Test Suites
-
Failure
-
What to Test
-
Debugging and Testing
-
Strictures
-
Warnings
-
Correctness
-
Overriding Strictures
-
The Debugger
-
Manual Debugging
-
Semi-Automatic Debugging
-
-
Chapter 19 Miscellanea
-
Revision Control
-
Other Languages
-
Configuration Files
-
Formats
-
Ties
-
Cleverness
-
Encapsulated Cleverness
-
Benchmarking
-
Memory
-
Caching
-
Memoization
-
Caching for Optimization
-
Profiling
-
Enbugging
-
-
Appendix Essential Perl Best Practices
-
Appendix Perl Best Practices
-
, Code Layout
-
, Naming Conventions
-
, Values and Expressions
-
, Variables
-
, Control Structures
-
, Documentation
-
, Built-in Functions
-
, Subroutines
-
, I/O
-
, References
-
, Regular Expressions
-
, Error Handling
-
, Command-Line Processing
-
, Objects
-
, Class Hierarchies
-
, Modules
-
, Testing and Debugging
-
, Miscellanea
-
-
Appendix Editor Configurations
-
vim
-
vile
-
Emacs
-
BBEdit
-
TextWrangler
-
-
Appendix Recommended Modules and Utilities
-
Recommended Core Modules
-
Recommended CPAN Modules
-
Utility Subroutines
-
-
Appendix Bibliography
-
Perl Coding and Development Practices
-
General Coding and Development Practices
-
-
Colophon