Reviewer Greg Smith here dissects a book aimed at programmers who want to add Perl to their stable of languages, but also useful to the Perl connoisseur. If your interest in Perl is more than casual -- especially if you're seeking practical code examples more substantial then in more introductory texts -- The Perl Black Book may be for you. (Read more.)
The ScenarioYou already know C or BASIC or some other programming language, but there's some work you need to finish that none of these languages are the right tool for. Perhaps you want to create CGI programs. The Perl Black Book is an excellent choice to fill that need. It's a non-nonsense title that's focused on working example code in a form that will be familiar to those stepping from another programming language into Perl.
What's BadWhile the book is large, the scope of material it attempts to cover is considerably larger. Coriolis labels the book as intended for intermediate to advanced materials, and there's a minimum of introduction to general programming concepts. Non-programmers trying to learn Perl as their first language would be better served starting with a more introductory title and coming back to this book later. And while there are examples of things like object-oriented Perl and CGI, none of that material goes deep enough to really satisfy a serious student of those topics.
The most annoying thing about this Coriolis release is the introduction to most sections. Holzner spins these little stories about a Novice Programmer, his Big Boss, a Programming Correctness Czar, and other random characters to suggest why you'd need to know about a topic. I question the necessity of these motivational interludes, as they take up space, waste my time reading them, and offer very little in return. The kind of person I'd expect to be reading this book doesn't need a little story suggesting why you'd want to be able to format text when you print it; that this is a useful thing to learn is pretty obvious.
What's GoodThe Perl Black Book does an excellent job with the kinds of things intermediate programmers in the language are interested in. It's become the first place I turn to when looking for a snippet of Perl code to incorporate into a project. An example of why I like this book should illustrate why that is. I recently found myself writing a program that needed to ping a host and take some corrective action if that ping was unsuccessful. I would expect this is a straightforward request, and looked up "ping" in the index of O'Reilly's Programming Perl. This led to an example using the pingecho library call, which I typed in and found utterly unsuccessful at the task I was trying to accomplish. Looking up the same topic in the Perl Black Book, I found a section about twice as large on the subject. Holzner's example program worked just as I was expecting, and I went back to the rest of the application design without needing to focus for very long on the implementation details of this small piece. I've never liked the code in Programming Perl because the samples are all so terse. The Perl Black Book does a much better job in my view of providing programs long enough to demonstrate the appropriate Perl syntax for filling common needs.
So What's In It For Me?Since so much Perl programming is done in the context of a CGI script, many chapters of this book are devoted to that topic. The majority of the material revolves around using Lincoln Stein's CGI.pm library. Much of this mimics Stein's own book, Official Guide to Programming with CGI.pm, but instead of the reference-guide approach, there's more of an emphasis on practical solutions for regularly recurring requests. Example code shows how to create Web counters, guest books, e-mailers, chat, shopping carts and other popular items. A single chapter also introduces usage of the older cgi-lib.pl to create basic HTML pages, but the main focus is definitely CGI.pm, using all of its abstraction. While the CGI section is substantial, considerably more so than the average Perl programming book, there are a number of areas that will need supplementation before you'd want to create a production system. The discussion of the taint mechanism for security is a bit weak, and the basic information about cookies and hidden fields doesn't really give an impression of how to build a larger-scale Web application and properly save state along the way. That is, to be fair, outside of what I'd expect a Perl book cover, and it's only because most of the other material so is helpful that these weaker areas stick out.
The Perl Black Book provides plenty of the kind of examples I'm looking for when writing a Perl program, and it's large and comprehensive enough to cover most areas in sufficient depth. The real question is whether it meshes well with your approach to the language. Holzner is obviously aiming this title at someone who is learning Perl as their second, third, or nth programming language. The samples avoid relying on Perl-specific idioms in most cases. Personally, I find this approach refreshing, as programs I write in Perl frequently end up getting ported to another language later, or co-opted by another programmer who isn't as familiar with the language. So for me, writing Perl that embraces too heavily Perl's language specific features leads to portability and maintenance problems later. For example, when I read through Randal Schwartz's Learning Perl, by page 11 he's already using regular expressions to match strings. I find myself wanting to use a more traditional substring/comparison operation in that context instead, because I know that code will port to any other language easily, and any competent programmer will understand what I'm doing regardless of their familiarity with Perl. Holzner understands that mindset, and writes his prose and programs accordingly; witness the following tip from P291:
"The line ++@_; is a cute example of why nonprogrammers think Perl is obscure. Try showing that line to your grandmother and explaining that you write stuff like that for a living."
If you look at the example above and think that's a nice way to use Perl, by all means stick to the traditional books on the topic from Schwartz, Larry Wall and Tom Christiansen. But if you think that line is unnecessarily cryptic, I think you'll be impressed with how little material like that is inside Holzner's Perl Black Book. It doesn't try to embrace "The Perl Way," but it is a quite useful resource when you're on a short deadline to deliver a working program and don't have time to absorb too much of the language to do it. I'm buying a second copy for the office this week because mine keeps walking away, and there's no greater recommendation for a computer title than noting that copies of the book disappear regularly.
Purchase this book at ThinkGeek.
Table of Contents
- Essential Perl
- Scalar Variables and Lists
- Arrays and Hashes
- Operators and Precedence
- Conditional Statements and Loops
- Regular Expressions
- Formats and String Handling
- Predefined Variables
- Built-In Functions: Data Processing
- Built-In Functions: I/O
- Built-In Functions: File Handling
- Built-In Functions: Interprocess Communication
- Standard Modules
- Perl/Tk--Windows, Buttons, and More
- Data Structures and Databases
- Debugging and Style Guide
- Creating Packages and Modules
- Creating Classes and Objects
- Object-Oriented Programming
- Internet and Socket Programming
- CGI Programming: CGI.pm
- CGI Programming With Other Popular Package
- CGI: Creating Web Counters, Guest Books, Emailers, and Secure Scripts
- CGI: Creating Multiuser Chat, Server Push, Cookies, and Games
- CGI: Creating Shopping Carts, Databases, Site Searches, and File Uploads
- Handling the Web in Code