(Reposted - originally by Tom Christiansen, preserved by Ilya Chelpanov at http://i72.narod.ru/perl-mastery.html, reposted here for convenience and posterity.)

The Seven Steps to Perl Mastery

by Tom Christiansen.

A Perl Novice ...

- Thinks CGI and Perl are interchangeable terms.

- Still thinks Perl looks like bad C code viewed over a noisy modem.

- Is insecure about the concept of dollar signs and at signs.

- Thinks Perl should be more like sh or tcl.

- Has heard of the `` Unix mindset '', but hopes it's a treatable condition.

- Can not figure out how to read input from the keyboard.

- Thinks regular expressions are somebody cursing.

- Wonders why no one can give him a straight answer about whether Perl is

compiled or interpreted.

A Perl Initiate ...

- Has begun to learn about $ _

- And does not like it one bit.

- Thinks the -w flag is a waste of time.

- Thinks Perl should be more like C ++ or Java.

- Is still trying to figure why Perl has two different kinds of arrays.

- Knows how to use perlbug, but sends in bogus bug reports.

- Has been bitten by implicit context conversions, but has not caught on yet

to how triggered it.

- Can not keep == separate from eq, and still thinks that + should

concatenate strings.

A Perl User ...

- Thinks Perl is just for text processing.

- Uses the Perl debugger.

- Has used other people's modules.

- Wonders what an object is.

- Knows their way around CPAN.

- Knows the difference between local and my.

- Uses .

- Is still trying to figure what references are for.

- Thinks Perl should be more like scheme or eiffel.

- Submits real bug reports with perlbug.

A Perl Adept ...

- Write JAPHs to impress their friends and annoy their coworkers.

- Begins all programs with use strict.

- Thinks Perl should just be Perl.

- Has taken enough advantage of cryptocontext to annoy others.

- Knows how to create records and objects with hash refs.

- Uses syscall to get at undocumented operating system calls.

- Curses the flexibility of the Perl object system.

- Uses / e in substitutes.

- Has begun to wonder what typeglobs are for.

- Has written their own modules in Perl.

- Begins to look at all data in terms of regular expressions.

- Understands why regexes can not match nested data.

- Rewrites minor utilities in Perl.

A Perl Hacker ...

- Writes games in Perl.

- Has written extension modules in C.

- Uses AUTOLOAD and closures in curious ways.

- Appreciates the aesthetics of the Schwartzian Transform.

- Delights in the flexibility of the Perl object system.

- Has written their own pod2XXX translator.

- Understands the output from Perl -Dflags.

- Accesses the Perl symbol table directly.

- Submits bug reports with working patches.

- Edits files using a special Perl-embedded version of vi or emacs.

- Has contributed modules, manpages, and tools to the standard Perl

distribution.

A Perl Guru ...

- Can answer any Perl question instantly.

- Can write anything in Perl

- And does.

- Takes advantage of undocumented language features.

- Writes code that gives even Larry pause.

- Implements opaque objects and compiled regexes using closures.

- Can read and understand the output of the perl-to-C compiler.

- Embeds Perl interpreters in larger applications.

- Has written their own -d: debugger module.

- Used object-oriented programming before it existed.

- Is debating taking their turn with the patch pumpkin.

A Perl Wizard ...

- Is on a first-name basis with Larry's wife.

- Has written or rewritten major subsystems of the Perl compiler or

interpreter.

- Is thinking about rewriting the regex engine, the memory allocator, or

the garbage collector.

- Does not write games in Perl because they realize that Perl * is * the game.

(If anyone wonders, I'm somewhere between Perl Adept, Hacker, and Guru - but I did contribute one of the versions of the key-hash algorithm to Perl CORE lo these many years ago.)