package Off_hand_code; use Exporter; use Carp; our @ISA = "Exporter"; our @EXPORT = qw/ routine /; our @EXPORT_OK = qw/ set_debug /; our $debug; # current debug level # debugging level definitions use constant BUG => 1; use constant TRACE => 2; use constant ALL => 3; # Set the $debug variable, complain if new setting is # not an integer or is out of range (0 thru ALL). # Tri-nature function. # sub set_debug { $debug = shift; $debug = shift if ref($debug) || $debug eq __PACKAGE__; no warnings; carp qq/Unexpected debug level "$debug"./ if ( $debug < 0 || $debug > ALL ) || ($debug =~ /\D/ ); } # With no args return the current debugging level for package. # With an arg return 0 unless arg is part of current debugging level. # sub _debug { carp "Wrong number of args to ",__PACKAGE__,"::_debug" if @_ > 1; return $debug unless @_; return $_[0] if $_[0] & $debug; return 0; } # XXX set_debug_output( $output_method) # XXX debug( $level, $output_method, $error_message) # instead of Carp::.* etc. # a routine # sub routine { warn "debug message" if _debug && "something"; warn "trace message" if _debug(TRACE); }