Register your product to gain access to bonus material or receive a coupon.
Powerful and flexible, Perl has established itself as a premier programming language, especially as a tool for World Wide Web development, text processing, and system administration. The language features full support for regular expressions, object-oriented modules, network programming, and process management. Perl is extensible and supports modular, cross-platform development.
In Effective Perl Programming, Perl experts Joseph Hall and Randal Schwartz share programming solutions, techniques, pointers, rules of thumb, and the pitfalls to avoid, enabling you to make the most of Perl's power and capabilities.
The authors will help you develop a knack for the right ways to do things. They show you how to solve problems with Perl and how to debug and improve your Perl programs. Offering examples, they help you learn good Perl style. Geared for programmers who have already acquired Perl basics, this book will extend your skill range, providing the tactics and deeper understanding you need to create Perl programs that are more elegant, effective, and succinct. This book also speaks to those who want to become more fluent, expressive, and individualistic Perl programmers.
To help you design and write real-world programs, Effective Perl Programming includes:
Numerous thought-provoking examples appear throughout the book, highlighting many of the subtleties that make Perl such a fascinating, fun, and powerful language to work with.
Foreword.
Preface.
Acknowledgements.
Introduction.
Basics.
Item 1: Know your namespaces.
Item 2: Avoid using a slice when you want an element.
Item 3: Don’t assign undef when you want an empty list.
Item 4: String and numeric comparisons are different.
Item 5: Remember that 0 and “” are false.
Item 6: Understand conversions between strings and numbers.
Item 7: Use $_ for elegance.
Item 8: Know the other default arguments: @_, @ARGV, STDIN.
Item 9: Know common shorthands and syntax quirks.
Item 10: Avoid excessive punctuation.
Item 11: Consider different ways of reading from a stream.
Item 12: Use foreach, map and grep as appropriate.
Item 13: Don’t misquote.
Item 14: Learn the myriad ways of sorting.
Item 15: Know the precedence of regular expression operators.
Item 16: Use regular expression memory.
Item 17: Avoid greed when parsimony is best.
Item 18: Remember that whitespace is not a word boundary.
Item 19: Use split for clarity, unpack for efficiency.
Item 20: Avoid using regular expressions for simple string operations.
Item 21: Make regular expressions readable.
Item 22: Make regular expressions efficient.
Item 23: Understand the difference between my and local.
Item 24: Avoid using @_ directly - unless you have to.
Item 25: Use wantarray to write subroutines returning lists.
Item 26: Pass references instead of copies.
Item 27: Use hashes to pass named parameters.
Item 28: Use prototypes to get special argument parsing.
Item 29: Use subroutines to create other subroutines.
Item 30: Understand references and reference syntax.
Item 31: Create lists of lists with references.
Item 32: Don’t confuse anonymous arrays with list literals.
Item 33: Build C-style structs with anonymous hashes.
Item 34: Be careful with circular data structures.
Item 35: Use map and grep to manipulate complex data structures.
Item 36: Enable static and/or run-time checks.
Item 37: Use debugging and profiling modules.
Item 38: Learn to use a debugging version of Perl.
Item 39: Test things by using the debugger as a Perl shell.
Item 40: Don’t debug too much at once.
Item 41: Don’t reinvent the wheel - use Perl modules.
Item 42: Understand packages and modules.
Item 43: Make sure Perl can find the modules you are using.
Item 44: Use perldoc to extract documentation for installed modules.
Item 45: Use h2xs to generate module boilerplate.
Item 46: Embed your documentation with POD.
Item 47: Use XS for low-level interfaces and/or speed.
Item 48: Submit your useful modules to the CPAN.
Item 49: Consider using Perl’s object-oriented programming features.
Item 50: Understand method inheritance in Perl.
Item 51: Inherit data explicitly.
Item 52: Create invisible interfaces with tied variables.
Item 53: Use pack and unpack for data munging.
Item 54: Know how and when to use eval, require, and do.
Item 55: Know when, and when not, to write networking code.
Item 56: Don’t forget the file test operators.
Item 57: Access the symbol table with typeglobs.
Item 58: Use @{[Ó]} or a tied hash to evaluate expressions inside strings.
Item 59: Initialize with BEGIN; finish with END.
Item 60: Some interesting Perl one-liners.
I used to write a lot of C and C++. My last major project before stepping into the world of Perl full time was an interpreted language that, among other things, drew diagrams, computed probabilities, and generated entire FrameMaker books. It comprised over 50,000 lines of platform-independent C++, and it had all kinds of interesting internal features. It was a fun project. It also took two years to write.
It seems to me that most interesting projects in C and/or C++ take months or years to complete. But it also seems to me that a whole lot of ideas that start out being mundane and uninteresting become interesting three-month projects when they are expressed in an ordinary high-level language.
This is one of the reasons why I originally became interested in Perl. I had heard that Perl was an excellent scripting language with powerful string handling, regular expression, and process control features. I learned Perl, and learned to like it, when I was thrown into a project in which most of my work involved slinging around text files. I quickly found myself spending hours writing Perl programs that would have taken me days or weeks to write in a different language.
Effective Perl Programming is a book of advice and examples. It derives from my experience as a Perl programmer and--especially--as a Perl instructor. The book is suitable for readers who have a basic understanding of Perl and a few months of practical experience programming in it. Because Effective Perl Programming is a guidebook, not a manual, readers will need access to a comprehensive reference. I recommend either the Perl man pages (freely available in many forms, including Unix man and HTML) or Programming Perl.
Although I use a lot of Unix-derived examples in this book, most of what appears here is not specific to Unix. I thought about including Win32 Perl and MacPerl examples but eventually decided that the book would have more integrity and consistency if it didn't stray from Perl's "native" operating system. I do encourage non-Unix developers to read Effective Perl Programming, or at least to give it a careful look.
I've always wanted to be a writer. In childhood I was obsessed with science fiction. I read constantly, sometimes three paperbacks a day, and every so often, wrote some (bad) stories myself. In 1985, I attended the Clarion Science Fiction Writers' workshop in East Lansing, Michigan. Afterward, I spent a year or so occasionally working on short story manuscripts, but never published any fiction. (Not yet, anyway!)
Later on, when I had settled down into a career in software, I met Randal Schwartz. I hired him as a contractor on an engineering project and worked with him for over a year. Eventually he left to pursue teaching Perl full time. After a while, so did I.
In May 1996, I had a conversation with Keith Wollman at a developer's conference in San Jose. When we drifted onto the topic of Perl, he asked me what I would think of a book called Effective Perl. I liked the idea. Scott Meyers's Effective C++ was one of my favorite books on C++, and extending the series to cover Perl would obviously be useful. I couldn't get Keith's idea out of my head. With some help from Randal, I worked out a proposal for the book, and Addison-Wesley accepted it.
The rest--well, that was the fun part. I spent many 12-hour days and nights with FrameMaker in front of the computer screen, asked lots of annoying questions on the Perl 5 Porters list, posted many bug reports to the same list, looked through dozens of books and manuals, wrote many, many little snippets of Perl code, and drank many, many cans of Diet Coke and Diet Pepsi. I even had an occasional epiphany as I discovered very basic things about Perl I had never realized I was missing. After a while, a manuscript emerged.
This book is my attempt to share with the rest of you some of the fun and stimulation I experienced while learning the power of Perl. I certainly appreciate you taking the time to read it, and I hope you will find it useful and enjoyable.
Joseph N. Hall
Chandler, Arizona