Almost 20 years ago (nearly an 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 language that runs on practically every computing platform known to mankind, and maybe some that arenât.
Throughout its six editions, Learning Perl remained about the same size, around 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.
Randal called the first edition of this book Learning Perl Objects, References, and Modules, and we renamed its update 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 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 provided in the appendix for your reference. And, like Learning Perl, weâve developed the material in this book for use in a teaching environment.
Unless we note otherwise, everything in this book applies equally well to Perl on any platform, whether that is Unix, Linux, Windows ActivePerl from ActiveState, Strawberry Perl, or any other modern implementation of Perl. To use this book you just need to be comfortable with the material in Learning Perl and have the ambition to go further.
After you finish this book, you will have seen most of the core Perl language concepts that youâll need. The next book in the series is Mastering Perl, which focuses on applying what you already know to writing effective and robust Perl applications as well as managing the Perl software development life cycle.
At any point in your Perl career, you should also have Programming Perl, the (mostly) definitive bible of the language.
There are three major sections of this book. The first section deals with references, which are the keys to complex data structures as well as to object-oriented programming. The second section introduces objects and how Perl implements object-oriented programming. The third and last section deals with Perlâs module structure, testing, and the community infrastructure for distributing our work.
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 show new topics.
- ChapterÂ 1, Introduction
An introduction to the material.
- ChapterÂ 2, 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Â 3, Intermediate Foundations
Pick up some intermediate Perl skills youâll need for the rest of the book.
- 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 read 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, Regular Expression References
Compile regular expressions without immediately applying them, and use them as building blocks for larger patterns.
- ChapterÂ 10, Practical Reference Tricks
Sorting complex operations, the Schwartzian Transform, and working with recursively defined data.
- ChapterÂ 11, Building Larger Programs
Build larger programs by separating code into separate files and namespaces.
- ChapterÂ 12, Creating Your Own Perl Distribution
Create a Perl distribution as your first step toward object-oriented programming.
- ChapterÂ 13, Introduction to Objects
Work with classes, method calls, inheritance, and overriding.
- ChapterÂ 14, Introduction to Testing
Start to test your modules so you find problems with the code as you create it.
- ChapterÂ 15, Objects with Data
Add per instance data, including constructors, getters, and setters.
- ChapterÂ 16, Some Advanced Object Topics
Use multiple inheritance, automatic methods, and references to filehandles.
- ChapterÂ 17, Exporter
useworks, how we can decide what to export, and how we can create our own import routines.
- ChapterÂ 18, Object Destruction
Add behavior to an object that is going away, including object persistence.
- ChapterÂ 19, Introduction to Moose
Moose is an object framework available on CPAN.
- ChapterÂ 20, Advanced Testing
Test complex aspects of code and metacode things such as documentation and test coverage.
- ChapterÂ 21, Contributing to CPAN
Share your work with the world by uploading it to CPAN.
- AppendixÂ A, Exercise Answers
Where to go to get answers.
The following typographic conventions are used in this book:
Used for function names, module names, filenames, environment variables, code snippets, and other literal text
Used for emphasis and for new terms where they are defined
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 us 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 2012 Randal L. Schwartz, brian d foy, and Tom Phoenix, 978-1-449-39309-0.â
If you feel your use of code examples falls outside fair use or the permission given above, feel free to contact us at email@example.com.
Technology professionals, software developers, web designers, and business and creative professionals use Safari Books Online as their primary resource for research, problem solving, learning, and certification training.
Safari Books Online offers a range of product mixes and pricing programs for organizations, government agencies, and individuals. Subscribers have access to thousands of books, training videos, and prepublication manuscripts in one fully searchable database from publishers like OâReilly Media, Prentice Hall Professional, Addison-Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Focal Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders, McGraw-Hill, Jones & Bartlett, Course Technology, and dozens more. For more information about Safari Books Online, please visit us online.
Please address comments and questions concerning this book to the publisher:
|OâReilly Media, Inc.|
|1005 Gravenstein Highway North|
|Sebastopol, CA 95472|
|800-998-9938 (in the United States or Canada)|
|707-829-0515 (international or local)|
We have a web page for this book where we list errata, examples, and any additional information. You can access this page at:
To comment or ask technical questions about this book, send an email to:
For more information about our books, courses, conferences, and news, see our website at http://www.oreilly.com.
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
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 playoffs, 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 space, 500 times more memory, and a 200-times-faster CPU running a real Unix-based operating system (OS X) instead of the limited MacOS. 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 the hospitality.
Like the previous editions 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 and 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 onsite 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 that 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 (Addison-Wesley Professional), 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 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 brian d foy, who shepherded this book into its second revision, and wrote most of the changes between the previous edition and this edition.
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 20 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.
The most thanks has to go to the Perl community, the wonderfully rich and diverse group of people who have made it a pleasure to work with the language and make the tools, websites, and modules that make Perl so useful. Many people have contributed indirectly to this book through my other work and discussions with them. There are too many to list, but if youâve ever done anything with Perl with me, thereâs probably a little of you in this book.
From Tom. First of all, thanks to the entire team at OâReilly for helping us to bring this book to fruition.
Thanks to my Stonehenge coworkers and the students Iâve worked with over the years, and the people Iâve assisted on Usenet. Your ideas and suggestions have greatly improved this material.
Especially deep thanks to my coauthor Randal for giving me freedom to explore teaching this material in varied ways.
To my wife Jenna Padbury, thanks for being a cat person, and everything thereafter.
From all of us. Thanks to our
reviewers for providing comments on the draft of this book. Tom
Christiansen did an amazing job not only correcting every technical
problem he found, but also improving our writing quite a bit. This book is
much better for it. David Golden, a fellow PAUSE admin and CPAN toolchain
hacker, helped quite a bit in straightening out the details of the module
release process. Several of the Moose crowd, including Stevan Little,
Curtis âOvidâ Poe, and Jesse Luehrs, kindly helped with that chapter.
Sawyer X, the current maintainer of
Module::Starter, helped tremendously as we developed those parts of the
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.