Errata


Print Print Icon

Submit your own errata for this product.


The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.


Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question



Version Location Description Submitted By Corrected
Printed Page xx
Acknowledgments

The following HAVE BEEN ADDED, after Nancy Kotary's entry:

To Genevieve d'Entremont, for heroic typesetting far beyond
the call of duty.

To Lucie Haskins, whose superb index so elegantly complements
the original manuscript.

The following HAS BEEN ADDED before Chris Dever's entry:

To chromatic, for his rapier wit, for unveiling the mysteries of
testing, and for his invaluable assistance in getting the message
out to the wider Perl community.

Anonymous  Nov 2005
Printed Page xv
4th paragraph, end of first sentence

"...ivory-tower theories on how code ought be created."

Should be: "...ought to be created."

Anonymous  Dec 2007
Printed Page 6
4th paragraph, 1st sentence

"But remember that each of piece of advice"
should be:
"But remember that each piece of advice"

Anonymous  Dec 2007
Printed Page 24
1st paragraph

"Note, however, that the contents of paragraphs..."

replace "contents" with "comments"

Anonymous  Dec 2007
Printed Page 35
Code snippet, 3rd line from bottom

-wbb="% + - * / x != == >= <= =~ < > | & >= < = **= += *= &= <<= &&= -=
should be:
-wbb="% + - * / x != == >= <= =~ < > | & **= += *= &= <<= &&= -=

Anonymous  Dec 2007
Printed Page 38
Code snippet in middle of page, 3rd line

my $estimated_nett_worth;
should be:
my $estimated_net_worth;

Anonymous  Dec 2007
Printed Page 46
Footnote

In parenthetical comment, 'mby' should be 'myb' ('maybe', disemvoweled)

Anonymous  Jun 2009
Printed Page 47
first code listing

The expression $connection_Mbps = get_bitrate() / 10e6; should be $connection_Mbps =
get_bitrate() / 1e6;

Anonymous  Dec 2007
Printed Page 54
3rd code example

The example:
$escape_seq = "127&#65533;06&#65533;30Z"; # DEL-ACK-CAN-Z
should be:
$escape_seq = "177&#65533;06&#65533;30Z"; # DEL-ACK-CAN-Z

Anonymous  Jun 2009
Printed Page 57
1st code snippet

The statements:

use constant (
DEAR => 'Greetings to you,',
SINCERELY => 'May Heaven guard you from all misfortune,',
);

should be:

use constant {
DEAR => 'Greetings to you,',
SINCERELY => 'May Heaven guard you from all misfortune,',
};

(That is, braces instead of parentheses).

Anonymous  Dec 2007
Printed Page 58
2nd last paragraph

Change:
If you decide not use the Readonly module ...
to:
If you decide not to use the Readonly module ...

Anonymous  Dec 2007
Printed Page 59
2nd line

replace
atomic weight values
by
atomic number values

Anonymous  Dec 2007
Printed Page 66
Fourth listing

Instead of:

$text = format_text(src=>$raw_text, margins=>[1,62], justify=>'left');

it should definitely read:

$text = format_text({ src=>$raw_text, margins=>[1,62], justify=>'left' });

Anonymous  Dec 2007
Printed Page 72
Last paragraph

The lines:

Readonly my %IS_EXIT_WORD
=> map { ($_ => 1) } qw(
q quit bye exit stop done last finish aurevoir
);

Should read:

Readonly my %IS_EXIT_WORD
= map { ($_ => 1) } qw(
q quit bye exit stop done last finish aurevoir
);

Anonymous  Dec 2007
Printed Page 81
Halfway down page, first sentence

The problems described earlier under "Localization can also crop up...

should be:

The problems described earlier under "Localization" can also crop up...
^

Anonymous  Dec 2007
Printed Page 88
1st, 3rd and 4th code listing

the word "prepenultimate" should be "antepenultimate"

Anonymous  Dec 2007
Printed Page 100
Bottom of the page

...to even(), replacing it with a direct...

NOW READS:
...to odd(), replacing it with a direct...

Anonymous  Nov 2005
Printed Page 115
2nd indented paragraph ("The implicit $_ successively holds...")

"...then see if the resulting file exists. If it does, then..."
should be:
"...then see if the resulting file exists. If it doesn't, then..."
^^^

Anonymous  Dec 2007
Printed Page 137
Near bottom where describing macro for vim

