Perl Best Practices | Pdf

The system didn’t break again. And when someone asked why, Erwin would tap the side of his monitor and say: “The PDF teaches you how to write code for the person who finds your body.”

Erwin stared at the wall. Then, like a vision, he remembered a legendary text: Perl Best Practices by Damian Conway. Not the shiny new edition—the original PDF, the one with the stern cover and the weight of a thousand linting rules.

That Friday, Erwin closed the PDF for the last time. He didn’t delete it. He renamed it to perl_best_practices_FINAL_v2_FINAL.pdf —a small, ironic act of rebellion.

The junior dev, remorseful, asked how to help. Erwin slid her a USB stick. “Read Chapters 1 through 7. Then rename every $temp variable to something that means something.” perl best practices pdf

Chapter 1: Always use use strict; and use warnings; .

He remembered the line he’d written last year: $data =~ /(.*?),(.*?),(.*?),(.*?),(.*?),(.*?)/; — then six lines of $foo = $4 . It worked. But it was a crime scene.

Chapter 18: Use named regex captures, not $1 , $2 , $3 . The system didn’t break again

After twelve hours of triage, Erwin’s boss slid a printed email across the desk. “The auditors want a ‘Readability and Maintainability Compliance Plan.’ By Friday.”

Over the next three nights, Erwin didn’t rewrite the code. He performed surgery with the PDF as his scalpel. He wrapped bare blocks in do { } . He replaced if(!$var) with unless($var) . He added perlcritic to the CI pipeline and watched its severity ratings drop from “brutal” to “stern.”

Chapter 4: Don’t use $a and $b outside of sort() . Not the shiny new edition—the original PDF, the

He thought of the thirty-seven lines where $a held a transaction ID and $b held a customer’s social security number.

Erwin was a archaeologist of broken things. While other sysadmins chased cloud-native glitter, Erwin maintained the legacy core—a sprawling Perl backend that processed global financial settlements. The code was old enough to vote, buy a drink, and run for local office. It had no tests, no consistent indentation, and variables named things like $x2a and $foo_final_FINAL .

He felt a pang of shame. The core script had neither.

One Monday, a junior dev accidentally ran rm -rf logs/ in the wrong terminal and, in a panic, hit Ctrl+C. The script died, but not before corrupting a shared hash of session tokens. The cascade failure was beautiful in its tragedy: garbled trades, mismatched settlements, and a red alert that made the on-call phone sound like a dying fire alarm.

By Thursday, the Perl script was still ugly. But it was consistent in its ugliness. Every else was cuddled. Every subroutine had a return . Every filehandle used the three-argument open . The auditors, who didn’t read Perl, saw a printed metric: “Cyclomatic complexity: reduced 42%.” They signed off.