In my main script I set up the debug constant like so:
my $debug;
BEGIN { GetOptions('debug|d' => \$debug) or die }
use constant DEBUG => $ENV{DEBUG} || $debug;
Then I instantiate a object from a different package:
use Thing;
my $obj = Thing->new;
I want the $obj to know when it should be in debug mode (the debug value won't change during the script run), but don't want to pass it in as a variable, because then the compiler can't optimize away the debug code. The only way I see to do this is to do this in the Thing package:
use constant DEBUG => &main::DEBUG;
This doesn't seem very clean. Is there a better way to deal with this, or is it a case of having your optimization and eating it too?