Intermediate Perl · PDF file Related titles Learning Perl Programming Perl Advanced Perl...

Click here to load reader

  • date post

    27-May-2020
  • Category

    Documents

  • view

    14
  • download

    0

Embed Size (px)

Transcript of Intermediate Perl · PDF file Related titles Learning Perl Programming Perl Advanced Perl...

  • Intermediate Perl

  • Other Perl resources from O’Reilly

    Related titles Learning Perl

    Programming Perl

    Advanced Perl Programming

    Perl Best Practices

    Perl Testing: A Developer’s Notebook™

    Perl CD Bookshelf

    Hacks Series Home hacks.oreilly.com is a community site for developers and power users of all stripes. Readers learn from each other as they share their favorite tips and tools for Mac OS X, Linux, Google, Windows XP, and more.

    Perl Books Resource Center

    perl.oreilly.com is a complete catalog of O’Reilly’s books on Perl and related technologies, including sample chapters and code examples.

    Perl.com is the central web site for the Perl community. It is the perfect starting place for finding out everything there is to know about Perl.

    Conferences O’Reilly brings diverse innovators together to nurture the ideas that spark revolutionary industries. We specialize in docu- menting the latest tools and systems, translating the innovator’s knowledge into useful skills for those in the trenches. Visit conferences.oreilly.com for our upcoming events.

    Safari Bookshelf (safari.oreilly.com) is the premier online refer- ence library for programmers and IT professionals. Conduct searches across more than 1,000 books. Subscribers can zero in on answers to time-critical questions in a matter of seconds. Read the books on your Bookshelf from cover to cover or sim- ply flip to the page you need. Try it today for free.

  • Intermediate Perl

    Randal L. Schwartz, brian d foy, and Tom Phoenix

    Beijing • Cambridge • Farnham • Köln • Paris • Sebastopol • Taipei • Tokyo

  • Intermediate Perl by Randal L. Schwartz, brian d foy, and Tom Phoenix

    Copyright © 2006, 2003 O’Reilly Media, Inc. All rights reserved. Printed in the United States of America.

    Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.

    O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (safari.oreilly.com). For more information, contact our corporate/institutional sales department: (800) 998-9938 or corporate@oreilly.com.

    Editors: Allison Randal and Tatiana Apandi Production Editor: Darren Kelly Copyeditor: Chris Downey Proofreader: Nancy Reinhardt

    Indexer: Angela Howard Cover Designer: Karen Montgomery Interior Designer: David Futato Illustrators: Robert Romano, Jessamyn Read,

    and Lesley Borash

    Printing History:

    June 2003: First Edition, published as Learning Perl Objects, References & Modules.

    March 2006: Second Edition.

    Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks of O’Reilly Media, Inc. Intermediate Perl, the image of an alpaca, and related trade dress are trademarks of O’Reilly Media, Inc.

    Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc. was aware of a trademark claim, the designations have been printed in caps or initial caps.

    While every precaution has been taken in the preparation of this book, the publisher and authors assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein.

    This book uses RepKover™, a durable and flexible lay-flat binding.

    ISBN-10: 0-596-10206-2

    ISBN-13: 978-0-596-10206-7

    [M] [10/07]

  • v

    Table of Contents

    Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi

    Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii

    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

  • vi | Table of Contents

    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 Scoping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 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 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Referencing a Named Subroutine 63 Anonymous Subroutines 68 Callbacks 70 Closures 70 Returning a Subroutine from a Subroutine 72

  • Table of Contents | vii

    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 Transform 93 Multi-Level Sort with the Schwartzian Transform 94 Recursively Defined Data 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 Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 If We Could Talk to the Animals... 115 Introducing the Method Invocation Arrow 117 The Extra Parameter of Method Invocation 118

  • viii | Table of Contents

    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

  • Table of Contents | ix

    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