Perl: Cryptic Power
Perl is, let's face it, a programming language for people who
know programming. It's extremely different from PHP: you can't
really just pick it up and use it. Perl bears a lot of
resemblance to C and Unix shell scripts, if that means anything
to you - if it doesn't, you should probably steer clear of Perl.
If you're a reasonably experienced programmer who knows C and
you're looking to move onto the web, though, Perl will be a
great fit for you.
Perl's Values
To understand Perl, you have to understand why it is the way it
is. There are two phrases that sum up the Perl philosophy: the
first is "there's more than one way to do it", and the second is
"easy things should be easy, and hard things should be
possible". It's disputable whether Perl makes easy things easy,
but hard things are certainly possible, and there's more than
one way to do them. If that's the kind of language you're after,
Perl is for you.
Perl is a free language, and is closely tied to the wider open
source movement. This means that you will be able to find the
source code to lots of useful scripts that have already been
written, and take them apart to see how they work.
Unfortunately, though, you might find that easier said that done
- trying to understand Perl scripts written by other people can
be very, very difficult, and that's one of the biggest
criticisms of the language.
Why Use Perl?
Perl's strength, though, (as well as its most difficult element)
is that most things you'll do with the language will be done
using regular expressions (known as regexps for short). This is
what gives Perl its powerful abilities to manipulate text, and
make it good for complicated web pages.
The trouble with regexps, though, is that they look like
complete nonsense to the uninitiated. All the unusual characters
on the keyboard have different meanings, like this:
| - Or. For example, me|you matches 'me' or 'you'.
? - Any one character (or no character), so per? matches 'perl',
'perk' or 'per', but not 'perks'.
* - Any number of characters.
( ) - Separate one lot of syntax from another. For example, you
could write h(e|a)??o to match both 'hello' and 'halo'.
[ ] - Matches specific characters and ranges of characters. For
example, [a-z] means any lowercase letter from a to z, but no
capital letters.
There are many, many more: Wikipedia has a good reference at
http://en.wikipedia.org/wiki/Regular_expression.
Once you understand them, regexps let you do complicated things
to text. One good example use is taking text that isn't HTML,
and writing a set of rules to turn it into HTML intelligently.
Regexps can also be used to validate data, such as this one that
matches a valid email address:
[A-Za-z0-9]+@[A-Za-z0-9]+\.[A-Za-z]{2,4}
Can you see why people say they're complicated? This one means
says that an email address must consist of any number of
characters between A to Z or 0 to 9, followed by an @, then the
same again, followed by a dot, and then 2-4 characters that must
be between A and Z, but not a number. Confused? I was writing
it. Most people writing regexps write ones that aren't perfect,
and need to be improved before they will work every time. If you
can practice and master them, though, they give you a lot of
power.
Doesn't PHP Have Regexps?
Well, yes, it does now - they were added by people who wanted to
make PHP as useful as Perl is. However, PHP's regexps aren't
integrated with the language in the same way as Perl's are.
What Else Can Perl Do?
Perl has all the standard features of object-oriented
programming languages: classes, functions, variables, and the
rest. One area where Perl is unusual, though, is that it has a
very large library of user-contributed functions that can be
installed as 'modules'. These modules can be downloaded from
CPAN (the Comprehensive Perl Archive Network) at www.cpan.org.
Whatever it is you want to do, the chances are you'll find a
choice of modules there that can do it - there are hundreds of
modules for HTML alone, if you take some time to explore.