Practical Extraction and Report Language.
Perl is a language optimized for scanning arbitrary text
files, extracting information from those text files, and
printing reports based on that information. It's also a
good language for many system management tasks. The
language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal).
Created by Larry Wall. Only perl can parse Perl.

The Pathetically Eclectic Rubbish Lister is a quirky and downright bizarre language originally designed by Larry Wall.

Known as the Swiss Army Chainsaw, Perl has grown into a leviathan like entity, having grown new tentacles for OO, complex data structures and real scoping.

Perl's design sacrifices abstraction for flexibility. This makes the language a veritable powerhouse for the seasoned guru, but a patch of deadly quicksand for the unwary newbie.

One of Perl's mottos is 'TAMTOWTDI' There's Always More Than One Way To Do It. This can be both a good and a bad thing.

Another good option for newbies needing to write a script is Python, which brings a greater level of abstraction to the table, making the 99% of what people want to do much simpler while making the 1% of tasks the gurus need to do slightly more verbose.

Recently I've become very enamoured with Ruby. It brings all the benefits I outlined above while describing Python to the table without sacrificing the conciseness that Perl geeks seem to crave while maintaining a very high level of readability.

It is the most widely used programming language on earth, thanks to the popularity and accessibility of the Web. Programmers don't have all the time in the world, they need something that do powerful things and resembles English (or any practical language we humans like) so that it's easy to learn. They pick Perl often because of this.

An astonishing number of web users use it everyday and never know it. It's like that widget that keeps your fridge cold. Some widgets just don't advertise themselves.

Perhaps we don't want to hear about it, I can live with fewer logos and brand names personally--please hide the widget that makes the fridge code and don't tag it with logos.

Perl is different, you won't want it hidden, it's too useful. Like English. You want it exposed. Often used.

You need to use your brain, and feel fun and creative, have an itch to solve problem, possess copious amount of laziness so that you'll want to solve it with the minimum amount of fuss. But that's it.

Something simple and fun: I often find that my favorite online services are created using Perl. I learned to do this with a service call the Netcraft Website Finder (at www.netcraft.com). Consider writing down the web address to 10 of your most favorite websites and do a simple search on Netcraft. For example, my first entry is "www.everything2.com". After clicking on the go button I get an answer telling me that Perl is powering www.everything2.com! It's not always so straight-forward. If it says it's running Apache, Linux, mod_perl, or cgi or just some long winded phrase or product with any of those previously mentioned words--chances are that perl is an integral part of that web service. You may learn that few people will have a list where none of the sites use Perl.

Interesting things you can do with Perl:

Perl isn't really a swiss army knife. That's more like C. Perl is a large, metallic toolbox containing: a complete set of box-end wrenches in metric and imperial, except 10mm and 3/8"; a selection of five machinists' hammers; one regular construction hammer; ten- and twelve-pound sledgehammers; complete set of Robertson screwdrivers; and an infinite length of duct tape.
-- Charles Cazabon

This is the genealogy of the programming language Perl:

Perl is a child of awk, sh, C, csh, Pascal and Basic.
Perl was first known as Perl 1.000 in year 1987.
It became Perl 2.000 in year 1988.
It became Perl 3.000 in year 1989.
It became Perl 4.000 in year 1991.
Then it begat Ruby in year 1993.
It became Perl 5.000 in year 1994.
Then it begat PHP in year 1995.
It became Perl 5.005_50 in year 1998.
It became Perl 5.6.0 in year 2000.
It became Perl 5.8.0 in year 2002, and has not changed much since that time.

If you cannot believe that Perl is a child of Basic or Pascal, read the Perl man page. Perl is also a child of sed, which has no entry here because sed is an editor, not a language.

This genealogy is brought to you by the Programming Languages Genealogy Project. Please send comments to thbz.

This is a list of all functions and magic variables in Perl.
Note that very few of the links have been created as nodes. Feel free to help me out on this. :)

- A -
$^A
-A
abs
accept
$ACCUMULATOR
alarm
atan2
$ARG ($_)
@ARGV
$ARGV
autoflush

- B -
-b
-B
$BASETIME
bind
binmode
bless

