A comprehensive treatment of the development of applications that
deliver dynamic content on the World-Wide Web. All the important
issues are discussed, including simple forms, SQL database access,
concurrency issues, and authentication, cryptography, and security.

An introduction to Perl for programmers who already have
experience with other languages. This class covers all of Perl's
major language features: Scalars, arrays, and hashes; files and
filehandles; control structures; and important built-in functions.
The three-day version covers references, complex data structures,
and DBI, the Perl interface to SQL databases.

(Advanced Programming Techniques for Perl)

(Why Perl is Better than Those Other Languages)

(Stolen Secrets of the Wizards of the Ivory Tower)

One of Perl's most valuable (but least-used) features is the ability
to use functions as if they were data: to pass functions as arguments
to other functions, and to write functions that construct and return
new functions on request. This feature is the basis of many
widely-used techniques, such as callbacks, and also some techniques
that aren't as widely-used, but should be.

(Strategies for Lightweight Databases)

Perl provides two extremely inexpensive and simple solutions to data
retrieval: Flat text files and DBM files. We'll examine the
principles, programming, and tradeoffs of both techniques, and take a
detailed look at the best modules for managing files of both kinds.

(Benchmarking, Profiling, and Performance Tuning)

Almost every application must eventually be made to run faster.
Performance tuning of applications has long been a dark art,
successfully practiced by very few. This class will bring it into the
light and show you how. We will investigate tools, strategies, and
philosophies, all aimed at making programs faster with as little
effort as possible.

This introduction to scalable programming covers in Perl all basic
principles of OOP including discussing classes, objects, methods,
single and multiple inheritance, and Perl syntax for these. The class
also includes sections on object-oriented design and more specialized
topics such as autoloading and conditional loading of modules.

It's hard to write great code, but it doesn't have to be hard to write
good code. 'Red flags' are easy-to-see signs that you have an easy
opportunity to make your code better. I'll show many red flags in
real programs I've gathered and show easy ways to make these programs
smaller, faster, and simpler to understand.

Almost everyone has written a regex that didn't behave as expected.
This class will fix that. We'll take a detailed look at Perl's regex
matching algorithm and learn how to predict what it will do and how
long it will take. This session will demystify regular expressions.

Everyone loves filehandles because they let you get data from a file a
bit at a time, as you need it. In this class we'll examine this
'iterator' technique in detail, and see how it can cut the size of
complex database lookup and web spidering modules by fifty percent.

(Perl Tricks and Programming Technique)

This class will explore Perl's most unusual features: Globs, tie,
AUTOLOAD, and source filters. We'll look at modules that use these
features, written by famous wizards like Tom Christiansen, Damian
Conway, and Larry Wall, and learn what they're for and how they work.

(Security with Apache)

CGI applications, mod_perl, servlets, and other generators of
dynamic web content represent an enormous security threat, one that
would not even have been considered by competent system administrators
of the 1980's. This class will examine the most important classes of
web-based security threats and discuss responses to them. It
exhaustively examines Perl's unique `tainting' feature which can
detect many security errors before they can cause any harm.

Multiprecision calculations are usually done with "synthetic
numerals": long strings of decimal or binary digits. Continued
fractions are a fascinating alternative that are preferable in many
ways; for example, unlike synthetic numerals, continued fractions can
represent all rational numbers finitely. In this talk, I explain what
continued fractions are and how to calculate with them.

A short history of type systems, and an introduction to Haskell's
advanced type inference, with a stunning final example in which
Haskell's type checker detected an infinite loop error at compile
time.

The "design patterns" movement in software claims to have been
inspired by the works of architect Christopher Alexander. But an
examination of Alexander's books reveals that he was actually talking
about something much more interesting.

Readers are cautioned that these slides were not originally
intended for distribution on the web; they were written to accompany a
five minute long talk given at Yet
Another Perl Conference. They should not, therefore, be taken as
a complete or well-reasoned presentation of my thoughts on this matter.

