Perl Advanced Techniques Handbook

Idea of the Book

My book will be about functional programming techniques in Perl. It's about how to write functions that can modify and manufacture other functions.

Why would you want to do that? Because that way your code is more flexible and more reusable. Instead of writing ten similar functions, you write a general pattern or framework that can generate the functions you want; then you generate just the functions you need according to the pattern. The program doesn't need to know in advance which functions are necessary; it can generate them as needed. Instead of writing the complete program yourself, you get the computer to write it for you.


Less Tentative Outline

Since drafts of chapters 1-9 are ready, these are the outlines for the current, existing drafts. They may change, but probably not too much. Chapter 10, Object Oriented Programming, is in progress. You can track its progress by visiting this page, which is updated frequently.

  1. Recursion
  2. Dispatch Tables
  3. Caching, Memoization, and Lazy Computation
  4. Iterators
  5. Conversion of Expensive Functions to Iterators
  6. Streams and Infinite Lists
  7. Higher-Order Functions
  8. (Merged with 7)
  9. Parsing
  10. Object Oriented Programming
  11. (Probably merged with 10)
  12. Constraint Systems

More Tentative Outline

The rest of the outline is more tentative, because I haven't written this part of the book yet. According to the outline in my proposal, I will cover:

  1. Object-oriented programming
    1. Closures as objects
    2. Iterators
    3. Perl data encapsulation problem and solution
    4. Object demonstration
    5. Abstraction
    6. Typed numbers a la SICP
    7. Type hierarchies
  2. Building our own object-oriented programming system
    1. Private methods
    2. Inherited data
    3. Classless OOP system
    4. Different multiple-inheritance semantics
  3. Constraint systems
  4. Control flow
    1. Coroutines
    2. Callbacks
    3. Continuations

After the proposal was accepted, I got worried that I needed more realistic examples. The current chapters of the book do better in this regard than the preliminary outline that you see above. For example, there is extensive discussion of HTML parsing techniques. Chapter IV concludes with an improved replacement for the WWW::SimpleRobot module, with better functionality in one-third the code, and also contains a basic database query system that searches an HTTP log file backwards, delivering the most recent records first. Chapter VI discusses the frequently asked question of how to generate a list of all the strings that will match a given regex and provides an astonishingly simple solution. Chapter XII will present a complete constraint-based diagram-drawing system.


PATH will be free

My contract says that once the book is published I will distribute the complete text from my web site. The content of my book will be available to everyone everywhere for free. Watch this space for updates.

About the Title

Once published, the title of the book will probably not be "Perl Advanced Techniques Handbook". That's just the working title, the best thing I've been able to come up with so far. If you have a suggestion, please send me mail.


Low-Volume Announcement Mailing List

I send occasional updates and progress reports to a mailing list. The mailing list is extremely low-volume---it is not a discussion list. Typically, I send a message when I finish a chapter or when something else important happens. I expect total traffic over the entire life of the mailing list to be less than twenty messages.

Subscribers to the mailing list get to see draft chapters, course materials related to the book, and other goodies.

To subscribe, send mail to mjd-book-subscribe@plover.com or submit this form:

Your email address:

An archive of mailing list traffic is available.


Return to: Universe of Discourse main page | What's new page | Perl Paraphernalia

mjd-perl-path+@plover.com

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.