Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^2: Using the Perl Debugger (-d)

by sgifford (Prior)
on Jan 25, 2007 at 17:23 UTC ( [id://596559]=note: print w/replies, xml ) Need Help??


in reply to Re: Using the Perl Debugger (-d)
in thread Using the Perl Debugger (-d)

Debug prints such as yours entail a runtime hit, which is almost always negligible; but they also clutter the code, which often isn't.
If you use something like this:
use constant DEBUG => 1; print "Some useful information" if (DEBUG);
the compiler should optimize it away, which will remove even the small performance hit (or at least relegate it to the one-time compilation of the code).

Replies are listed 'Best First'.
Re^3: Using the Perl Debugger (-d)
by MaxKlokan (Monk) on Jan 26, 2007 at 10:33 UTC
    I have used your same approach sometimes. The problem I hit is that if your program has been migrated to a production environment where the script is read-only, you cannot turn on/off the switch for debugging purposes.
    That is why I prefer to add a command-line switch to turn on debugging:
    #!/usr/bin/perl -s use warings use strict;
    use vars $d;
    use vars qw/$d/; print "Debugging message..." if $d;
    Update
    To run the script you would use perl myscript.pl -d
      I'm sure it must be feasable to set the value for the constant based on a command line switch. I'm not sure if one can just plug in use a module like Getopt::Std or Getopt::Long for this — they probably work at runtime, and might interfere with your own use of command line switches. Hence the handcrafted code, in the example:
      { my $debug; BEGIN { if(grep { $_ eq '-d' } @ARGV) { # look for switch $debug = 1; @ARGV = grep { $_ ne '-d' } @ARGV; # remove switch } } use constant DEBUG => $debug; } print "Debug is on" if DEBUG;

      Does anybody else get a "Useless use of a constant in void context" warning for the print line if DEBUG is off, or is it my old Perl version (5.6.1)? -MO=Deparse tells me it got replaced by the statement '???';, which might explain it. It's still silly.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2025-06-23 22:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.