in reply to Debugging in packages

Depending on your needs, it may be better to use the global variable $main::DEBUG directly rather than a stored local copy such as $self->{DEBUG}. The reason is you might want to localise $main::DEBUG.

That is, if package Deb prints reams of debugging information when $main::DEBUG is set, you might find it useful in debugging to say

package Deb; sub frob { # do stuff... print_debugging_info if $main::DEBUG; # do more stuff... } # ... package main; $::DEBUG = undef; # usually don't want debugging information my $deb1 = new Deb (...); my $deb2 = new Deb (...); # do stuff with $deb1, $deb2, but no debugging information { local $::DEBUG = 1; # buggy bit $deb1->frob(42); $deb2->nitz(17); } # no more debugging output # ...

local is usually a very good match for various logs.