Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: debug statements

by mreece (Friar)
on Oct 03, 2006 at 19:10 UTC ( #576165=note: print w/replies, xml ) Need Help??

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?:
      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 );
      $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!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://576165]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (10)
As of 2021-03-02 20:31 GMT
Find Nodes?
    Voting Booth?
    My favorite kind of desktop background is:

    Results (62 votes). Check out past polls.