Errata

Mastering Perl for Bioinformatics

Errata for Mastering Perl for Bioinformatics

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.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.

Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted by Date submitted
Printed Page 11-14,20-21
Every instance

On p. 11-14 and p. 20-21, all of the following three instances need to be fixed as follows;

Geneticcode.pm -> Geneticcode1.pm
Geneticcode -> Geneticcode1
testGeneticcode -> testGeneticcode1

In the example scripts downloaded, the files are named as I corrected on the right.

Anonymous   
Printed Page 15-19
Every instance

On p. 15-19, all of the following three instances need to be fixed as follows (insert "2");

Geneticcode.pm -> Geneticcode2.pm
Geneticcode -> Geneticcode2
testGeneticcode -> testGeneticcode2

In the example scripts downloaded, the files are named as I corrected on the right.

This is important because there are two versions of codes in the same chapter, and
you need to distinguish between them.

Anonymous   
Printed Page 25

Probability should be ... "> $chilevels[$i+1] and..." rather than using "<" for both upper & lower probability bounds. (This seems to be an error in transcribing existing utility code for a Chi Square probability estimate.)

Anonymous  Nov 23, 2010 
Printed Page 39
Fourth paragraph

In the discussion of arrays:

"$array = [ [ 'Dennis', 'Draya'], ['Callum', 'Bell']]

The following are synonymous:

print $$array[1][2];
print $array->[1][2];
print $array->[1]->[2];

Here's the output:

BellBellBell"

This looks wrong to me -- as the subscript [1][2] is out of bounds. To get "Bell" as
an output would require:

print $$array[1][1]; or one of the suitable variations.

Anonymous   
Printed Page 39
lines 15 -21

print $$array[1][2];
print $array->[1][2];
print $array->[1]->[2];

should read:

print $$array[1][1];
print $array->[1][1];
print $array->[1]->[1];

Anonymous   
Printed Page 61
first line: example

the edit distance between the two strings (portend--->profound) is 4 and not 5.

portend
insert r
prortend
change r to f
proftend
change t to o
profoend
change e to u
profound

if you use the example-script on page 62 with:
my $pattern = 'portend';
my $text = 'profound';
you also get the edit distance 4.

Anonymous   
Printed Page 62
last 2 for statements on page 62 for the code

In the following code rows and columns are reversed:

# The rows correspond to the text
# Initialize row 0 of D.
for (my $t=0; $t <= $TLEN ; ++$t) {
$D->[$t][0] = 0;
}

# The columns correspond to the pattern
# Initialize column 0 of D.
for (my $p=0; $p <= $PLEN ; ++$p) {
$D->[0][$p] = $p;
}

In a 2 dimensional array, classically, the row comes first, as in $array[row][col];

The print of the array works because there is a similar reversal in the print
statement for the array.

Anonymous   
Printed Page 65
4th paragraph

The expressions "row" and "column" should be interchanged. As it reads, "row $t"
corresponds to a "substring of the text ending at text position $t". As depicted,
the number of rows is equal to the size of the pattern, not the size of the text.

Anonymous   
Printed Page 67
Figure 2-2

In Figure 2-2, row is p and column is t.
But in the texts and code on p.60-66, the author referred to them oppositely.

Anonymous   
Printed Page 69

7 lines from the top of the page
this makes reference to example 5.3. So it should read:

} until ( $motif =~ /^s*$/);

not

if ( $motif =~ /^s*$/ ) {

Anonymous   
Printed Page 85
In the middle

no name at testGene line 35
should be:
no name at testGene1 line 35

Anonymous   
Printed Page 91
Fourth paragraph

Text is written:

"If chromosome or pdbref, is passed to the new method, those values of %arg aren't
defined, and the subroutine assigns the default value...."

This looks wrong to me.

I believe the correct language is as for the FOLLOWING paragraph:

ie. If the chromosome or pdbref AREN'T passed as arguments, those values of %arg
aren't defined....

Anonymous   
Printed Page 222-223
sample code at bottom of page 222 & most of 223

the CREATE TABLE statements are in error. The tables are named in
lower case (i.e., "organism" instead of "ORGANISM"), preventing the code (in
homologs.tabs) from testing exactly as shown on page 229
(result is:
genes
organism
variants

instead of
GENES
ORGANISM
VARIANTS)

This also causes the homologs.load (pp. 231-232) to fail when attempting to insert
data from homologs.tabs (typed as shown on page 226) into, for example, a table named
"genes" instead of GENES, "geneid" instead of GeneId, etc.

Dropping the homologs database and recreating using upper case table names (and
initial cap field names, etc.) allows the data to be correctly inserted into the
MySQL database and results in the output shown on the bottom of page 232.

Anonymous   
Printed Page 296
Second Test

[Computer-3:bioperl-1.5.1]108> perl tut1.pl

-------------------- WARNING ---------------------
MSG: id (ROA1_HUMAN) does not exist
---------------------------------------------------
You have a non object [] passed to write_sequence. It maybe that you want to use
new_sequence to make this string into a sequence object? at
/sw/lib/perl5/5.8.6/Bio/Perl.pm line 282
Bio::Perl::write_sequence('>roa1.fasta', 'fasta', 'undef') called at tut1.pl
line 9

Anonymous   
Printed Page 329
first code example

second line of code is:

$aref = ^a;

should be:

$aref = @a;

Anonymous   
Printed Page 331
second code section on page

This line (fifth line of second code section) uses a permille sign, which is not
a valid perl character.

$href = h; (sorry, this symbol won't show up in the errata)

should be:

$href = \%h;

Anonymous   
Printed Page 338
second to last

in a given example of the "translate" binding operator, the text states that the
example will find the number of Gs in a DNA sequence, but the code as typed will find
the number of As. Also, the example states that the answer will return "3", which
is correct for the number of As, but incorrect for the number of Gs.

Anonymous