Hero roadmap: the whole course on one page

Contents
All 50 lessons
Check yourself: install
Check yourself: first steps
Check yourself: core types
Check yourself: subroutines and data
Check yourself: text processing
Check yourself: files and errors
Check yourself: tooling
Check yourself: finish
How to practice
Two capstones, revisited (46+47)
Where to go next

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:

Check yourself: install

  1. How do you print the installed Perl version?
    Answer: lesson 2, perl -v
  2. Which tools keep several Perl versions side by side?
    Answer: lesson 2, several versions

Check yourself: first steps

  1. Which two lines should top every script, and what do they do?
    Answer: lesson 3, strict and warnings
  2. How do you run the file script.pl from the terminal?
    Answer: lesson 3, run it
  3. How do you leave the debugger?
    Answer: lesson 4, exit

Check yourself: core types

  1. What does the sigil tell you about a variable?
    Answer: lesson 5, the dollar sigil
  2. Which values are false in Perl?
    Answer: lesson 14, what is true
  3. How do you interpolate an array into a double-quoted string, and what goes between the elements?
    Answer: lesson 8, arrays in strings
  4. Brackets return undef for a missing key — which function tells you whether the key exists at all?
    Answer: lesson 11, read and write
  5. What is the difference between scalar and list context?
    Answer: lesson 13, two contexts

Check yourself: subroutines and data

  1. Are the elements of @_ copies or aliases?
    Answer: lesson 18, it is an alias
  2. How do you read a value out of a nested hash reference?
    Answer: lesson 19, dereference
  3. 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

  1. How do you name a capture group instead of counting parentheses?
    Answer: lesson 22, named captures
  2. Which flag runs Perl code inside a substitution replacement?
    Answer: lesson 23, the e flag
  3. 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

  1. Why use three-argument open instead of two-argument open?
    Answer: lesson 27, three-argument open
  2. How do you catch an error without a try keyword?
    Answer: lesson 30, eval
  3. Which pragma makes a failed open or close die automatically?
    Answer: lesson 30, autodie

Check yourself: tooling

  1. Which pragma turns an undeclared variable into a compile error?
    Answer: lesson 36, use strict
  2. Which suffix declares an integer option in Getopt::Long?
    Answer: lesson 37, option types
  3. How do you run a command without passing the arguments through the shell?
    Answer: lesson 39, shell safety
  4. Which flag edits a file in place, and what should you always add to it?
    Answer: lesson 40, editing in place
  5. What stops SQL injection in a DBI query?
    Answer: lesson 45, placeholders

Check yourself: finish

  1. How do you turn a hash reference into canonical JSON text?
    Answer: lesson 42, encoding data
  2. Which core module performs an HTTP GET without installing anything?
    Answer: lesson 43, a GET request
  3. How do you compare two implementations instead of guessing which is faster?
    Answer: lesson 48, Benchmark
  4. 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

Related articles
Perl
Perl course: zero to hero in 50 lessons
What is Perl and where it runs
Install Perl and check the version
Your first Perl script
The debugger as a REPL
Scalars and sigils
Numbers
Strings
Interpolation and quoting
Arrays
push, pop, shift and splice
Hashes
keys, values, exists and delete
Scalar and list context
Conditions and comparison
while, for, next and last
foreach and the default variable
Subroutines
Arguments in @_
References
Nested data structures
Regular expressions: match and anchors
Captures and named groups
Substitution with s///
split and join
grep and map
Sort and the Schwartzian transform
Read and write files
File tests and metadata
Directories and paths
die, warn and eval
Modules and Exporter
CPAN and cpanm
Objects with bless
Modern objects with Moo
Testing with Test::More
strict, warnings and diagnostics
Options with Getopt::Long
Environment and %ENV
system, backticks and pipes
One-liners with -n and -p
CSV and TSV processing
JSON with JSON::PP
HTTP clients with HTTP::Tiny
Sockets and IO::Socket
Databases with DBI
Capstone: todo CLI
Capstone: log report
Performance and profiling
Modern Perl tour
Hero roadmap: the whole course on one page
Install Perl on Windows 11
Install Perl on Ubuntu
Install Perl on Rocky Linux
Install Perl on macOS
Install Perl on FreeBSD
Perl in Docker

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: