in reply to debug statements

if you don't want to go with something like Log::Log4perl, you could reduce it to a subroutine call, to make the typing easier:
use constant DEBUG => 1; debug("\$variable = $variable"); sub debug { return unless DEBUG >= 1; print 'DEBUG: ', @_, "\n"; }
you say you are not worried about execution speed, but the above can be enhanced to support lazy evaluation of potentially expensive debugging operations by using closures:
sub debug { return unless DEBUG >= 1; print 'DEBUG: ', ( ref $_[0] eq 'CODE' ? $_[0]->() : @_ ), "\n"; }
that allows things like:
debug( sub { Data::Dumper->new([$variable], ["variable"])->Dump } );
and the expensive Dump operation will only be executed if DEBUG.

Replies are listed 'Best First'.
Re^2: debug statements
by koknat (Sexton) on Oct 03, 2006 at 20:07 UTC
    I really like the idea of using a simple subroutine. Is there a way of making a subroutine that works like this?:
    debug(\$variable);
      You mean something like this?
      use constant DEBUG => 1; sub debug { return unless DEBUG; my $ref = shift; print STDERR Dumper $ref; } my $foo = 'foo'; my @bar = ( qw/ foo bar baz / ); debug( \$foo ); debug( \@bar );
      Output:
      $VAR1 = \'foo'; $VAR1 = [ 'foo', 'bar', 'baz' ];
      not without resorting to extreme nastiness. you could try Data::Dumper::Names to make your life a little easier (?)...
      use Data::Dumper::Names; debug( Dumper($variable) );
      note the CAVEATS in the Data::Dumper::Names documentation!