Debugging a Perl/Tk program need not
be different from debugging a nongraphical program; you can always
sprinkle warn
statements throughout the code to
track progress and display intermediate results. We suggest using
warn
rather than print
for
three reasons: it adds the newline to the message automatically; the
output includes the line number of the warn
statement; and the output goes to STDERR, which is not normally
buffered, thus the output appears immediately. Furthermore, you type
fewer characters.
You normally run programs by typing the program name at the command prompt:
% hello_world
or:
C:\>perl hello_world
When you invoke the program this way, any
printed output goes to that terminal window. If you don’t put a
\n
on the end of the string to be printed, you
won’t see the information actually printed until you quit the
program. You may have to unbuffer a file handle by setting the
special Perl variable $|
. If you use
warn
rather than print
, these
drawbacks are eliminated.
If that old-fashioned way isn’t to
your liking, perhaps the slightly newer old-fashioned way of using
the standard Perl debugger is. The debugger has built-in Tk support,
though you must use the O
command and enable it by
setting the variable tkRunning
:
[bug@Pandy atk]$perl -de 0
Default die handler restored. Loading DB routines from perl5db.pl version 1.07 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 0 DB<1>O tkRunning
tkRunning = '1' DB<2>use Tk
DB<3>$mw = MainWindow->new
DB<4>$b = $mw->Button(-text => 'Beep', -command => sub{$mw->bell})
DB<5>$b->pack
DB<6>x $b
0 Tk::Button=HASH(0x82ed434) '_TkValue_' => '.button' DB<7>q
As you see, we can not only print debug information, but also do simple prototyping.
An even better environment for this sort of activity is the program ptksh. It’s part of a standard Perl/Tk installation and, as its name suggests, it’s a Perl/Tk shell that allows us to interactively enter and test Perl and Tk commands. Figure 1-3 shows a sample ptksh session.
If you’re really into graphical
debugging, treat yourself to the CPAN module
Devel::ptkdb, an excellent, sophisticated
Perl/Tk debugger. Simply invoke Perl with a -d
argument such as this:
[bug@Pandy atk]$ perl -d:ptkdb group
Figure 1-4 shows a ptkdb session.
Get Mastering Perl/Tk now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.