- C -
-c
-C
caller
chdir
$CHILD_ERROR ($?)
chmod
chomp
chop
chown
chr
chroot
close
closedir
connect
continue
cos
crypt

- D -
$^D
-d
dbmclose
dbmopen
$DEBUGGING
defined
delete
die
do
dump

- E -
$^E
-e
each
$EFFECTIVE_GROUP_ID ($))
$EFFECTIVE_USER_ID ($>)
$EGID
endgrent
endhostent
endnetent
endprotoent
endpwent
endservent
$ENV{expr}
eof
$ERRNO
$EUID
$EVAL_ERROR ($@)
eval
exec
$EXECUTABLE_NAME
exists
exit
exp
$EXTENDED_OS_ERROR

- F -
$^F
-f
fcntl
fileno
flock
fork
$FORMAT_FORMFEED
format_formfeed
$FORMAT_LINE_BREAK_CHARACTERS ($:)
format_line_break_characters
$FORMAT_LINES_LEFT
format_lines_left
$FORMAT_LINES_PER_PAGE
format_lines_per_page
$FORMAT_NAME
format_name
$FORMAT_PAGE_NUMBER
format_page_number
$FORMAT_TOP_NAME
format_top_name
format
formline

- G -
-g
getc
getgrent
getgrgid
getgrnam
gethostbyaddr
gethostbyname
gethostent
getlogin
getnetbyaddr
getnetbyname
getnetent
getpeername
getpgrp
getppid
getpriority
getprotobyname
getprotobynumber
getprotoent
getpwent
getpwnam
getpwuid
getservbyname
getservbyport
getservent
getsockname
getsockopt
$GID
glob
gmtime
goto
grep

- H -
$^H
hex

- I -
import
$^I
%INC
@INC
index
$INPLACE_EDIT
$INPUT_LINE_NUMBER ($.)
input_line_number
$INPUT_RECORD_SEPARATOR ($/)
input_record_separator
int
ioctl

- J -
join

- K -
-k
keys
kill

