Subject: What do you need to have to be considered a Master at Perl?
For me, they must first get past these prerequisites about the
two "weird things" that are in Perl, but not in any other
programming language (AFAIK):
context (scalar vs. list)
two completely separate systems of variables (package vs. lexical)
If they get past those, then proceed to the ones below.
I can't find Tom Christiansen's original, so I'll go with Nat's
reconstruction of:
The Seven Stages of a Perl Programmer
(From
http://prometheus.frii.com/~gnat/yapc/2000-stages/)
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't 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.
Initiate:
* Has begun to learn about $_* and doesn't 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 hasn't caught
on yet to how it was triggered.
* Can't keep == separate from eq, and still thinks that + should
concatenate strings.
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 <DATA>.
* Is still trying to figure what references are for.
* Thinks Perl should be more like scheme or eiffel.
* Submits real bug reports with perlbug.
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't match nested data.
* Rewrites minor utilities in Perl.
Hacker:
* Writes games in Perl.
* Has written extension modules in C.
* Uses AUTOLOAD and closures in curious ways.
* Appreciates the aethetics of the Schwartzian Transform.
* Delights in the flexibility of the Perl object system.
* Has written their own pod2XXX translator.
* Understands the output from Perl -D flags.
* 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.
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.
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.
* Doesn't write games in Perl because they realize that Perl is the game.