Errata

Learning Perl

Errata for Learning Perl, Seventh Edition

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 "Date 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 Note Update

Version Location Description Submitted By Date submitted Date corrected
Chapter 2, Section "Interpreting Nondecimal Numerals", 2nd code section

This is the code section:

hex( 10 ); # decimal 10, converted to "10", then decimal 16
hex( 0x10 ); # hex 10, converted to "16", then decimal 22

In order to match the form of previous code sections, remove the semicolons.

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 2, Section "Choosing Good Variable Names", 1st paragraph, 3rd line

Change "you might call something simple" to "you might call it something simple".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 4, Section "Omitting the Ampersand", 6th paragraph, 3rd sentence

This is the sentence:

"... it doesn't know what C division > is yet."

Change to:

"... it doesn't know what division is yet."

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 5, Section "The Double Diamond", 1st paragraph, 2nd sentence

Change "has a special character in such" to "has a special character in it".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 5, Section "Formatted Output with printf", 5th code section

This is the code section:

printf "in %x days!\n", 17; # in 0x11 days!
printf "in %o days!\n", 17; # in 021 days!

Change to:

printf "in 0x%x days!\n", 17; # in 0x11 days!
printf "in 0%o days!\n", 17; # in 021 days!

or this:

printf "in %#x days!\n", 17; # in 0x11 days!
printf "in %#o days!\n", 17; # in 021 days!

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 5, Section "Formatted Output with printf", 12th code section

This is the code section:

printf "%*.*f", 6, 2, 3.1415926; # looks like ```3.14
printf "%*.*f", 6, 3, 3.1415926; # looks like ``3.142