iab papp ^]:r ...
should be
iab papp ^[:r ...

Anonymous  Jun 2009
Printed Page 150
First code example

The line "Use Digest::SHA qw( sha512 );" should have "use" in all lower case.

Anonymous  Jun 2009
Printed Page 157
Last code example

$RECORD_SEPARATOR should properly be named $FIELD_SEPARATOR (especially vis-à-vis
$FIELD_COUNT)

Anonymous  Jun 2009
Printed Page 157
First full code listing

the entry for $RECORD_LAYOUT{ID_last}:
ID_last => '@21 C6 @0 C10 @12 C8
should be
ID_last => '@21 A6 @0 A10 @12 A8

Anonymous  Jun 2009
Printed Page 158
1st code example, last line

if $unexpected_data;
should be:
if defined $unexpected_data;


Anonymous  Jun 2009
Printed Page 161
String Evaluations section; end of next to last line 1st paragraph (below code)

"expected processing delays," should be "unexpected processing delays,"

Anonymous  Jun 2009
Printed Page 166
Next to last paragraph

...no need for (expensive) hash loop-ups inside the loop.
should be:
...no need for (expensive) hash look-ups inside the loop.
^

Anonymous  Jun 2009
Printed Page 172
First line of code in 'reduce' paragraph

$overall_probablity
should be:
$overall_probability

Anonymous  Jun 2009
Printed Page 176
Middle of the page

Barewords is forbidden under use strict, so...

NOW READS:
Barewords are forbidden under use strict, so...

Anonymous  Nov 2005
Printed Page 177
mid of page, in second (not recommended) codefragment

... # Maybe the same (if currobj() already declared),
should be
... # Maybe the same (if curr_obj() already declared),
^

Anonymous  Jun 2009
Printed Page 198
source fragment at top of page

return $num if $prev_found;
should be
return $num if $prev_odd_found;
^^^^

Anonymous  Jun 2009
Printed Page 205
footnote

Replace
Chapter 2
by
Chapter 3

Anonymous  Jun 2009
Printed Page 207
First code example

Keep the bad practice (2-arg open) for pedagogical purposes but remove the
bug (double dollar). Replace
open my $active, "$ACTIVE_LOG" or croak "Can't open '$$ACTIVE_LOG': $OS_ERROR";
by
open my $active, "$ACTIVE_LOG" or croak "Can't open '$ACTIVE_LOG': $OS_ERROR";

Anonymous  Jun 2009
Printed Page 215
third paragraph from bottom

"slurp()" shouldn't be line-broken between the parentheses

Anonymous  Jun 2009
Printed Page 242
1st paragraph

Regexp::Autoflags does not exist in CPAN.
Regexp::Autoflags
should be:
Regexp::DefaultFlags

Anonymous  Jun 2009
Printed Page 252
First paragraph

Nor will this version allow an extra % or & in the source.

NOW READS:
Nor will this version allow an extra % in the source or & in the data.

Anonymous  Nov 2005
Printed Page 259
example code, 6th-from-last line

change:
if ($word =~ m/ ($has_irregular_plural) /xms) {
to:
if ($word =~ m/A ($has_irregular_plural) z/xms) {

Anonymous  Jun 2009
Printed Page 275
2nd paragraph after Example 13-1, 3rd sentence

"loader_header_from()" should be "load_header_from()".

Anonymous  Jun 2009
Printed Page 284
3rd line

The 3rd line reads:
... it can still better to use croak():
which probably should read:
... it can still be better to use croak():

Anonymous  Jun 2009
Printed Page 289
Second code block

eval {
return get_next_line()
};

should be replaced with:

my $next_line = eval { get_next_line() };
return $next_line if !$EVAL_ERROR;

Anonymous  Jun 2009
Printed Page 290
2nd paragraph, 5th line

tion object ($EVAL_ERROR->get_handle()) and seeks it back
should be:
tion object ($EVAL_ERROR->handle()) and seeks it back

Anonymous  Jun 2009
Printed Page 296
first code snippet

Change the line:
X::EOF => {
to:
'X::EOF' => {

Anonymous  Jun 2009
Printed Page 298
Second code listing

The last line of code in the second code listing:
seek $exception->fh(), 0, 0;
should be:
seek $exception->handle(), 0, 0;
to match the last line of code in the first code listing of that page.

Anonymous  Jun 2009
Printed Page 302
in the LT "Use a double -- prefix...",

the dashes on "--input" NOW APPEAR asnon-breaking so they don't word-wrap.

Anonymous  Nov 2005
Printed Page 339
last line

The two occurrences of "=>" should each be "->" .
So the line should be:
= exists $arg_ref->{vagueness} ? $arg_ref->{vagueness} : 1;

In fact, it is correct in the example file:
./code/ch15/Ch15.034_Best_Ex15.5

Anonymous  Jun 2009
Printed Page 352
code of the Bit::String class

There is a subtle bug in the code of the Bit::String class shown
on page 352. Specifically, the line:

$bitset_of{ident $new_object}
= pack $BIT_PACKING, map {$_ ? 1 : 0} @{$arg_ref->{bits}};

should be:

$bitset_of{ident $new_object}
= pack $BIT_PACKING,
join $EMPTY_STR,
map {$_ ? 1 : 0} @{$arg_ref->{bits}};

Anonymous  Jun 2009
Printed Page 367
4th paragraph, 2nd sentence

"...at the start of the destructor..."

change "destructor" to "constructor"

Anonymous  Jun 2009
Printed Page 371
2nd paragraph (under Base Class Initialization section)

Second sentence reads (underline emphasis mine):

"If two or more classes in the _name_ hierarchy do happen to have attributes of the
same name, the constructor will need two or more initializers with the _name_ key --
which a single hash can't provide."

It should read:

"If two or more classes in the _same_ hierarchy do happen to have attributes of the
same name, the constructor will need two or more initializers with the _same_ key --
which a single hash can't provide."

Anonymous  Jun 2009
Printed Page 374
paragraph below second code sample (middle of page)

"Class::Std::Utils" is incorrectly written as "Class::Std::Util" in the paragraph in
the middle of the page (just above the extract_initializers_from() function).

Anonymous  Jun 2009
Printed Page 386
last paragraph

There is an asterisk on the 3rd line of the last paragraph of page 385, but the
corresponding footnote is on the next page.

Anonymous  Jun 2009
Printed Page 393
last line on page

The footnote referenced is on the next page.

Anonymous  Jun 2009
Printed Page 416
3rd paragraph

("to" instead of "do")

"Better still, Module::Starter has a simple plug-in architecture that allows you do
specify how it creates each new module..."

should read:

"Better still, Module::Starter has a simple plug-in architecture that allows you to
specify how it creates each new module..."

Anonymous  Jun 2009
Printed Page 424
2nd to last line

"... your /t directory ..." should be "... your t/ directory ..."

Anonymous  Jun 2009
Printed Page 430
Code after 2nd paragraph line 11 of code

sub dump_a
should be
sub dump_at

as referenced in 3rd paragraph line 2;

Anonymous  Jun 2009
Printed Page 430
paragraph after code block

"use strict never gets the change to"

replace "change" with "chance"

Anonymous  Jun 2009
Printed Page 443
Whole page (Round.pm), Round.xs

To work, it should read (tested on Mandriva Linux, perl-5.8.7) :

1: perl -pi -e 's/rounded/round/g' Round.xs rounded.pl

2: perl -pi -e 's/^@EXPORT/our @EXPORT/' Round.pm
to avoid :
Global symbol "@EXPORT" requires explicit package name at
/usr/lib/perl5/site_perl/5.8.7/i386-linux/Round.pm line 6.

3: perl -pi -e 's/res/RETVAL/g' Round.xs
to avoid :
Error: OUTPUT res not an argument in Round.xs, line 15
Please specify prototyping behavior for Round.xs (see perlxs manual)

The correct code follows :

> cat Round.pm
package Round;
use strict;
use warnings;
use base qw( Exporter DynaLoader );
our $VERSION = '0.01';
our @EXPORT = qw( round );
bootstrap Round $VERSION;
1;
__END__

> cat rounded.pl
use Round;
use IO::Prompt;
while (my $num = prompt -num => 'Enter a number: ') {
print round($num), "
";
}

> cat Round.xs
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
MODULE = Round PACKAGE = Round
int
round(arg)
double arg
CODE:
/* Round towards zero... */
if (arg > 0.0) { RETVAL = floor(arg + 0.5); }
else if (arg < 0.0) { RETVAL = ceil(arg - 0.5); }
else { RETVAL = 0; }
OUTPUT:
RETVAL

Anonymous  Jun 2009
Printed Page 447
end of the code section at top of page

the last two lines:

<section name="verbose"> <!-- Report</comment --> </section>
<section name="log"> <!-- Report every step --> </section>

should be:
<section name="verbose"> <!-- Report every step --> </section>
<section name="log"> <!-- And log every transaction --> </section>



Anonymous  Jun 2009
Printed Page 451
first line of "Ties" section

"behaviour any type of variable"
should read
"behaviour of any type of variable"

Anonymous  Jun 2009
Printed Page 465
last paragraph

...summarize the results with dproffpp... -> dprofpp

Anonymous  Jun 2009
Printed Page 467
Last code block

The regular expression reads:

m{A Name: s+ ([^N]+) ; s+
? z}xms

The [^N] above should be [^]

Anonymous  Jun 2009
Printed Page 489
Readonly module

Change the line:

Readonly Creates read-only scalars, arrays, and hashes (see Chapter
14) 1.03 or later

to:

Readonly Creates read-only scalars, arrays, and hashes (see Chapter
4) 1.03 or later

Anonymous  Jun 2009


"Great backbeat...[and] well worth it. I give it a 10."
--Andy Bach, Chicago.pm