| | Copyright |
| | Foreword |
| | Preface |
| | | Structure of This Book |
| | | Conventions Used in This Book |
| | | Comments and Questions |
| | | Acknowledgments |
|
| | Chapter 1. Introduction |
| | | Section 1.1. What Should You Know Already? |
| | | Section 1.2. What About All Those Footnotes? |
| | | Section 1.3. What's with the Exercises? |
| | | Section 1.4. What if I'm a Perl Course Instructor? |
|
| | Chapter 2. Building Larger Programs |
| | | Section 2.1. The Cure for the Common Code |
| | | Section 2.2. Inserting Code with eval |
| | | Section 2.3. Using do |
| | | Section 2.4. Using require |
| | | Section 2.5. require and @INC |
| | | Section 2.6. The Problem of Namespace Collisions |
| | | Section 2.7. Packages as Namespace Separators |
| | | Section 2.8. Scope of a Package Directive |
| | | Section 2.9. Packages and Lexicals |
| | | Section 2.10. Exercises |
|
| | Chapter 3. Introduction to References |
| | | Section 3.1. Performing the Same Task on Many Arrays |
| | | Section 3.2. Taking a Reference to an Array |
| | | Section 3.3. Dereferencing the Array Reference |
| | | Section 3.4. Dropping Those Braces |
| | | Section 3.5. Modifying the Array |
| | | Section 3.6. Nested Data Structures |
| | | Section 3.7. Simplifying Nested Element References with Arrows |
| | | Section 3.8. References to Hashes |
| | | Section 3.9. Exercises |
|
| | Chapter 4. References and Scoping |
| | | Section 4.1. More than One Reference to Data |
| | | Section 4.2. What if That Was the Name ? |
| | | Section 4.3. Reference Counting and Nested Data Structures |
| | | Section 4.4. When Reference Counting Goes Bad |
| | | Section 4.5. Creating an Anonymous Array Directly |
| | | Section 4.6. Creating an Anonymous Hash |
| | | Section 4.7. Autovivification |
| | | Section 4.8. Autovivification and Hashes |
| | | Section 4.9. Exercises |
|
| | Chapter 5. Manipulating Complex Data Structures |
| | | Section 5.1. Using the Debugger to View Complex Data |
| | | Section 5.2. Viewing Complex Data with Data::Dumper |
| | | Section 5.3. Storing Complex Data with Storable |
| | | Section 5.4. The map and grep Operators |
| | | Section 5.5. Using map |
| | | Section 5.6. Applying a Bit of Indirection |
| | | Section 5.7. Selecting and Altering Complex Data |
| | | Section 5.8. Exercises |
|
| | Chapter 6. Subroutine References |
| | | Section 6.1. Referencing a Named Subroutine |
| | | Section 6.2. Anonymous Subroutines |
| | | Section 6.3. Callbacks |
| | | Section 6.4. Closures |
| | | Section 6.5. Returning a Subroutine from a Subroutine |
| | | Section 6.6. Closure Variables as Inputs |
| | | Section 6.7. Closure Variables as Static Local Variables |
| | | Section 6.8. Exercise |
|
| | Chapter 7. Practical Reference Tricks |
| | | Section 7.1. Review of Sorting |
| | | Section 7.2. Sorting with Indices |
| | | Section 7.3. Sorting Efficiently |
| | | Section 7.4. The Schwartzian Transform |
| | | Section 7.5. Recursively Defined Data |
| | | Section 7.6. Building Recursively Defined Data |
| | | Section 7.7. Displaying Recursively Defined Data |
| | | Section 7.8. Exercises |
|
| | Chapter 8. Introduction to Objects |
| | | Section 8.1. If We Could Talk to the Animals... |
| | | Section 8.2. Introducing the Method Invocation Arrow |
| | | Section 8.3. The Extra Parameter of Method Invocation |
| | | Section 8.4. Calling a Second Method to Simplify Things |
| | | Section 8.5. A Few Notes About @ISA |
| | | Section 8.6. Overriding the Methods |
| | | Section 8.7. Starting the Search from a Different Place |
| | | Section 8.8. The SUPER Way of Doing Things |
| | | Section 8.9. What to Do with @_ |
| | | Section 8.10. Where We Are So Far... |
| | | Section 8.11. Exercises |
|
| | Chapter 9. Objects with Data |
| | | Section 9.1. A Horse Is a Horse, of Course of Courseor Is It? |
| | | Section 9.2. Invoking an Instance Method |
| | | Section 9.3. Accessing the Instance Data |
| | | Section 9.4. How to Build a Horse |
| | | Section 9.5. Inheriting the Constructor |
| | | Section 9.6. Making a Method Work with Either Classes or Instances |
| | | Section 9.7. Adding Parameters to a Method |
| | | Section 9.8. More Interesting Instances |
| | | Section 9.9. A Horse of a Different Color |
| | | Section 9.10. Getting Your Deposit Back |
| | | Section 9.11. Don't Look Inside the Box |
| | | Section 9.12. Faster Getters and Setters |
| | | Section 9.13. Getters That Double as Setters |
| | | Section 9.14. Restricting a Method to Class-Only or Instance-Only |
| | | Section 9.15. Exercise |
|
| | Chapter 10. Object Destruction |
| | | Section 10.1. Nested Object Destruction |
| | | Section 10.2. Beating a Dead Horse |
| | | Section 10.3. Indirect Object Notation |
| | | Section 10.4. Additional Instance Variables in Subclasses |
| | | Section 10.5. Using Class Variables |
| | | Section 10.6. Weakening the Argument |
| | | Section 10.7. Exercise |
|
| | Chapter 11. Some Advanced Object Topics |
| | | Section 11.1. UNIVERSAL Methods |
| | | Section 11.2. Testing Your Objects for Good Behavior |
| | | Section 11.3. AUTOLOAD as a Last Resort |
| | | Section 11.4. Using AUTOLOAD for Accessors |
| | | Section 11.5. Creating Getters and Setters More Easily |
| | | Section 11.6. Multiple Inheritance |
| | | Section 11.7. References to Filehandles |
| | | Section 11.8. Exercise |
|
| | Chapter 12. Using Modules |
| | | Section 12.1. Sample Function-Oriented Interface: File::Basename |
| | | Section 12.2. Selecting What to Import |
| | | Section 12.3. Sample Object-Oriented Interface: File::Spec |
| | | Section 12.4. A More Typical Object-Oriented Module: Math::BigInt |
| | | Section 12.5. The Differences Between OO and Non-OO Modules |
| | | Section 12.6. What use Is Doing |
| | | Section 12.7. Setting the Path at the Right Time |
| | | Section 12.8. Importing with Exporter |
| | | Section 12.9. @EXPORT and @EXPORT_OK |
| | | Section 12.10. Exporting in a Primarily OO Module |
| | | Section 12.11. Custom Import Routines |
| | | Section 12.12. Exercise |
|
| | Chapter 13. Writing a Distribution |
| | | Section 13.1. Starting with h2xs |
| | | Section 13.2. Looking at the Templates |
| | | Section 13.3. The Prototype Module Itself |
| | | Section 13.4. Embedded Documentation |
| | | Section 13.5. Controlling the Distribution with Makefile.PL |
| | | Section 13.6. Alternate Installation Locations (PREFIX=...) |
| | | Section 13.7. Trivial make test |
| | | Section 13.8. Trivial make install |
| | | Section 13.9. Trivial make dist |
| | | Section 13.10. Using the Alternate Library Location |
| | | Section 13.11. Exercise |
|
| | Chapter 14. Essential Testing |
| | | Section 14.1. What the Test Harness Does |
| | | Section 14.2. Writing Tests with Test::Simple |
| | | Section 14.3. Writing Tests with Test::More |
| | | Section 14.4. Conditional Tests |
| | | Section 14.5. More Complex Tests (Multiple Test Scripts) |
| | | Section 14.6. Testing Things That Write to STDOUT and STDERR |
| | | Section 14.7. Exercise |
|
| | Chapter 15. Contributing to CPAN |
| | | Section 15.1. The Comprehensive Perl Archive Network |
| | | Section 15.2. Getting Prepared |
| | | Section 15.3. Preparing Your Distribution |
| | | Section 15.4. Uploading Your Distribution |
| | | Section 15.5. Announcing the Module |
| | | Section 15.6. Testing on Multiple Platforms |
| | | Section 15.7. Consider Writing an Article or Giving a Talk |
| | | Section 15.8. Exercise |
|
| | Appendix A. Answers to Exercises |
| | | Section A.1. Answers for Chapter 2 |
| | | Section A.2. Answers for Chapter 3 |
| | | Section A.3. Answers for Chapter 4 |
| | | Section A.4. Answers for Chapter 5 |
| | | Section A.5. Answer for Chapter 6 |
| | | Section A.6. Answers for Chapter 7 |
| | | Section A.7. Answers for Chapter 8 |
| | | Section A.8. Answer for Chapter 9 |
| | | Section A.9. Answer for Chapter 10 |
| | | Section A.10. Answer for Chapter 11 |
| | | Section A.11. Answer for Chapter 12 |
| | | Section A.12. Answers for Chapters 13-15 |
|
| | Colophon |
| | Index |