Summary: In conclusion, this book is a slightly flawed masterpiece, a
potential master in the field that is sadly let down by a few
omissions and factual errors that spoils an otherwise wonderful
reference.

The Perl Black Book, 2nd Edition, is a hefty tomb of twelve hundred or
so pages that intends to be "as much of the whole Perl story as one
book can hold".  The publishers Coriolis are recommending a retail
price of 41.99ukp a copy, making this seems like a good deal.  Lets 
take a look at what we get for our money.

The format of the book is such that most chapters start with an "In
Depth" section, which attempts to explain the general concepts and the
whyforths of the issue that chapter explains.  The bulk of the chapter
is then padded out with an "Immediate Solutions" section that covers
there whereforths in a brief quick fire "cookbook" like format of
question...code example...answer.

This format is very readable, and working though the book is a lot
less painful than one might expect for such a large number of pages,
and the format also lends itself well to being an easily accessible
reference book too.  The cookbook like examples are illustrated with
requests for further explanations from a fictitious supporting cast
ranging from the 'novice programmer' to the 'programming correctness
cazer'. These requests, and their corresponding answers, the author
is able to provide both entertainment and much needed context to the
examples.

Understanding Perl, more so than many other languages, is about
understanding culture of the language.  Things hang together because
of common concepts and themes.  The Perl Black Book does a reasonable
job at writing down these unwritten rules and explaining not only how
each of the functions work, but in what situation and why things work.

The one true Perl book, any Perl programmer will tell you, is the
"Camel Book", Programming Perl by Larry Wall et al.  The Perl Black
Book does a good job of complementing The Camel Book; It's style is
significantly different that, though containing mostly the same
information, it is not superfluous.  Indeed, programmers who have
tried reading the Camel Book and found it less than agreeable may
prefer the slightly more bite sized and practical approach of the Perl
Black Book.

Despite all these great points the Perl Black Book is not without
significant and worrying flaws.  The most significant of these being
the lack of "use strict" in the examples in the book.  To its credit,
the book does mention the pragma in all it's form several times, but
in my opinion it does not mention it forcefully enough or in the right
place (just after covering the "-w" switch for example.)  For a
beginner, the "use strict" pragma is a must (and indeed, for any
professional) as it enforces good style and catches many common
mistakes and typos that are otherwise hard to spot and frustrating to
track down.  Such treatment of the subject (or lack there of) by the
book is almost unforgivable.

Other glaring stylistic mistakes that I would have though would have
been caught by technical review are striking.  The old technique of
using typeglob aliasing for constants rather than the "use constant"
directive (the book uses 5.6.1 where this is possible) is a good
example.  Worse, is where the book almost gets it right; For example
the book advocates writing test scripts with module distributions - a
good thing - but then seems to suggest you use the script to print out
output which you then check by eye rather than using Test.pm (or any
of the other testing modules) to print out the standard "ok" or "not
ok" messages.  Such an approach is likely to cause confusion with
Test::Harness and make a beginner programmer wonder what they've done
wrong when their module fails to pass it's tests.

More worrying are things that effect the security aspects of some of
the advice.  The section on CGI programming demonstrates serious
security flaws.  Environment variables are echoed unprotected to output
of webpages (enabling cross-site scripting attacks allowing malicious
people to commender such pages and use them to redirect traffic to
their site and worse.)  File based databases are not locked so
multiple people accessing the website can cause writes to occur at the
same time corrupting the data.  Tainting is not covered.  At least the
code uses CGI.pm!

One of the reasons the book may be so brief on such critical areas is
that the book does cover an extraordinary range of topics.  The
included material on Tk is a more
than reasonable primer on GUI programming in Perl (a section missed by
many other books.)  The section on XML includes a fair amount of info
on the basics of DOM and SAX processing techniques.  Other subjects
are treated worse; The SOAP discussion amounts to outputting custom
XML and would be much better replaced by a discussion of the SOAP::Lite
module.  The WML section is somewhat lacking on important issues and a
programmer would be much better off with Martin Frost's 
Learning WML and
WMLScript book.  Most notable by it's complete absence is anything
on DBI, the Perl Database Interface
that allows Perl to communicate with SQL driven databases.

In conclusion the question is: Would I recommend this book to someone
learning Perl?  Tough call.  Maybe. I would to someone who didn't like
any of the excellent O'Reilly or Manning books.  I certainly wouldn't
hesitate to recommend a third edition of this book in which the
errors and omissions corrected - the format and general coverage is
very appealing, as is the quality of explanation.  Until such an issue
is published I'm going to have to refrain from drawing any conclusions
such.

Later.

Mark.

(also submitted to http://news.diversebooks.com/ who kindly provided the 
review copy)

-- 
s''  Mark Fowler                                     London.pm   Bath.pm
     http://www.twoshortplanks.com/              [EMAIL PROTECTED]
';use Term'Cap;$t=Tgetent Term'Cap{};print$t->Tputs(cl);for$w(split/  +/
){for(0..30){$|=print$t->Tgoto(cm,$_,$y)." $w";select$k,$k,$k,.03}$y+=2}


Reply via email to