in reply to Redefining Imported Subs: of scope and no
Don't mess with say, it will byte you or a later maintainer of this code.
Instead, (1) define sub debug {...}; with a plain old if inside. (2) Replace all occurences of say with debug(). (3) Replace those say's that aren't really for debugging back again. (4) Re-run your tests to see if anything got lost.
You can then consider moving debug() to a separate module for re-use, or switch to Log4perl altogether as other monk suggests here, or even write a debug_off() sub that replaces debug() on the fly. But at least it's not like "Hey, say() prints nothing! Our perl interpreter must be broken!"
In Section
Seekers of Perl Wisdom