in reply to Code review for magazine article?

Every open should have an error check as described in perlstyle for the reasons given there.

Never use unless with logical operators. Rewrite that using if and and and not. It always looks reasonable as you're writing it, but afterwards it is unnecessarily hard to read, and when you actually are trying to debug it, you will quickly get confused in trying to work out the conditions. No, I didn't believe this advice when I was handed it. After a couple of nasty debugging sessions I recognized the limitations of my brain and took it to heart.

Other than that, most of the style things that I would fix are justified by your proposed audience.