There is an informal hierarchy of languages in many people’s minds. At the top of this hierarchy are the “pure” languages, such as Lisp. At the next level come the compiled languages, such as C++ and Java. Finally, at the bottom level, are the scripting languages, such as Perl and Bash. These scripting languages were traditionally the glue that held together applications written in higher-level languages. The languages at the top of the heap were traditionally seen as cleaner, and the lower languages were sometimes considered the languages to use for “quick and dirty” jobs.
This book clearly shows that Perl can sit just as easily with functional languages as it can with scripting languages. Fortunately, the author does not just try to present Perl as a functional language, but uses the functional style to illustrate how it is used to solve standard Perl programs elegantly and efficiently.
The examples in the book indicate that the author has his feet firmly on the ground. Most of the examples are practical, and it is quite easy to see where they may be applied. There are a few examples that are more academic, but they usually serve to illustrate a particular principal or idea and don’t give a particularly dry feel to the book.
There are a number of stages encountered in the course of learning a language,--and books about languages are usually aimed at one of these stages. The first stage is the syntax stage where one learns the structure of the language and how to fit the different pieces together. Books at this stage usually present the syntax and discuss the standard libraries and functions that are available. The second stage is the idiomatic stage. This is where one learns how to use the language well and starts learning about the nooks and crannies (also known as idiosyncrasies or gotchas). The final stage is where one becomes a super user. At this stage, he or she is using the language in unusual ways and bending it in ways that many people never thought possible. This book is assuredly aimed at stages two and three. It starts off with the assumption that readers are familiar with the syntax of Perl, and also assumes that they are competent programmers. One of the nice features is that it never talks down to the reader.
Although the book does not explicitly discuss building Perl modules, I think that programmers who intend to build modules will get the most benefit from this book. In fact, I believe only a tiny fraction of Perl programmers are so advanced and knowledgeable that they will not benefit from this book. If you are a Perl programmer, this book will make you a much better Perl programmer. If you are not a Perl programmer, I would still recommend this book (especially if you program in a language such as Lisp or Ruby--but even other languages), as I believe it will make you a better programmer.
One minor gripe is that the author sometimes gives more space than is necessary to pet topics (for example, memoization). Even though the book is almost 600 pages long, it reads like a shorter book. It discusses topics that are important for all programmers to know, and does it in a way that makes the material quite accessible. It is, quite simply, one of the best books on programming I have read for a long time.