Foreword . xiii
Preface xv
1. Introduction 1
What Should You Know Already? 2
What About All Those Footnotes? 2
What’s with the Exercises? 2
What If I’m a Perl Course Instructor? 3
2. Intermediate Foundations 4
List Operators 4
Trapping Errors with eval 8
Dynamic Code with eval 9
Exercises 10
3. Using Modules 11
The Standard Distribution 11
Using Modules 12
Functional Interfaces 12
Selecting What to Import 13
Object-Oriented Interfaces 14
A More Typical Object-Oriented Module: Math::BigInt 15
The Comprehensive Perl Archive Network 15
Installing Modules from CPAN 16
Setting the Path at the Right Time 17
Exercises 19
4. Introduction to References 21
Performing the Same Task on Many Arrays 21
Taking a Reference to an Array 23
Dereferencing the Array Reference 24
Getting Our Braces Off 26
Modifying the Array 26
Nested Data Structures 27
Simplifying Nested Element References with Arrows 29
References to Hashes 30
Exercises 32
5. References and Scoping34
More Than One Reference to Data 34
What If That Was the Name? 35
Reference Counting and Nested Data Structures 36
When Reference Counting Goes Bad 38
Creating an Anonymous Array Directly 40
Creating an Anonymous Hash 42
Autovivification 44
Autovivification and Hashes 47
Exercises 48
6. Manipulating Complex Data Structures 50
Using the Debugger to View Complex Data 50
Viewing Complex Data with Data::Dumper 54
YAML 56
Storing Complex Data with Storable 57
Using the map and grep Operators 59
Applying a Bit of Indirection 59
Selecting and Altering Complex Data 60
Exercises 62
7. Subroutine References63
Referencing a Named Subroutine 63
Anonymous Subroutines 68
Callbacks 70
Closures 70
Returning a Subroutine from a Subroutine 72
Closure Variables as Inputs 75
Closure Variables as Static Local Variables 75
Exercise 77
8. Filehandle References. 79
The Old Way 79
The Improved Way 80
The Even Better Way 81
IO::Handle 82
Directory Handle References 86
Exercises 87
9. Practical Reference Tricks 89
Review of Sorting 89
Sorting with Indices 91
Sorting Efficiently 92
The Schwartzian Multi-Level Sort with the Recursively Defined ata 95
Building Recursively Defined Data 96
Displaying Recursively Defined Data 98
Exercises 99
10. Building Larger Programs 101
The Cure for the Common Code 101
Inserting Code with eval 102
Using do 103
Using require 105
require and @INC 106
The Problem of Namespace Collisions 109
Packages as Namespace Separators 110
Scope of a Package Directive 112
Packages and Lexicals 113
Exercises 113
11. Introduction to Objects115
If We Could Talk to the Animals... 115
Introducing the Method Invocation Arrow 117
The Extra Parameter of Method Invocation 118
Calling a Second Method to Simplify Things 119
A Few Notes About @ISA 120
Overriding the Methods 121
Starting the Search from a Different Place 123
The SUPER Way of Doing Things 124
What to Do with @_ 124
Where We Are So Far... 124
Exercises 125
12. Objects with Data 126
A Horse Is a Horse, of Course of Course—or Is It? 126
Invoking an Instance Method 127
Accessing the Instance Data 128
How to Build a Horse 128
Inheriting the Constructor 129
Making a Method Work with Either Classes or Instances ..130
Adding Parameters to a Method 131
More Interesting Instances 132
A Horse of a Different Color 133
Getting Our Deposit Back 133
Don’t Look Inside the Box 135
Faster Getters and Setters 136
Getters That Double as Setters 136
Restricting a Method to Class-Only or Instance-Only 137
Exercise 137
13. Object Destruction 139
Cleaning Up After Yourself 139
Nested Object Destruction 141
Beating a Dead Horse 144
Indirect Object Notation 145
Additional Instance Variables in Subclasses 147
Using Class Variables 149
Weakening the Argument 150
Exercise 152
14. Some Advanced Object Topics 154
UNIVERSAL Methods 154
Testing Our Objects for Good Behavior 155
AUTOLOAD as a Last Resort 156
Using AUTOLOAD for Accessors 157
Creating Getters and Setters More Easily 158
Multiple Inheritance 160
Exercises 161
15. Exporter 162
What use Is Doing 162
Importing with Exporter 163
@EXPORT and @EXPORT_OK 164
%EXPORT_TAGS 165
xporting in a Primarily OO Module 166
Custom Import Routines 168
Exercises 169
16. Writing a Distribution171
There’s More Than One Way To Do It 172
Using h2xs 173
Embedded Documentation 179
Controlling the Distribution with Makefile.PL 183
Alternate Installation Locations (PREFIX=...) 184
Trivial make test 185
Trivial make install 186
Trivial make dist 186
Using the Alternate Library Location 187
Exercise 188
17. Essential Testing 189
More Tests Mean Better Code 189
A Simple Test Script 190
The Art of Testing 191
The Test Harness 193
Writing Tests with Test::More 195
Testing Object-Oriented Features 197
A Testing To-Do List 199
Skipping Tests 200
More Complex Tests (Multiple Test Scripts) 201
Exercise 201
18. Advanced Testing . 203
Testing Large Strings 203
Testing Files 204
Testing STDOUT or STDERR 205
Using Mock Objects 208
Testing POD 209
Coverage Testing 210
Writing Your Own Test::* Modules 211
Exercises 214
19. Contributing to CPAN. 216
The Comprehensive Perl Archive Network 216
Getting Prepared 216
Preparing Your Distribution 217
Uploading Your Distribution 218
Announcing the Module 219
Testing on Multiple Platforms 219
Consider Writing an Article or Giving a Talk 220
Exercise 220
Appendix: Answers to Exercises 221
Index ... 249