Hero roadmap: the whole course on one page
All 50 lessons
All 50 lessons live on the course index as a chapter tree. Each chapter below starts at its first lesson — open it and follow the chain to the end of the chapter:
- Chapter 0: Install guides
- Chapter 1: First steps
- Chapter 2: Core types and control flow
- Chapter 3: Subroutines and data
- Chapter 4: Text processing
- Chapter 5: Files, errors and modules
- Chapter 6: Tooling and the outside world
- Chapter 7: Capstones and finish
Check yourself: install
- How do you print the installed Perl version?
Answer: lesson 2, perl -v - Which tools keep several Perl versions side by side?
Answer: lesson 2, several versions
Check yourself: first steps
- Which two lines should top every script, and what do they do?
Answer: lesson 3, strict and warnings - How do you run the file script.pl from the terminal?
Answer: lesson 3, run it - How do you leave the debugger?
Answer: lesson 4, exit
Check yourself: core types
- What does the sigil tell you about a variable?
Answer: lesson 5, the dollar sigil - Which values are false in Perl?
Answer: lesson 14, what is true - How do you interpolate an array into a double-quoted string, and what goes between the elements?
Answer: lesson 8, arrays in strings - Brackets return undef for a missing key — which function tells you whether the key exists at all?
Answer: lesson 11, read and write - What is the difference between scalar and list context?
Answer: lesson 13, two contexts
Check yourself: subroutines and data
- Are the elements of @_ copies or aliases?
Answer: lesson 18, it is an alias - How do you read a value out of a nested hash reference?
Answer: lesson 19, dereference - A copy of a nested structure still shares its inner references — what is the fix?
Answer: lesson 20, shallow and deep copy
Check yourself: text processing
- How do you name a capture group instead of counting parentheses?
Answer: lesson 22, named captures - Which flag runs Perl code inside a substitution replacement?
Answer: lesson 23, the e flag - How do you sort records by a field without recomputing the field on every comparison?
Answer: lesson 26, the Schwartzian transform
Check yourself: files and errors
- Why use three-argument open instead of two-argument open?
Answer: lesson 27, three-argument open - How do you catch an error without a try keyword?
Answer: lesson 30, eval - Which pragma makes a failed open or close die automatically?
Answer: lesson 30, autodie
Check yourself: tooling
- Which pragma turns an undeclared variable into a compile error?
Answer: lesson 36, use strict - Which suffix declares an integer option in Getopt::Long?
Answer: lesson 37, option types - How do you run a command without passing the arguments through the shell?
Answer: lesson 39, shell safety - Which flag edits a file in place, and what should you always add to it?
Answer: lesson 40, editing in place - What stops SQL injection in a DBI query?
Answer: lesson 45, placeholders
Check yourself: finish
- How do you turn a hash reference into canonical JSON text?
Answer: lesson 42, encoding data - Which core module performs an HTTP GET without installing anything?
Answer: lesson 43, a GET request - How do you compare two implementations instead of guessing which is faster?
Answer: lesson 48, Benchmark - What does a subroutine signature buy you over unpacking @_?
Answer: lesson 49, signatures
How to practice
Short daily reps beat rare long sessions. Type every snippet by hand, change one value, and predict the output before running it.
Keep one drill file per lesson so progress stays visible and review takes minutes, not hours.
use v5.36;
my @words = qw(perl regex hash);
say uc $_ for sort @words;
Two capstones, revisited (46+47)
The course ends with two builds that reuse nearly every earlier lesson. Lesson 46 builds the todo CLI with options, files, JSON, and tests.
Lesson 47 reads an access log and reports statuses, paths and bytes per request, with a parser and a top-ten table.
./todo add "Finish the Perl course"
./logreport access.log
Do both in order. The CLI teaches structure — a module boundary and tests around it. The report teaches data — a regex parser and counters that stay small while the input grows.
Where to go next
Finish both capstones, then deepen one direction at a time. Rebuild the CLI with a SQLite backend, or extend the report with per-hour traffic and a percentage column.
The reference documentation is the next step after a course:
perldoc.perl.org
covers every core module and pragma,
metacpan.org
hosts the modules, and
Perl Weekly
is a good way to see what people build.
Continue with the Perl hub for the lesson list and install guides, or go back to the
course index and pick a chapter to review.
Next: Perl course
Article author: Arthur Isaev