- L -
$^L
-l
$LAST_PAREN_MATCH
last
lc
lcfirst
length
link
$LIST_SEPARATOR ($")
listen
local
localtime
log
lstat

- M -
m//
$^M
-M
map
$MATCH
mkdir
msgctl
msgget
msgrcv
msgsnd
$MULTILINE_MATCHING
my

- N -
next
no
$NR

- O -
$^O
-o
-O
oct
$OFMT ($#)
$OFS
open
opendir
ord
$ORS
$OS_ERROR ($!)
$OSNAME
$OUTPUT_AUTOFLUSH
$OUTPUT_FIELD_SEPARATOR ($,)
output_field_separator
$OUTPUT_RECORD_SEPARATOR ($\)
output_record_separator

- P -
$^P
-p
pack
package
$PERL_VERSION
$PERLDB
$PID
pipe
pop
pos
$POSTMATCH
$PREMATCH
print
printf
$PROCESS_ID ($$)
$PROGRAM_NAME
prototype
push

- Q -
q/STRING/
qq/STRING/
quotemeta
qw/STRING/
qx/STRING/

- R -
-r
-R
rand
read
readdir
readline
readlink
readpipe
$REAL_GROUP_ID ($))
$REAL_USER_ID ($<)
recv
redo
ref
rename
require
reset
return
reverse
rewinddir
rindex
rmdir
$RS

- S -
s///
-s
-S
scalar
seek
seekdir
select
semctl
semget
semop
send
setgrent
sethostent
setnetent
setpgrp
setpriority
setprotoent
setpwent
setservent
setsockopt
shift
shmctl
shmget
shmread
shmwrite
shutdown
$SIG{expr}
sin
sleep
socket
socketpair
sort
splice
split
sprintf
sqrt
srand
stat
study
sub
$SUBSCRIPT_SEPARATOR ($;)
$SUBSEP
substr
symlink
syscall
sysopen
sysread
sysseek
$SYSTEM_FD_MAX
system
syswrite

- T -
$^T
-t
-T
tell
telldir
tie
tied
time
times
tr///
truncate

- U -
-u
uc
ucfirst
$UID
umask
undef
unlink
unpack
unshift
untie
use
utime

- V -
values
vec

- W -
$^W
-w
-W
wait
waitpid
wantarray
warn
$WARNING
write

- X -
$^X
-x
-X

- Y -
y///

- Z -
-z

perfect programmer syndrome = P = person of no account

Perl /perl/ n.

[Practical Extraction and Report Language, a.k.a. Pathologically Eclectic Rubbish Lister] An interpreted language developed by Larry Wall (<larry@wall.org>, author of patch(1) and rn(1)) and distributed over Usenet. Superficially resembles awk, but is much hairier, including many facilities reminiscent of sed(1) and shells and a comprehensive Unix system-call interface. Unix sysadmins, who are almost always incorrigible hackers, generally consider it one of the languages of choice, and it is by far the most widely used tool for making `live' web pages via CGI. Perl has been described, in a parody of a famous remark about lex(1), as the Swiss-Army chainsaw of Unix programming. Though Perl is very useful, it would be a stretch to describe it as pretty or elegant; people who like clean, spare design generally prefer Python. See also Camel Book, TMTOWTDI.

--The Jargon File version 4.3.1, ed. ESR, autonoded by rescdsk.

Perl is the first postmodern computer language. This probably has something to do with why Python programmers often hate Perl. According to Larry Wall, the creator of Perl,
...the essence of Modernism is to take one cool idea and drive it into the ground.... Think about Lisp, and parentheses. Think about Forth, and stack code. Think about Prolog, and backtracking. Think about Smalltalk, and objects. (Or if you don't want to think about Smalltalk, think about Java, and objects.)

Think about Python, and whitespace. Hi, Guido.

Well...Perl does one thing, and does it well. What it does well is to integrate all its features into one language. More importantly, it does this without making them all look like each other. Ducts shouldn't look like girders, and girders shouldn't look like ducts. Neither of those should look like water pipes, and it's really important that water pipes not look like sewer pipes. Or smell like sewer pipes. Modernism says that we should make all these things look the same (and preferably invisible). Postmodernism says it's okay for them to stick out, and to look different, because a duct ought to look like a duct, and a sewer pipe ought to look like a sewer pipe, and hammer ought to look like a hammer, and a telephone ought to look like either a telephone, or a Star Trek communicator. Things that are different should look different.

--Larry Wall, "Perl, the first postmodern computer language", LinuxWorld Spring 1999

Some examples:
  • Perl's regex syntax is similar to that of many other languages and programs.
  • Regular Perl syntax is superficially similar to C in its expressions, operators, control structures, and use of semicolons, while modifying things just enough to be more flexible (e.g., Perl's gazillion methods of quoting).
  • Plain old documentation, or Pod, is said to be a pale imitation of Donald Knuth's literate programming. On the other hand, it's simple and unobstrusive enough that far more people use it.
  • Perl has features of functional programming in its map and grep operators, but you can also do things procedurally if you like.
  • Perl has closures like Lisp, if you need them.
  • Perl supports many of the conveniences of shell programming, like backticks and file tests.
  • etc...

Both Perl's strengths and weaknesses are directly attributable to this philosophy of getting things done -- practicality over idealism. Or, as Wall's daughter would say, "'Tsall good..." Perl is incredibly flexible and expressive because Larry Wall stole the best features of other languages, without getting hung up by requiring everything to look like a hammer. At the same time, Perl is often bizzare, confusing and downright ugly, again due to the lack of a unifying idea.

"There's more than one way to do it." It could be argued that Perl's unifying idea is the lack of a unifying idea:

Modernism puts the focus squarely on the hammer and the nail. In contrast, postmodernism puts the focus back onto the carpenter. You'll note that carpenters are allowed to choose whether or not to use hammers. They can use saws and tape measures if they choose, too... They're allowed to be creative.

--Larry Wall, "Perl, the first postmodern computer language"

Hacking is an essentially creative endeavor, so it's no wonder that there are many Perl hackers, but no Java hackers. Perl is not just a programming language, it's a culture.

http://www.wall.org/~larry/pm.html

Addendum: some people have /msg'ed me with corrections -- that Jamie Zawinski is an instance of a Java hacker, that Larry Wall's concept of modernism is fuzzy... I say, 'tsall good. :)

Log in or registerto write something here or to contact authors.