Of course, if your job is programming, you can get your job done with any “complete” computer language, theoretically speaking. But we know from experience that computer languages differ not so much in what they make possible, but in what they make easy. At one extreme, the so-called “fourth generation languages” make it easy to do some things, but nearly impossible to do other things. At the other extreme, so-called “industrial-strength” languages make it equally difficult to do almost everything.
Perl is different. In a nutshell, Perl is designed to make the easy jobs easy, without making the hard jobs impossible.
And what are these “easy jobs” that ought to be easy? The ones you do every day, of course. You want a language that makes it easy to manipulate numbers and text, files and directories, computers and networks, and especially programs. It should be easy to run external programs and scan their output for interesting tidbits. It should be easy to send those same tidbits off to other programs that can do special things with them. It should be easy to develop, modify, and debug your own programs, too. And, of course, it should be easy to compile and run your programs, and do it portably, on any modern operating system.
Perl does all that, and a whole lot more.
Initially designed as a glue language for Unix, Perl has long since
spread to most other operating systems. Because it runs nearly everywhere,
Perl is one of the most portable programming environments available today.
To program C or C++ portably, you have to put in all those strange
#ifdef markings for different operating
systems. To program Java portably, you have to understand the
idiosyncrasies of each new Java implementation. To program a shell script
portably, you have to remember the syntax for each operating system’s
version of each command, and somehow find the common factor that (you
hope) works everywhere. And to program Visual Basic portably, you just
need a more flexible definition of the word “portable”.
Perl happily avoids such problems while retaining many of the benefits of these other languages, with some additional magic of its own. Perl’s magic comes from many sources: the utility of its feature set, the inventiveness of the Perl community, and the exuberance of the open source movement in general. But much of this magic is simply hybrid vigor; Perl has a mixed heritage, and has always viewed diversity as a strength rather than a weakness. Perl is a “give me your tired, your poor” language. If you feel like a huddled mass longing to be free, then Perl is for you.
Perl reaches out across cultures. Much of the explosive growth of Perl was fueled by the hankerings of former Unix systems programmers who wanted to take along with them as much of the “old country” as they could. For them, Perl is the portable distillation of Unix culture, an oasis in the wilderness of “can’t get there from here”. On the other hand, it also works in the other direction: Windows-based web designers are often delighted to discover that they can take their Perl programs and run them unchanged on the company’s Unix servers.
Although Perl is especially popular with systems programmers and web developers, that’s just because they discovered it first; Perl appeals to a much broader audience. From its small start as a text-processing language, Perl has grown into a sophisticated, general-purpose programming language with a rich software development environment complete with debuggers, profilers, cross-referencers, compilers, libraries, syntax-directed editors, and all the rest of the trappings of a “real” programming language—if you want them. But those are all about making hard things possible; and lots of languages can do that. Perl is unique in that it never lost its vision for keeping easy things easy.
Because Perl is both powerful and accessible, it is being used daily in every imaginable field, from aerospace engineering to molecular biology, from mathematics to linguistics, from graphics to document processing, from database manipulation to client-server network management. Perl is used by people who are desperate to analyze or convert lots of data quickly, whether you’re talking DNA sequences, web pages, or pork belly futures.
There are many reasons for the success of Perl. Perl was a successful open source project long before the open source movement got its name. Perl is free, and it will always be free. You can use Perl however you see fit, subject only to a very liberal licensing policy. If you are in business and want to use Perl, go right ahead. You can embed Perl in the commercial applications you write without fee or restriction. And if you have a problem that the Perl community can’t fix, you have the ultimate backstop: the source code itself. The Perl community is not in the business of renting you their trade secrets in the guise of “upgrades”. The Perl community will never “go out of business” and leave you with an orphaned product.
It certainly helps that Perl is free software. But that’s not enough to explain the Perl phenomenon, since many freeware packages fail to thrive. Perl is not just free; it’s also fun. People feel like they can be creative in Perl, because they have freedom of expression: they get to choose what to optimize for, whether that’s computer speed or programmer speed, verbosity or conciseness, readability or maintainability or reusability or portability or learnability or teachability. You can even optimize for obscurity, if you’re entering an Obfuscated Perl Contest.
Perl can give you all these degrees of freedom because it’s a language with a split personality. It’s simultaneously a very simple language and a very rich language. Perl has taken good ideas from nearly everywhere, and installed them into an easy-to-use mental framework. To those who merely like it, Perl is the Practical Extraction and Report Language. To those who love it, Perl is the Pathologically Eclectic Rubbish Lister. And to the minimalists in the crowd, Perl seems like a pointless exercise in redundancy. But that’s okay. The world needs a few reductionists (mainly as physicists). Reductionists like to take things apart. The rest of us are just trying to get it together.
There are many ways in which Perl is a simple language. You don’t have to know many special incantations to compile a Perl program—you can just execute it like a batch file or shell script. The types and structures used by Perl are easy to use and understand. Perl doesn’t impose arbitrary limitations on your data—your strings and arrays can grow as large as they like (so long as you have memory), and they’re designed to scale well as they grow. Instead of forcing you to learn new syntax and semantics, Perl borrows heavily from other languages you may already be familiar with (such as C, and awk, and BASIC, and Python, and English, and Greek). In fact, just about any programmer can read a well-written piece of Perl code and have some idea of what it does.
Most important, you don’t have to know everything there is to know about Perl before you can write useful programs. You can learn Perl “small end first”. You can program in Perl Baby-Talk, and we promise not to laugh. Or more precisely, we promise not to laugh any more than we’d giggle at a child’s creative way of putting things. Many of the ideas in Perl are borrowed from natural language, and one of the best ideas is that it’s okay to use a subset of the language as long as you get your point across. Any level of language proficiency is acceptable in Perl culture. We won’t send the language police after you. A Perl script is “correct” if it gets the job done before your boss fires you.
Though simple in many ways, Perl is also a rich language, and there is much to be learned about it. That’s the price of making hard things possible. Although it will take some time for you to absorb all that Perl can do, you will be glad to have access to Perl’s extensive capabilities when the time comes that you need them.
Because of its heritage, Perl was a rich language even when it was “just” a data-reduction language designed for navigating files, scanning large amounts of text, creating and obtaining dynamic data, and printing easily formatted reports based on that data. But somewhere along the line, Perl started to blossom. It also became a language for filesystem manipulation, process management, database administration, client-server programming, secure programming, Web-based information management, and even for object-oriented and functional programming. These capabilities were not just slapped onto the side of Perl—each new capability works synergistically with the others, because Perl was designed to be a glue language from the start.
But Perl can glue together more than its own features. Perl is designed to be modularly extensible. Perl allows you to rapidly design, program, debug, and deploy applications, and it also allows you to easily extend the functionality of these applications as the need arises. You can embed Perl in other languages, and you can embed other languages in Perl. Through the module importation mechanism, you can use these external definitions as if they were built-in features of Perl. Object-oriented external libraries retain their object-orientedness in Perl.
Perl helps you in other ways, too. Unlike a strictly interpreted language such as command files or shell scripts, which compile and execute a program one command at a time, Perl first compiles your whole program quickly into an intermediate format. Like any other compiler, it performs various optimizations, and gives you instant feedback on everything from syntax and semantic errors to library binding mishaps. Once Perl’s compiler frontend is happy with your program, it passes off the intermediate code to the interpreter to execute (or optionally to any of several modular backends that can emit C or bytecode). This all sounds complicated, but the compiler and interpreter are quite efficient, and most of us find that the typical compile-run-fix cycle is measured in mere seconds. Together with Perl’s many fail-soft characteristics, this quick turnaround capability makes Perl a language in which you really can do rapid prototyping. Then later, as your program matures, you can tighten the screws on yourself, and make yourself program with less flair but more discipline. Perl helps you with that, too, if you ask nicely.
Perl also helps you to write programs more securely. In addition to all the typical security interfaces provided by other languages, Perl also guards against accidental security errors through a unique data tracing mechanism that automatically determines which data came from insecure sources and prevents dangerous operations before they can happen. Finally, Perl lets you set up specially protected compartments in which you can safely execute Perl code of dubious origin, masking out dangerous operations.
But, paradoxically, the way in which Perl helps you the most has almost nothing to do with Perl, and everything to do with the people who use Perl. Perl folks are, frankly, some of the most helpful folks on earth. If there’s a religious quality to the Perl movement, then this is at the heart of it. Larry wanted the Perl community to function like a little bit of heaven, and by and large he seems to have gotten his wish, so far. Please do your part to keep it that way.
Whether you are learning Perl because you want to save the world, or just because you are curious, or because your boss told you to, this handbook will lead you through both the basics and the intricacies. And although we don’t intend to teach you how to program, the perceptive reader will pick up some of the art, and a little of the science, of programming. We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris. Along the way, we hope you find the book mildly amusing in some spots (and wildly amusing in others). And if none of this is enough to keep you awake, just keep reminding yourself that learning Perl will increase the value of your resume. So keep reading.