Mastering Perl for Bioinformatics by James Tisdall The unconfirmed error reports are from readers. They have not yet been approved or disproved by the author or editor and represent solely the opinion of the reader. Here's a key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem ?page-number?: reader question or request for clarification This page was updated March 26, 20074. UNCONFIRMED errors and comments from readers: (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. (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. {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. {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]; {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. {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. {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. (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. (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*$/ ) { (85) In the middle; no name at testGene line 35 should be: no name at testGene1 line 35 (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.... {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. (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 (329) first code example; second line of code is: $aref = ^a; should be: $aref = \@a; (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; (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.