Boolean Logic for Perl Programmers — a tutorial#
Almost every line of working Perl is shaped by boolean logic.
open ... or die, $h{$k} //= [], unless ($a == $b && $c eq $d),
/^(yes|no)$/, $flags & 0x4 — they are all the same handful of
operations applied in different domains. This tutorial walks
through those operations from the bottom up: what truth means in
Perl, what the operators actually return, all sixteen binary truth
functions and how to spell each one in Perl, the two laws that turn
convoluted conditions into simple ones, and the three places that
logic shows up most: bitwise arithmetic, regular expressions, and
control flow.
Who this is for#
You already write working Perl. You use &&, ||, if, unless
without thinking — but when a condition grows past three or four
clauses you stop trusting it, and you reach for parentheses you
suspect are not needed. This tutorial closes that gap. After
reading it, you will know exactly which logical operation a given
expression performs, why two seemingly different forms are the same
expression, and how to reduce a tangled unless to a clean if
with confidence rather than by trial and error.
Scope#
Classical two-valued boolean logic — true and false, full stop.
Perl’s undef introduces a third value (the unknown) and a whole
family of three-valued idioms (defined, //, //=). Those are
mentioned where they intersect with two-valued logic, but a proper
treatment of three-valued logic would double the size of this
tutorial without finishing it; that is a separate guide.
How this tutorial is organised#
Each chapter is one concept. Read them in order on the first pass; jump to the relevant chapter later when you are looking up a fact.
What you will be able to do after reading#
Look at any boolean expression in Perl source and name the truth function it computes.
Convert between the four equivalent shapes of an implication (
a → b,!a || b,!(a && !b), the contrapositive) without having to think.Reduce an
unlesswith two negated subclauses to a flatifin one mechanical step.Recognise when a regex alternation is a logical OR over sets and when a lookaround pair is a logical AND, and use that framing to read complicated regexes.
Use the bitwise operators to set, clear, toggle and test individual flags without consulting a reference.
Pick the right short-circuit idiom (
||,//,||=,//=,or die) for the situation, knowing why each one works.