Perl Cookbook, 2nd Edition
Tonight was Papa night, which meant that I got to look after Maeve while Jen worked late doing a group at work. Last week, Maeve and I established that Papa Night would always include going to the bookstore, which means Barnes & Noble in South Burlington.
Last week, Maeve was perfectly content to look at books by herself, and didn't want me interfering, so I decided this week to grab a book for myself to peruse while she was busy. It didn't work as I intended — Maeve saw that I wasn't paying full attention to her, and then demanded my attention — but I was able to look through some of the new items in the second edition of The Perl Cookbook.
Among them were:
-
Setting up both an XML-RPC server and client, using
SOAP::Lite
-
Setting up both a SOAP-RPC server and client, using
SOAP::Lite
and other modules; I could have used this inROX::Filer
to communicate with ROX instead of using the filer's RPC call. -
Better coverage of DBI (it actually covered it!):
-
When you expect only a single row, this is a nice way to grab it:
$row = $dbi->selectrow_(array|hash)ref($statement)
-
This is a great way to grab a bunch of columns from a large resultset:
$results = $dbi->selectall_hashref($sql); foreach $record (keys(%{$results})) { print $results->{$record}{fieldname}; }
-
This one is nice for a large resultset from which you only want one column:
$results = $dbi->selectcol_arrayref($sql); foreach $result (@{$results}) { print $result; }
-
If you need to quote values before inserting them, try:
$quoted = $dbi->quote($unquoted); $sql = "UPDATE table SET textfield = $quoted";
-
If you need to check for errors, don't check with each
DBI
call; instead, wrap all of them in an eval statement:eval { $sth = $dbi->prepare($sql); $sth->do; while ($row = $sth->fetchrow_hashref) { ... } } if ($@) { print $DBI::errstr; }
-
-
Coverage of templating, including
Text::Template
(very interesting!) -
Whole new chapters on
mod_perl
and XML (including DOM!) which I didn't really even get to peruse. -
autouse pragma: if you use:
use autouse Module::Name;
perl will use the module at runtime instead of compiletime; basically, it only uses it if it actually needs it (i.e., if it encounters code that utilizes functionality from that module). It's a good way to keep down on the bloat — I should use this with librox-perl, and possibly with
CGI::App
.