This book is full of typos, which is forgivable if the code examples don't have typos, but they do. For instance, in the code for upload.cgi on pg 99, the following declaration is made:
use constant UPLOAD_DIR => "/usr/local/apache/data/uploads";
Note this does NOT end with a slash. Later, though, a loop is initialized as follows:
until (sysopen OUTPUT, UPLOAD_DIR . $filename, O_CREAT | O_EXCL)
$filename is taken from user form input, but unless the user was omniscient and put a slash at the beginning of the name he assigned, then the expression "UPLOAD_DIR" . $filename would evaluate to something like:
/usr/local/apache/data/uploadsbleedin_file_name
instead of the correct: ".../uploads/bleedin_file_name". Oh, and speaking of putting a slash at the beginning of the file name....there is code that is supposed to prevent such, as evidenced by the line:
error($q, "Invalid file name; files must start with a letter or number.");
I don't know about slashes, but it didn't prevent me from sending a file name through that begin with a tilde.
Yes the book covers some things you won't find anywhere else, but a lot of the stuff it covers is better covered elsewhere: OReilly's "Webmaster in a NutShell" has better coverage of HTTP. It (Webmaster) also discusses using the use statement to reference a library in a path where you might have had to manually install it in your virtual hosting directory if for instance you couldn't convince your ISP to upgrade to the latest version of CGI.pm. This wasn't covered in the CGI book, which is supposed to be solely about CGI, whereas the Webmaster book not only covers CGI/Perl, but also JavaScript, PHP, etc.
Don't waste your money....I'm sorry I did