Book Reviews

The following book reviews are the copyright of their respective authors and no part should be reproduced without the express permission of the author. Publishers and Authors of the books reviewed may reproduce the whole or extracts of a review for their book. To request copyright permission please email webmaster@birmingham.pm.org.

All the reviews herein are the opinions of the reviewer and are not necessarily the views of Birmingham Perl Mongers and its members. If you feel a review or comment has been made in error, please contact webmaster@birmingham.pm.org to rectify the situation.

Perl Books

Static Link: http://birmingham.grango.org/reviews/15

 
Core Perl
Title:Core Perl
Author(s):Reuven M. Lerner
ISBN:0-13-035181-4
Publisher:Prentice Hall
Reviewer:Jon Allen

Core Perl describes itself as 'The Serious Developer's Guide to Perl', and aims at programmers who are experienced in other languages but need to get up to speed with Perl.

After a few chapters covering the essentials such as program structure, variables and the like, the author gets going on some of Perl's more advanced or unusual facilities. Among the concepts covered are modules and packages, OOP, the CPAN (Comprehensive Perl Archive Network), database integration with DBI, interprocess communication, and network communication (including writing socket code from scratch and using the 'Net::' series of modules). Interestingly, there is a complete chapter about tying variables to classes, one of many useful features which sets Perl apart from languages like Java and C.

Good programming practice is generally followed throughout the book. Apart from the obligatory 'Hello, World!' program, the very first line of code introduced by the author is 'use warnings;'. However we do not see 'use strict;' until page 104 of the book, and readers without prior Perl experience (which to be honest will be most of them) will have to wait until page 173 to find out what it's for!

On the plus side, we are later treated to a whole chapter about maintenance and security. As well as better explanations of 'use strict/warnings/diagnostics', this chapter covers Taint mode (a feature of Perl which forces external data to be validated before it can be used to affect anything outside of the program), debugging techniques, benchmarking, and code profiling.

Unsurprisingly, a large part of the book (5 chapters) is devoted to writing web applications. Again, best practice is followed - all of the examples use the CGI module, and there is no attempt to write yet another templating system (the CPAN modules Text::Template and HTML::Mason are used instead). I was also impressed with the information about mod_perl. As well as using it to speed up legacy CGI scripts, this chapter demonstrates some of the unique facilities offered by mod_perl, such as content filtering and URL manipulation.

Not all of the examples given are beneficial though. Section 14.2.4 tells us that "A common use of CGI is to send the contents of an HTML form as e-mail.", and gives some example code to do this. Unfortunately, the script takes both the 'From:' and 'To:' e-mail addresses from parameters submitted from a web page, effectively turning the web server into an open mail relay! This is just asking for trouble and is an open invitation to spammers. Why bother hacking a server if a back door has been installed? Hopefully the 'experienced developers' that the book is aimed at will realise this, but it would have made a better example to show that while Perl has good features to help with security, these cannot completely prevent a programmer from writing insecure code.

The author, Reuven M. Lerner, has quite an easygoing writing style. The level of detail is pitched about right - enough to hold interest and give ideas, but not so much that the reader is bogged down with technicalities. Where appropriate, references are made to the on-line documentation bundled with Perl if further reading is required. Presentation is also impressive, body text is in a very readable size, with nice bold headings and good use of whitespace.

So who would benefit from reading Core Perl? As well as the stated target audience of experienced developers, I would also consider this book to be suitable for engineers, IT students, and managers, i.e. people who are interested in evaluating the language and need to know what it is capable of and what it's limitations are. To this end, the author talks about Rapid Application Development, giving reasons why it is quicker to write a Perl program rather than the equivalent program in another language. He also discusses support and licensing issues, and gives a brief guide to installing Perl and CPAN modules.

In conclusion, while there are a few points which need to be resolved for the second edition, this book is a fine introduction to the Perl language.