
You'll trace Perl's journey across a visual timeline, from Larry Wall's original 1987 release as Unix glue, through the rise of Perl 4 and the landmark Perl 5 that brought references and objects, the long Perl 6 saga that split off as Raku, and the steady modernization of Perl 5 with signatures, the class feature, and try/catch. You'll come away understanding both the human story of a creator-led language and the technical turning points that made Perl the original "duct tape of the internet."
You'll write and run your very first Perl program — a tiny script that opens with the shebang line, switches on the strict and warnings pragmas, and prints a short message to the screen. Along the way you'll see exactly how Perl is invoked from the command line, why strict and warnings are non-negotiable in modern code, and what that trailing semicolon really means.
You'll meet Perl's three core ways of producing output in one runnable example: print for raw text, say for output with an automatic newline, and printf for formatting numbers and padded strings. By swapping format specifiers to control width and precision, you'll feel Perl's "more than one way to do it" philosophy at work in something as basic as writing to the screen.
You'll work with scalar variables — strings, integers, and floating-point numbers — all carrying the dollar sigil, and watch them drop neatly into an interpolated double-quoted string. You'll see how Perl freely converts between strings and numbers depending on context, why single quotes suppress interpolation while double quotes enable it, and how the dollar sigil always means "one of something."
You'll compare Perl's two families of operators side by side: arithmetic and numeric comparisons like == and < versus the dot operator and string comparisons like eq and lt. By predicting and then running comparisons such as "10" lt "9" against 10 < 9, you'll lock in one of the most common stumbling blocks for Perl newcomers before it ever bites you.
You'll build a small interactive script that reads a line from standard input with the diamond operator, chomps off the trailing newline, and greets the user back — then extend it to pull arguments from @ARGV. Running it with both piped input and command-line arguments, you'll understand why chomp is almost always necessary and what the diamond operator quietly does when no filenames are given.
You'll explore the philosophy that defines Perl: "There Is More Than One Way To Do It," the slogan Larry Wall — a trained linguist — built the language around in deliberate contrast to Python's single-obvious-way approach. You'll see Perl's core values laid out as pillars — pragmatism over purity, easy things easy and hard things possible, expressiveness over compiler convenience, context-sensitivity like a natural language — and weigh them against the Zen of Python so you know exactly what you're signing up for.
You'll create your first array of place names with the @ sigil, reach into individual elements using the dollar sigil and square brackets, and find an array's length through Perl's scalar-context trick. Then you'll reverse the array, push a new element onto it, and shift one off the front — building the foundational vocabulary of Perl array manipulation.
You'll discover how expressive Perl slicing can be: pulling several non-contiguous elements at once with a list of indices, counting from the end with negative indices, and reversing part of an array through slice assignment. You'll see why slices return lists rather than scalars, then rearrange the ends of an array using slice notation.
You'll step back from code to build a solid mental model of hashes, using a labelled-buckets diagram to see how Perl maps string keys to scalar values through an internal hash table. You'll contrast hashes with integer-indexed arrays and picture real use cases — configuration storage, counting frequencies, modeling records — so the syntax in the next lecture lands on top of a clear sense of when and why to reach for a hash.
You'll build a hash that maps keys to values with the % sigil and fat-comma syntax, then read values with the dollar sigil and curly braces, iterate over keys with the keys function, and remove an entry with delete. You'll see firsthand that hash order isn't guaranteed, and then count entries that meet a simple condition.
You'll use references to break past Perl's flat-list default and build genuinely nested data — arrays of arrays and hashes of arrays — with the backslash operator and the arrow dereferencer. By printing the structure with Data::Dumper, you'll see its true nested shape and finally make sense of the sigil dance that dereferencing requires.
You'll wrap up data structures with the mind-bending idea of context: assigning an array to a scalar to get its length, forcing scalar context with the scalar function inside print, and watching the same expression return different values depending on where it appears. By predicting the output before you run it, you'll build real intuition for one of Perl's most distinctive design choices.
You'll take a guided tour of CPAN, the Comprehensive Perl Archive Network, sizing up its scale — hundreds of thousands of modules from thousands of authors — and the toolchain of cpan, cpanm, and Carton that developers reach for daily. You'll learn how uploads and CPAN's distributed testing culture work, then compare it against npm and PyPI to see why CPAN became the template every later package manager imitated.
You'll exercise Perl's full conditional vocabulary: classic if/elsif/else blocks, the negated unless keyword, and the postfix statement-modifier form that lets a single line carry its own condition. By feeding the script different inputs and then rewriting a multi-line if as a one-line modifier, you'll see the TIMTOWTDI principle play out in control flow.
You'll write three flavors of loop in one program — a while loop counting down, an until loop waiting for a target condition, and a do/while loop that runs its body at least once before testing. Watching a clear trace of each iteration, you'll see exactly where the condition is checked and feel the practical difference between top-tested and bottom-tested loops.
You'll learn Perl's two for-loop spellings: the C-style three-part for over an index range, and the idiomatic foreach that walks a list with an implicit loop variable. You'll see how Perl treats them as synonyms while favoring foreach for lists, then compute the sum of squares from one to ten to feel the difference in clarity.
You'll define your first subroutine — computing the area of a rectangle — receiving its arguments through the special @_ array, returning a value, and calling it both with and without parentheses. You'll understand how Perl passes arguments as a flat list into @_, then extend the routine with a third argument that switches between area and perimeter.
You'll modernize how you write subroutines by enabling the signatures feature and declaring parameters right in the parentheses — including a default value and a variadic catch-all list. Running it on a recent Perl and comparing it to the @_ version from the previous lecture, you'll see concrete proof that Perl 5 keeps evolving toward the ergonomics of newer languages.
You'll get an unflinching, SWOT-style assessment of Perl for today's developer: its unmatched regex engine, blazing text-processing speed, deep Unix integration, and mature CPAN — set honestly against sigil-heavy syntax, the write-only reputation, thin adoption among new programmers, the decade-long Perl 6 schism, and a hiring market that shrank toward Python and Go. You'll leave able to judge for yourself when reaching for Perl is the right call and when it's a nostalgic mistake.
You'll match text with the =~ binding operator and m// syntax to detect a date pattern, then capture the year, month, and day into the $1, $2, and $3 variables and print them back. Walking through the regex one metacharacter at a time, you'll see exactly what each piece matches, then apply the pattern across a list of log lines to pull the date out of each.
You'll wield the substitution operator to collapse runs of whitespace into single spaces, transform words using the e modifier to run the replacement as code, and modify a string in place. Seeing the before-and-after output, you'll then combine captures with the e modifier to rewrite the numbers found inside a line of text.
You'll parse a log line with named captures using the (?<name>...) syntax, read the matched fields straight out of the %+ hash, and pit greedy quantifiers like .* against their non-greedy counterparts like .*? when grabbing a value between delimiters. With the difference made visible, you'll extract a quoted string from a larger sentence without swallowing trailing content.
You'll combine three text-processing workhorses in one go: split to break a CSV row into fields, join to stitch words into a delimited line, and the tr/// operator to count vowels in a string. Then you'll parse a colon-separated record and report selected fields from each entry — exactly the kind of work that earned Perl its text-manipulation reputation.
You'll ground your view of Perl in hard data through bar charts and KPI dashboards: interpreter startup time and text-processing throughput, Perl's ranking trend over two decades, ecosystem activity across several metrics, and the roster of organizations still running Perl in production. You'll see clearly where Perl still dominates, from log parsing to ETL glue to command-line one-liners.
You'll build a counter factory — a subroutine that returns an anonymous subroutine closing over a lexical variable — then call the returned closure repeatedly and watch its captured state increment independently. You'll see how a my variable's lifetime is extended by the closure, laying the foundation for treating subroutines as first-class values in Perl.
You'll assemble a functional pipeline that filters elements out with grep, transforms the survivors with map, and sorts them with a custom comparator block — printing each intermediate result so the data flow is plain to see. Then you'll replace an explicit foreach loop with the equivalent grep-map-sort chain and feel functional style displace imperative iteration.
You'll use reduce from List::Util to fold a list into a single value — summing numbers, finding a maximum, and concatenating strings with a separator — and round out your toolkit with first, any, and all from the same module. To make it stick, you'll fold a list of multipliers into a single product using reduce with a one-line block.
You'll simulate a lazy iterator by returning a closure that yields the next Fibonacci number on each call, consuming it in a while loop until you hit a threshold, then compare it with the cleaner Iterator::Simple module from CPAN. You'll see how Perl can mimic generator-style lazy evaluation without a dedicated yield keyword, then build your own iterator over the prime numbers.
You'll handle errors two ways: first with Try::Tiny from CPAN to wrap an operation that might throw, then with the new core try/catch syntax from recent Perl versions. Printing the captured exception message both ways, you'll learn why eval-with-die was the original idiom, what made it dangerous, and how modern syntax finally matches what Java or Python developers expect.
You'll follow a Perl program through its whole lifecycle in a process-flow diagram: source tokenized by the lexer, parsed into a syntax tree, compiled into an internal opcode tree, and run by the runtime loop. You'll see where BEGIN blocks fit, how Perl's compile-and-run model differs from a pure interpreter and from a fully compiled language like Go, and why this architecture makes one-liners and source filters possible.
You'll spin up process-based parallelism the Unix way, using Perl's fork built-in to launch child processes that each compute a partial result, then coordinate them from the parent. With each process's output visible, you'll see why fork is Perl's most idiomatic concurrency model, then split a larger workload across several forked workers running at once.
You'll explore Perl's interpreter-threads model by launching worker threads with the threads pragma, sharing variables across thread boundaries with threads::shared, and collecting results with join. You'll also learn the honest caveat — ithreads are heavyweight, copying the full interpreter — and why the community usually prefers fork or event loops for parallelism.
You'll write event-driven async code with AnyEvent, scheduling timers and a delayed callback inside a single event loop and watching each message fire before the program exits cleanly. You'll see AnyEvent as Perl's answer to Node.js-style event loops and how it scales to thousands of concurrent connections without one OS thread per task, then add another timer firing on its own interval.
You'll define a clean class with Moo — declaring attributes with types and defaults via has, instantiating an object, and calling methods on it — to experience object orientation that feels genuinely modern. You'll see how the package mechanism and the BUILD method fit together, then extend the class with a method that uses attribute introspection to print every attribute and its value.
You'll celebrate the Perl one-liner, running short command-line snippets that use the -n, -p, -e, and -i flags to read a file line by line, edit it in place, count regex matches, and reformat tabular columns. Seeing the input and output for each, you'll pull together every regex, list-operator, and idiom skill the course built up — then write a one-liner that tallies how often each value appears in a file.
You'll open the bonnet on Perl's internal value representation, using a labelled-squares diagram of the SV, AV, and HV structures to see how every scalar is a multi-typed container with slots for integer, float, and string forms, and how reference counting manages memory deterministically. You'll also meet "magic" — the machinery behind tied variables, special variables like $., and operator overloading — that gives Perl its uniquely flexible feel.
You'll compare the whole arc of Perl object orientation in a side-by-side table: the original bless-a-reference approach where any package can become a class, the wave of CPAN frameworks like Moose, Moo, and Mouse that added attributes and roles, and the new native class feature introduced experimentally in 5.38 and stabilized in 5.40. You'll see how Perl's OO story is finally converging on a coherent in-core model after thirty years of experimentation.
You'll learn the cultural idioms that mark code as truly "Perlish," with infographic-style cards explaining the Schwartzian transform for sorting by a derived key, the orcish maneuver for memoized lookups, the chained ternary, and local for dynamic scoping. You'll come to see each not as a mere trick but as a window into Perl's pragmatic worldview — where readable code is whatever an experienced Perl reader recognizes instantly — and contrast it with Python's explicit-is-better aesthetic.
You'll close the conceptual deep dive with a tour of Perl's real-world niches: BioPerl in genomics pipelines, the sysadmin scripts still gluing together Unix infrastructure at major hosting companies, the one-liner tradition that turns Perl into a more expressive awk, and Perl's role in legacy modernization. A quadrant chart positioning each niche by maturity and growth will leave you with a realistic map of where you might actually deploy Perl professionally.
This course contains the use of artificial intelligence.
Perl has quietly powered the internet for nearly four decades. It still glues together CI pipelines, parses logs at terabyte scale, drives bioinformatics workflows, and ships inside almost every Linux distribution on the planet. While newer languages chase headlines, Perl remains the pragmatic choice when you need to slice text, automate sysadmin tasks, or maintain the millions of lines of battle-tested code holding production systems together. Learning Perl is not nostalgia — it is a superpower for anyone who works with files, strings, or servers.
This course is a complete, honest tour of modern Perl, and it is built around a simple rhythm: every coding section opens with a short conceptual lecture that gives you the context, history, and the "why" before you touch the keyboard, then hands you straight into hands-on coding. You will run your first scripts, then work through scalars, arrays, hashes, references, and context — the concept that trips up every newcomer. You will master control flow, modern subroutine signatures, and the regular-expression engine that set the standard for every language after it. As you move into advanced territory you will write closures, higher-order pipelines with map, grep, sort, and reduce, lazy iterators, modern try/catch error handling, fork-based and threaded concurrency, asynchronous I/O with AnyEvent, Moo-based object orientation, and Perl one-liners. The course then closes with a run of deeper conceptual lectures that take you under the hood — reference counting and the SV internals, the evolution of Perl's object system from bless to Moose to the core class feature, the idioms that define Perl style, and the specialized niches where Perl still earns its keep — so you finish with both fluency and genuine understanding.
This course is for developers, sysadmins, DevOps engineers, bioinformaticians, and curious programmers who want fluency in a language that rewards expressiveness. You need basic familiarity with a terminal and any prior programming experience; no Perl background is assumed. By the end you will read and write idiomatic Perl, build CPAN-style modules, automate text processing tasks in seconds, and confidently maintain legacy codebases that other developers fear to touch.
Most Perl tutorials are stuck in 1999. This course teaches Perl as it is written today — signatures, classes, try/catch, modern tooling — while honoring the philosophy that made it great. Honest tradeoffs, real benchmarks, and the idioms that separate hobbyists from professionals. Enroll now and add one of the most quietly powerful tools in computing to your toolkit.