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