This talk is too short to tell you all about how the Perl regex
engine works---that would take years, and cost millions of lives.
Instead, I'll do three very brief case studies of how it handles
certain specific features. You've probably always suspected that the
Perl regex engine concealed filthy secrets and nasty surprises;
these three features are noteworthy for being particularly
disgusting.

Barf bags will be provided.

Mark-Jason Dominus wrote the back-end of ActiveState's regex debugger.
He is presently recuperating at the Miskatonic University Hospital in
Whately, Massachusetts.

I discuss the value of functional programming techniques,
with particular attention to the value that they provide to
the great proletariat of the programming community. I also talk
about the support that Perl provides for those techniques, and
the support that it fails to provide, and I'll contrast this
support with that of similar languages, such as Python.

I gave this bizarre talk at TPC 2001 in San Diego. The title backfired:
Too many people didn't know what the identity function was, and those
who did know assumed that I must have been referring to something
else.

The identity function is a function such as sub identity {
return $_[0] } which returns its argument unchanged. In this
talk, I show four unexpectedly useful uses for the identity function.

(How to write a 163 line program to compute 1+1)

The lambda-calculus is an abstract model of computation, used to
investigate fundamental questions of what can be computed and how. It
is in some ways the simplest possible model of a programming language.
A certain subset of Perl is essentially identical to the lambda
calculus, so one can investigate the lambda calculus by merely writing
programs in Perl.

Moonpig is an innovative billing and accounting system that Rik
Signes and I worked on between 2010 and 2012. This talk is about some
of the non-obvious technical choices we made that made Moonpig a
success.

(History of a major mistake)

In 1998 work started on a Perl feature called “pseudohashes”, a major
reworking of the way Perl represented objects. This work was a
complete failure, and after ten years it was removed again. What went wrong, and why?

At a PHL.pm meeting, Walt
Mankowski gave a talk about an occasion when the Memoize
module didn't work for him---it made his program slower instead of
faster. I gave this complementary talk explaining why.

(Strong Typing Doesn't Have to Suck)

Many people I know in the Perl community have concluded that strict,
compile-time type checking is a failed idea, and that Perl's flexible,
dynamic approach is more successful. But these people are basing
their conclusion on an idea of strong type checking that is thirty
years out of date. Modern type checking systems are not only
powerful, but helpful, clever, and convenient.

(The Unix Process Model)

This talk is a revised version of Internals of Familiar Unix
Commands, extended to have more Perl content. It is about
the Unix process model and the semantics of the fork and
exec calls, with code examples in Perl.

There is a surprising correspondence between computability theory
and classical topology. Computability is continuity, open sets are
recursively enumerable, spaces are Hausdorff if they admit a definable
≠ operation, and a set over which one can universally quantify is
compact. The natural numbers, being non-compact, can't be exhaustively
searched: given a predicate p you can't guarantee to find a
number n for which p(n) is true—there might not
be one, and so your search might continue forever. But the naturals
can be embedded in a compact set that can be exhaustively
searched. Since this larger type can be modeled on the computer, I
will present a simple computer program which, given any predicate
p, either locates an n for which p(n) is
true, or correctly asserts that no such n exists.

My Memoize module was very successful. As is usual with
successful software projects, everyone wanted to change it. Users
wrote in with requests for all sorts of new features, sometimes with
patches. But every new feature makes the module a little bigger and a
little slower, and after you put in twenty patches that make the
module 5% bigger and slower, you have a big bloated slow monster. That
is bad for any module, and it is especially bad for Memoize
because the whole point of Memoize is that it is supposed to
make your program faster.

So how to accomodate these folks' desire for features without
making everyone else pay the price?

Of all the many parts of Unix, the inode is the thing that makes Unix
most like Unix, because Unix is all about files, and the inode is the
filesystem data structure that represents a file. This talk takes the
output of ls -l as a jumping-off point to discuss the inode
and how the kernel uses it for essential operations such as
permissions checking, reading and writing files, and the Unix
rm and chmod commands.