A backtick (`) needs to be removed from each of the comments. Therefore change to:

printf "%*.*f", 6, 2, 3.1415926; # looks like ``3.14
printf "%*.*f", 6, 3, 3.1415926; # looks like `3.142

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 6, Section "The each Function", 5th paragraph, 2nd sentence

This is the part of the sentence:

"there's an iterator stored in with each hash"

Change to:

"there's an iterator stored in each hash"

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 7, 2nd paragraph, 1st sentence

This is the sentence:

"... but Perl is still out in front of most them in its power and expressitivity."

Change "expressitivity" to "expressivity".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 7, Section "Quantifiers", 10th paragraph, 1st sentence

This is the sentence:

"This also means that a pattern with a * at the start or end does more work than it needs to do."

Change "*" to ".*".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 7, Section "Alternatives"

Wouldn't the term "Alternation" be more appropriate than "Alternatives" for the title of this section?

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 7, Section "Alternatives", 2nd code section

This is the code section:

fred
barney

Change to:

fred matched
barney matched

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 7, Section "Alternatives", 4th code section

This is the code section:

fred
betty
barney

Change to:

fred matched
betty matched
barney matched

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 7, Section "Character Classes", 2nd code section, 3rd line

This is the line:

[a\-z] # hyphen or an a or an z

Change "an z" to "a z".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 7, Section "Character Classes", 5th paragraph, 1st sentence

This is the sentence:

"You may use the same character shortcuts as in any double-quotish string to define a character, ..."

Remove "as".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 8, Section "Matches with m//", 1st paragraph, 1st sentence

This is the sentence:

"... this is actually a shortcut for the m// (pattern match operator), the pattern match operator."

Change to:

"... this is actually a shortcut for m//, the pattern match operator."

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 8, Section "Named Captures", 10th paragraph, 1st sentence

This is the sentence:

"A \k<label> is slightly different than \g{label}. In patterns that have two or more labeled groups with the same label, \k<label> and \g{label} always refer to the leftmost group, but \g{N} can be a relative back reference."

The way that \g{N} is mentioned here when comparing \k<label> with \g{label} is a bit confusing. Perhaps the text could be changed to the following:

"While \k<label> is essentially the same as \g{label}, the \g{} syntax can also be used to refer to a relative back reference (i.e. \g{N})."

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 9, Section "Substitutions with s///", NOTE, 2nd sentence

This is the sentence:

"This is nearly always a variable, but could be used on the left side of an assignment operator."

I find this sentence somewhat confusing. I actually prefer the wording from the previous edition:

"This is nearly always a variable, although it could actually be anything that could be used on the left side of an assignment operator."

Note from the Author or Editor:
Fixed in repo

André Philipp  Feb 26, 2017  Mar 02, 2018
Chapter 9, Section "Substitution Modifiers", 1st paragraph, 1st sentence

This is the sentence:

"In addition to the /g modifier, you can use the /i, /x, m/, and /s modifiers ..."

Change "m/" to "/m".

Note from the Author or Editor:
Fixed in repo

André Philipp  Feb 26, 2017  Mar 02, 2018
Chapter 9, Section "Nondestructive Substitutions", 4th paragraph, 4th sentence

This is the sentence:

"... the =~ is higher precedence than the =."

Change "is" to "has".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 9, Section "Case Shifting", 10th paragraph, 2nd sentence

This is the sentence:

"That ß is equivalent of ss, but:"

Change "of" to "to".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 9, Section "Case Shifting", 10th code section, 6th line

This is the line:

my $folded = fc( $uncapped ); # fred

Change to:

my $folded = fc( $capped ); # fred

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 9, Section "Exercises"

The text "5. " is missing before the 5th exercise.

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 10, Section "Statement Modifiers", 10th paragraph, 5th sentence

This is the sentence:

"If you need more than just a simple expression on each side, just write the code the old-fashioned way, with the parentheses and curly braces."

Change "each" to "either".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 10, Section "The next Operator", 4th paragraph, 2nd sentence

This is the sentence:

"Well, in the outer loop, that's what it is."

Change "is" to "holds".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 11, Section "Exercises", Exercise 2, 1st code section, 2nd line

This is the line:

50 years, 8 months, and 20 days

In order to match the exercise solution in Appendix A, change to:

50 years and 8 months

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 12, Section "File Test Operators", 3rd paragraph, 7th sentence

This is the sentence:

"The -M file test returns the file modification time in days since the start of the program, ..."

The wording "since the start of the program" implies that the -M file test returns the time from when the program was started until the file was modified (when in fact it's the reverse). Perhaps this sentence could be reworded to as follows:

"The -M file test returns the age in days between the last modification time and when the program started running, ..."

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 12, Section "Testing Several Attributes of the Same File", 5th paragraph, 4th sentence

This is the sentence:

"When you return from that subroutine and do another file test, the _ filehandle isn't for $file like you expect, but for $other_file:"

In order to match the code that follows, change "$file" to "$filename" and "$other_file" to "$other_filename".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 12, Section "The stat and lstat Functions", 6th paragraph, 4th sentence

This is the sentence:

"You'll see more about this when we talk about creating links to files in 13."

Change "13" to "Chapter 13".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 12, Section "Exercises", Exercise 1, 1st sentence

This is the sentence:

"... and reports for each one whether it's readable, nor writable, executable, or doesn't exist."

Remove "nor ".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 12, Section "Exercises", Exercise 1, 6th sentence

This is the sentence:

"That is, you could type something like ./ex12-2 * to ask the program for the attributes of many files at once."

As this is part of Exercise 1, change "./ex12-2" to "./ex12-1".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 13, Section "Changing Timestamps", 1st paragraph, 2nd sentence

This is the sentence:

"... while the remaining arguments are the list of filenames to alter to those timestamps."

Change to:

"... while the remaining arguments are the list of filenames to alter those timestamps."

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 14, Section "Finding a Substring with index", 7th code section, 5th line

This is the line:

while( ) {

While an empty test is indeed treated as true in a while loop, it's a special case. Therefore change to:

while( 1 ) {

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 14, Section "Finding a Substring with index", 7th code section, 6th line

This is the line:

$where = rindex($fred, "abba", $where - 1 )

Change to:

$where = rindex($fred, "abba", $where - 1 );

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 14, Section "Manipulating a Substring with substr", 7th code section

This is the line:

substr($string, 9, 0) = "cruel"; # "Goodbye, cruel world!";

Change to:

substr($string, 9, 0) = "cruel "; # "Goodbye, cruel world!";

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 14, Section "Formatting Data with sprintf", 2nd paragraph, 1st sentence

This is the sentence:

"In that example, $date_tag gets something like "2038/01/19 3:00:08"."

There should be an extra space between 19 and 3. Therefore change "2038/01/19 3:00:08" to "2038/01/19 3:00:08".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 14, Section "Formatting Data with sprintf", 2nd paragraph, 4th sentence

This is the sentence:

"Without a leading zero in the formats, the resulting date-and-time string would have unwanted leading spaces instead of zeros, looking like "2038/ 1/19 3: 0: 8"."

There should be an extra space between 19 and 3. Therefore change "2038/ 1/19 3: 0: 8" to "2038/ 1/19 3: 0: 8".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 14, Section "Sorting by Multiple Keys", 2nd code section

This is the code section:

my @winners = sort by_score_and_name keys %score;

sub by_score_and_name {
$score{$b} <=> $score{$a} # by descending numeric score
or
$a cmp $b # code point order by name
} @winners

Remove " @winners" from the last line.

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 15, Section "The exec Function", 3rd paragraph, 2nd sentence

This is the sentence:

"... having performed the Unix exec(2) system call (or equivalent)."

I am not finding a man page for "exec(2)". Perhaps it is outdated?

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 15, Section "Using Backquotes to Capture Output", 5th paragraph, 1st sentence

This is the sentence:

"Note that $_ is a different value for each invocation, ..."

Change "is" to "has".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 15, Section "Using Backquotes to Capture Output", 7th paragraph, 1st sentence

This is the sentence:

"As with the other generalized quotes, you mainly use this when the stuff inside the quotes is also the default delimiter."

Change to:

"As with the other generalized quotes, you mainly use this when the stuff inside the quotes also contains the default delimiter."

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 15, Section "Processes as Filehandles", 11th paragraph, 1st sentence

This is the sentence:

"Closing a filehandle attached to a process waits for the process to complete so that Perl can get the process's exit status."

Change to:

"When closing a filehandle attached to a process, Perl waits for the process to complete so that it can get the process's exit status."

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 15, Section "Processes as Filehandles", 7th code section, 3rd line

This is the line:

or die "fork: $!";

Change to:

or die "cannot pipe from find: $!";

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 15, Section "Exercises", Exercise 4, 2nd code section

This is the code section:

$ perl -e 'kill HUP = 12345'>

Change to:

$ perl -e 'kill HUP => 12345'

Also, part of the text is in bold font and part is not. All of the text (except the "$") should be in bold font.

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 16, Section "Using eval", 17th paragraph, 3rd sentence

This is the sentence:

"Some of these errors are listed with an (X) code on the perldiag documentation, if you're curious."

Change "on" to "in".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Chapter 16, Section "Exercises", Exercise 1, 7th sentence

This is the sentence:

"(If you need a file full of interesting strings to try matching, try the file sample_text in the files you've surely downloaded by now from the O'Reilly website; see Chapter 1.)"

Change "Chapter 1" to "Preface".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Appendix A, Section "Answers to Chapter 8 Exercises", Exercise 5, 2nd paragraph, 3rd sentence

This is the sentence:

"If your pattern doesn't match just plain wilma anymore, perhaps you require one or more characters, instead of zero or more."

Change to:

"If your pattern doesn't match just plain wilma anymore, perhaps you require zero or more characters, instead of one or more."

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Appendix A, Section "Answers to Chapter 9 Exercises", Exercise 5, 3rd code section

This is the code section:

@ARGV = sort keys %do_these;
$^I = ".bak"; # make backups
while (<>) {
if (/\A#!/) { # is it the shebang line?
$_ .= "## Copyright (c) 20XX by Yours Truly\n";
}
print;
}

In the event that @ARGV is empty, the diamond operator will cause the program to appear to hang as it waits for standard input. Instead, the while loop should be skipped if @ARGV is empty.

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Appendix A, Section "Answers to Chapter 10 Exercises", Exercise 3, 2nd code section, 2nd line

In order to match the text from the exercise question, change "(undefined)" to "(undefined value)".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Appendix A, Section "Answers to Chapter 14 Exercises", Exercise 3, 3rd paragraph, 1st sentence

This is the sentence:

"The my variable $pos is declared private to the scope of the for loop, and it starts with a value of -s1."

Change "-s1" to "-1".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Appendix A, Section "Answers to Chapter 15 Exercises", Exercise 4, 2nd code section

This is the code section:

$ kill -HUP 61203
$ perl -e 'kill HUP = 61203'>
$ perl -e 'kill USR2 = 61203'>

Change to:

$ kill -HUP 61203
$ perl -e 'kill HUP => 61203'
$ perl -e 'kill USR2 => 61203'

Also, part of the text is in bold font and part is not. All of the text (except the "$") should be in bold font.

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Appendix C, Section "Fancier Characters by Name", 2nd paragraph, 3rd sentence

I get "404 Error - Not found" when I click the blog post link "Use the /N regex character class to get 'not a newline'".

Note from the Author or Editor:
Fixed in repo

aphilipp  Feb 26, 2017  Mar 02, 2018
Appendix D, Section "Perl 5.10 and Beyond", 3rd paragraph, 4th sentence

This is the sentence:

"These experimental feature won't disturb your program ..."

Change "feature" to "features".

Note from the Author or Editor:
Change as noted.

aphilipp  Feb 26, 2017  Mar 02, 2018
Appendix D, Section "Installing a Recent Perl", NOTE, 4th sentence

This is the sentence:

"For OS X users, install the "command-line tools for XCode"."

Change to (there are 2 changes):

"For OS X users, install the "command line tools for Xcode"."

Note from the Author or Editor:
Change this to

For OS X users, install the "Command Line Tools" from Apple.

aphilipp  Feb 26, 2017  Mar 02, 2018

Missing terminating semicolon on the line setting the variable for rindex() causes the Perl to complain.

while( ) {
$where = rindex($fred, "abba", $where - 1 )
last if $where == -1;
push @where, $where;
}

Should be:
while( ) {
$where = rindex($fred, "abba", $where - 1 );
last if $where == -1;
push @where, $where;
}

Note from the Author or Editor:
Change as noted

Anonymous  Aug 01, 2017  Mar 02, 2018
unknown
chapter10, Section "The Secret Connection Between foreach and for", 3rd code section

for ($i = 1; $i <= 10; $i++) { # OK now
print "I can count to $_!\n";
}

should be

for ($i = 1; $i <= 10; $i++) { # OK now
print "I can count to $i!\n";
}

Note from the Author or Editor:
Confirmed. Change as noted so $_ is $i

daiziro  Jul 13, 2019 
PDF
Page 1
2nd paragraph

The first sentence reads:

"This is the first edition of our popular Perl 5 book after the release of Perl 6, a language that started its life as something based on Perl but has now taken a life of its own."

Change to "... but has now taken on a life of its own."
[taken a life -> taken on a life]

As written, it sounds like Perl is committing murder :-)

Note from the Author or Editor:
Change as noted.

William Bresler  Feb 27, 2017  Mar 02, 2018
Printed
Page 24
4th code example

'hello\nthere' # hellonthere
should be:
'hello\nthere' # hello\nthere

Note from the Author or Editor:
Fixed in repo

Keith Howanitz  Jan 26, 2017  Mar 02, 2018
Printed
Page 75
last line of last example on page

closing } of sub running_sum is indented two spaces, should be flush left

Note from the Author or Editor:
Change as noted

Keith Howanitz  Feb 01, 2017  Mar 02, 2018
Printed
Page 76
8th paragraph, last sentence

"Otherwise, the suboutine is the same."

should be:

"Otherwise, the subroutine is the same."

Note from the Author or Editor:
Change as noted

Charles Evans  Dec 29, 2016  Mar 02, 2018
Printed
Page 79
4th and 5th exercise

Exercise 4. is not numbered, and exercise 5 is numbered "4." (The answer key correctly has 4. and 5.)

Note from the Author or Editor:
Change as noted.

Keith Howanitz  Feb 01, 2017  Mar 02, 2018
Printed
Page 123
Bottom of the page, last paragraph

The open parenthesis before "especially" has no matching close parenthesis.

Note from the Author or Editor:
Fixed in repo

bugfix  Jan 21, 2017  Mar 02, 2018
ePub
Page 143
two notes

The note in "Character Class Shortcuts" states:
"In Perl versions before v5.18, the \s didn’t match the vertical tab, next line, or nonbreaking space"
The obvious implication is that they are all matched n newer versions.

However, the note in "Unicode Properties" states:
"The \p{Space} is slightly more expansive than \s because the property also matches NEXT LINE and NONBREAKING SPACE characters."

Note from the Author or Editor:
Change that sentence to "In Perl versions before v5.18, the \s didn’t match the vertical tab"

Gregory Sherman  Mar 11, 2018 
ePub
Page 157
Noncapturing Parentheses

If you want to do a lot of grouping but no capturing, you can use the /n flag added in v5.22. It turns all parentheses into noncapturing groups:

if (/(?:bronto)?saurus (?:BBQ )?(?:steak|burger)/n) {
print "It matched\n"; # there is no $1 now
}

----------------------------------------------------
The ?: are all made superfluous by /n.

Note from the Author or Editor:
The code should change to:

if (/(bronto)?saurus (BBQ )?(steak|burger)/n) {
print "It matched\n"; # there is no $1 now
}

Gregory Sherman  Mar 14, 2018 
Printed
Page 170
table 9-1

I believe Table 9-1. Regular expression quantifiers with the nongreedy modifier contains an error on 5th row. The expression should be "{3,5}?" instead of "{3,5}" if description "At least three, as many as five, but as few as possible" is to be accurate.

I am confused if there should be a third column in the table as I see three items in the header, but only two items in each row.

Note from the Author or Editor:
Change as noted.

Harrison  Aug 22, 2019 
ePub
Page 174
Table 9.1

There are problems with the header and three rows of Table 9.1

1) Number to match, Metacharacter, Generalized form
There are only two columns in the row, a minimal match pattern and an explanation

2) ?? Zero matches (a bit useless)
The explanation is wrong - it matches 0 or 1 characters minimally
print "*$1*\n" if "abc" =~ /a(b??)/;
print "*$1*\n" if "abc" =~ /a(b??)c/;

3) {3,5} At least three, as many as five, but as few as possible
The pattern was apparently meant to be {3,5}?

4) {3}? Exactly three
The question mark is superfluous and results in a warning:
Useless use of greediness modifier '?' in regex

Note from the Author or Editor:
Confirmed. We'll fix it in the next edition.

Gregory Sherman  May 16, 2018 
Printed
Page 250
5th paragraph, 3rd sentence

"Many poeple start"

should be:

"Many people start"

Note from the Author or Editor:
Change as noted

Charles Evans  Dec 29, 2016  Mar 02, 2018
Printed
Page 329
3rd paragraph, 1st sentence

"also know as"

should be:

"also known as"

Note from the Author or Editor:
Change as noted.

Charles Evans  Dec 29, 2016  Mar 02, 2018
Printed
Page 348
3rd paragraph

The first sentence reads:

"There are several parts of the Perl documentation that will help you with the Perl parts"

Shouldn't this be:

"There are several parts of the Perl documentation that will help you with the Unicode parts"

Note from the Author or Editor:
Change as noted

Neil  Oct 24, 2016  Mar 02, 2018