Preface

Over a decade ago (nearly eternity in Internet Time), Randal Schwartz wrote the first edition of Learning Perl. In the intervening years, Perl itself has grown substantially from a “cool” scripting language used primarily by Unix system administrators to a robust object-oriented programming (OOP) language that runs on practically every computing platform known to mankind.

Throughout its four editions, Learning Perl remained the same size (about 300 pages) and continued to cover much of the same material to remain compact and accessible to the beginning programmer. But there is much more to learn about Perl now than when that first book was written.

Randal called the first edition of this book Learning Perl Objects, References, and Modules, and now it’s Intermediate Perl, but we like to think of it as just Learning More Perl.[*] This is the book that picks up where Learning Perl leaves off. We show you how to use Perl to write larger programs.

As in Learning Perl, we designed each chapter to be small enough to read in just an hour or so. Each chapter ends with a series of exercises to help you practice what you’ve just learned, and the answers are in the appendix for your reference. And like Learning Perl, we’ve developed the material in this book for a teaching environment and used it in that setting, including for our own use at Stonehenge Consulting Services, as we conduct on-site and open-enrollment trainings.

You don’t have to be a Unix guru, or even a Unix user, to benefit from this book. Unless otherwise noted, everything in this book applies equally well to Windows ActivePerl from ActiveState and all other modern implementations of Perl. To use this book, you just need to be familiar with the material in Learning Perl and have the ambition to go further.

Structure of This Book

You should read this book from front to back, stopping to do the exercises. Each chapter builds on preceding chapters, and we’ll assume that you know the material from those chapters as we discuss new topics.

Chapter 1, Introduction

An introduction to the material.

Chapter 2, Intermediate Foundations

Pick up some intermediate Perl skills you’ll need for the rest of the book.

Chapter 3, Using Modules

Use Perl’s core modules, as well as modules from other people. We’re going to show you how to create your own modules later in the book, but until we do, you can still use modules you already have.

Chapter 4, Introduction to References

Introduce a level of redirection to allow the same code to operate on different sets of data.

Chapter 5, References and Scoping

Learn how Perl manages to keep track of pointers to data, and an introduction to anonymous data structures and autovivification.

Chapter 6, Manipulating Complex Data Structures

Create, access, and print arbitrarily deep and nested data structures, including arrays of arrays and hashes of hashes.

Chapter 7, Subroutine References

Capture behavior as an anonymous subroutine that you create dynamically and execute later.

Chapter 8, Filehandle References

Store filehandles in scalar variables that you can easily pass around your program or store in data structures.

Chapter 9, Practical Reference Tricks

Sorting complex operations, the Schwartzian Transform, and working with recursively defined data.

Chapter 10, Building Larger Programs

Build larger programs by separating code into separate files and namespaces.

Chapter 11, Introduction to Objects

Work with classes, method calls, inheritance, and overriding.

Chapter 12, Objects with Data

Add per-instance data, including constructors, getters, and setters.

Chapter 13, Object Destruction

Add behavior to an object that is going away, including object persistence.

Chapter 14, Some Advanced Object Topics

Use multiple inheritance, automatic methods, and references to filehandles.

Chapter 15, Exporter

How use works, how we can decide what to export, and how we can create our own import routines.

Chapter 16, Writing a Distribution

Package a module for sharing, including portable installation instructions.

Chapter 17, Essential Testing

Test your code to ensure it does what you want it to do.

Chapter 18, Advanced Testing

Test complex aspects of code and meta-code things such as documentation and test coverage.

Chapter 19, Contributing to CPAN

Share your work with the world by uploading it to CPAN.

Appendix, Answers to Exercises

Where to go to get answers.

Conventions Used in This Book

The following typographic conventions are used in this book:

Constant width

Used for function names, module names, filenames, environment variables, code snippets, and other literal text

Italics

Used for emphasis and for new terms where they are defined

Using Code Examples

This book is here to help you get your job done. In general, you may use the code in this book in your programs and documentation. You do not need to contact O’Reilly for permission unless you’re reproducing a significant portion of the code. For example, writing a program that uses several chunks of code from this book does not require permission. Selling or distributing a CD-ROM of examples from O’Reilly books does require permission. Answering a question by citing this book and quoting example code does not require permission. Incorporating a significant amount of example code from this book into your product’s documentation does require permission.

We appreciate, but do not require, attribution. An attribution usually includes the title, author, publisher, and ISBN. For example: Intermediate Perl, by Randal L. Schwartz, brian d foy, and Tom Phoenix. Copyright 2006 O’Reilly Media, Inc., 0-596-10206-2.

If you feel your use of code examples falls outside fair use or the permission given above, feel free to contact us at .

Comments and Questions

Please address comments and questions concerning this book to the publisher:

O’Reilly Media
1005 Gravenstein Highway North
Sebastopol, CA 95472
(800) 998-9938 (in the United States or Canada)
(707) 829-0515 (international/local)
(707) 829-0104 (fax)

The web page for this book, which lists errata, examples, or any additional information, can be found at:

http://www.oreilly.com/catalog/intermediateperl

To comment or ask technical questions about this book, send email to:

For more information about books, conferences, Resource Centers, and the O’Reilly Network, see the O’Reilly web site at:

http://www.oreilly.com

Safari® Enabled

When you see a Safari® Enabled icon on the cover of your favorite technology book, it means the book is available online through the O’Reilly Network Safari Bookshelf. Safari offers a solution that’s better than e-books. It’s a virtual library that lets you easily search thousands of top technology books, cut and paste code samples, download chapters, and find quick answers when you need the most accurate, current information. Try it for free at http://safari.oreilly.com.

