Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Re: Unbelievably Obvious Debugging Tip

by Anomynous Monk (Scribe)
on Apr 27, 2004 at 16:52 UTC ( [id://348570]=note: print w/replies, xml ) Need Help??


in reply to Re: Unbelievably Obvious Debugging Tip
in thread Unbelievably Obvious Debugging Tip

When I don't use Data::Dumper, I do something like: print join "|", "", $list, $of, $vars, "" with the beginning and ending empty string making join put the separator there.

Replies are listed 'Best First'.
Re^3: Unbelievably Obvious Debugging Tip
by radiantmatrix (Parson) on Dec 15, 2004 at 00:05 UTC

    Because I often deal with data containing every char on the keyboard, I use:

    print STDERR join("\x1E", @list),"\x1E\n";

    This gives me an output with visible record separators (ASCII 0x1E is actuall "Record Separator") quite cleanly, and I use STDERR to avoid bufferring. Default buffering of STDOUT has bitten my debug routines a few times.

    If I'm working a large project, I use my own little module that exports a number of debugging "tools", including this:

    sub dbg { return unless $DEBUG; my $dump = 0; ($dump = 1 && shift) if ($_[0] eq ':DUMP:'); $LOGFILE = open_logfile(); foreach my $item (@_) { $str = (($dump && ref $item) ? Dumper($item) : $item)."\x1E\n +"; print $LOGFILE POSIX::strftime("%Y%m%d:%H.%M.%S\x1E",localtime +).$str if defined $LOGFILE; print STDERR $str unless $QUIET; } }

    The open_logfile sub returns an opened file handle, or opens a new one if need be, to "DEBUG.LOG". Debug items are written to STDERR unless I set $QUIET, and they are always written to the logfile, prepended by a timestamp.

    And, of course, if I unset $DEBUG, then it's basically a no-op.

    Run the following with 'you stupid foo' as arguments:

    #!/usr/bin/perl use Private::Debug 'dbg'; $Private::Debug::DEBUG = 1; $Private::Debug::QUIET = 0; dbg("Hello there", "You fool"); dbg(':DUMP:', "ARGV:", \@ARGV);

    Results in

    #DEBUG.LOG
    20041214:17.58.22▲Hello there▲
    20041214:17.58.22▲You fool▲
    20041214:17.58.22▲ARGV:▲
    20041214:17.58.22▲$VAR1 = [
              'you',
              'stupid',
              'foo'
            ];
    ▲
    
    #STDERR
    Hello there▲
    You fool▲
    ARGV:▲
    $VAR1 = [
              'you',
              'stupid',
              'foo'
            ];
    ▲
    

    It works quite well. The '?' you might see actually shows up as an upward triangle in a terminal, so it is very clear.

    radiantmatrix
    require General::Disclaimer;
    s//2fde04abe76c036c9074586c1/; while(m/(.)/g){print substr(' ,JPacehklnorstu',hex($1),1)}

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (4)
As of 2024-04-25 20:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found