Good point you make here but let me mention one thing in the context of debugging in this way. If you make $debug a constant then you don't get any runtime speed penalty for these kind of tests. They are optimised away at compile time:
use constant DEBUG => 1;
DEBUG && print "printing debug info...\n";
print "printing other info ...\n";
Of course, you no longer have the option of specifiying your debug level on the command line. Sean M. Burke has a nice article about constants in perl (including this usage) here at The Perl Journal. We also had some discussion about that topic here at PM, e.g. in inlined DEBUG constant versus $DEBUG.
-- Hofmator