Acknowledgments

From Randal. In the preface of the first edition of Learning Perl, I acknowledged the Beaverton McMenamin’s Cedar Hills Pub[*] just down the street from my house for the “rent-free booth-office space” while I wrote most of the draft on my Powerbook 140. Well, like wearing your lucky socks every day when your favorite team is in the play-offs, I wrote nearly all of this book (including these words) at the same brewpub, in hopes that the light of success of the first book will shine on me twice. (As I update this preface for the second edition, I can see that my lucky socks do indeed work!)

This McM’s has the same great local microbrew beer and greasy sandwiches, but they’ve gotten rid of my favorite pizza bread, replacing it with new items like marionberry cobbler (a local treat) and spicy jambalaya. (And they added two booths and put in some pool tables.) Also, instead of the Powerbook 140, I’m using a Titanium Powerbook, with 1,000 times more disk, 500 times more memory, and a 200-times-faster CPU running a real Unix-based operating system (OS X) instead of the limited Mac OS. I also uploaded all of the draft sections (including this one) over my 144K cell-phone modem and emailed them directly to the reviewers, instead of having to wait to rush home to my 9600-baud external modem and phone line. How times have changed!

So, thanks once again to the staff of the McMenamin’s Cedar Hills Pub for the booth space and hospitality.

Like the fourth edition of Learning Perl, I also owe much of what I’m saying here and how I’m saying it to the students of Stonehenge Consulting Services, who have given me immediate, precise feedback (by their glazed eyes and awkwardly constructed questions) when I was exceeding the “huh?” factor threshold. With that feedback over many dozens of presentations, I was able to keep refining and refactoring the materials that paved the way for this book.

Speaking of which, those materials started as a half-day “What’s new in Perl 5?” summary commissioned by Margie Levine of Silicon Graphics, in addition to my frequently presented on-site, four-day Llama course (targeted primarily for Perl Version 4 at the time). Eventually, I got the idea to beef up those notes into a full course and enlisted fellow Stonehenge presenter Joseph Hall for the task. (He’s the one who selected the universe from which the examples are drawn.) Joseph developed a two-day course for Stonehenge in parallel with his excellent Effective Perl Programming book, which we then used as the course textbook (until now).

Other Stonehenge instructors have also dabbled a bit in the “Packages, References, Objects, and Modules” course over the years, including Chip Salzenberg and Tad McClellan. But the bulk of the recent changes have been the responsibility of my senior trainer, Tom Phoenix, who has been “Stonehenge employee of the month” so often that I may have to finally give up my preferred parking space. Tom manages the materials (just as Tad manages operations) so I can focus on being the president and the janitor of Stonehenge.

Tom Phoenix contributed most exercises in this book and a timely set of review notes during my writing process, including entire paragraphs for me to just insert in place of the drivel I had written. We work well as a team, both in the classroom and in our joint writing efforts. It is for this effort that we’ve acknowledged Tom as a coauthor, but I’ll take direct blame for any parts of the book you end up hating: none of that could have possibly been Tom’s fault.

And last but not least, a special thanks to my business partner, brian d foy, who herded this book into its second revision and wrote most of the changes between the previous edition and this edition.

Of course, a book is nothing without a subject and a distribution channel, and for that I must acknowledge longtime associates Larry Wall and Tim O’Reilly. Thanks, guys, for creating an industry that has paid for my essentials, discretionary purchases, and dreams for nearly 15 years.

And, as always, a special thanks to Lyle and Jack for teaching me nearly everything I know about writing and convincing me that I was much more than a programmer who might learn to write: I was also a writer who happened to know how to program. Thank you.

And to you, the reader of this book, for whom I toiled away the countless hours while sipping a cold microbrew and scarfing down a piece of incredible cheesecake, trying to avoid spilling on my laptop keyboard: thank you for reading what I’ve written. I sincerely hope I’ve contributed (in at least a small way) to your Perl proficiency. If you ever meet me on the street, please say “Hi.”[*] I’d like that. Thank you.

From brian. I have to thank Randal first, since I learned Perl from the first edition of Learning Perl, and learned the rest teaching the Llama and Alpaca courses for Stonehenge Consulting. Teaching is often the best way to learn.

I convinced Randal that we should update Learning Perl, and when we got done with that, I told him it was time to update this book. Our editor, Allison Randal, agreed and did the best she could to keep us on schedule.

Special non-Perl thanks to Stacey, Buster, Mimi, Roscoe, Amelia, Lila, and everyone else who tried to distract me while I was busy but still talked to me, even though I couldn’t come out to play.

From Both of Us. Thanks to our reviewers, David H. Adler, Stephen Jenkins, Kevin Meltzer, Matthew Musgrove, Andrew Savige, and Ricardo Signes, for providing comments on the draft of this book.

Thanks also to our many students who have let us know what parts of the course material have needed improvement over the years. It’s because of you that we’re all so proud of it today.

Thanks to the many Perl Mongers who have made us feel at home as we’ve visited your cities. Let’s do it again sometime.

And finally, our sincerest thanks to our friend Larry Wall, for having the wisdom to share his really cool and powerful toys with the rest of the world so that we can all get our work done just a little bit faster, easier, and with more fun.



[*] Don’t ask why it isn’t called that. We must have had 300 emails on the subject. Okay, ask, since we know you’re going to anyway. You never really stop learning Perl, so Learning More Perl doesn’t really tell you much about the book. Our editor chose the name, which tells you what to expect.

[*] And yes, you can ask a Perl question at the same time. I don’t mind.

Get Intermediate Perl now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.