Bug found in Open Perl IDE perl5db.pl module

M

mattsteel

Hello all.

I'm using this IDE since months, and have to say this is a good IDE,
light, simple, easy to use, but not bug-free ;-)

I found a subtle bug in perl5db.pl module (that is shipped with the
IDE for Windows available from SurceForge);

Trying this piece of script:

my $code = sub { print "hello\n" } ;
print "Let's call $code\n";
$code->();
print "Done.\n";

During a normal debug session, moving the mouse over the variable
$code (that is a code-reference i.e. ref($code) returns CODE), the IDE
replies with an “<undef>” which is not true. The same thing happens
listing $code in the “variable” watch-window.

I tried to fix it and patched the perl5db.pl module to handle this
case, so the IDE replies something like
“$code: code = 0x1a81c40”.

Since the module source is more than 700 lines long, I think useful
giving here the four chunks I added: I simply added another "elsif"
case just before the ending "else", so you should be able to insert
these few lines directly in your dbTemplate.txt in the correct
position.

#within SizeOfDerefValue sub:
} elsif ($refType eq 'CODE') {
return length($reference);

#within ShortEval sub:
} elsif ($refType eq 'CODE') {
$reference =~ /\((.*)\)/;
return "code = $1";

#within LongEval sub:
} elsif ($refType eq 'CODE') {
$reference =~ /\((.*)\)/;
$retValue = "code = $1";

#within ShowDerefValues sub:
} elsif ($refType eq 'CODE') {
$type = "code";
$reference =~ /\((.*)\)/;
$value = "$1";

I hope this helps.

Regards.
 
S

smallpond

Hello all.

I'm using this IDE since months, and have to say this is a good IDE,
light, simple, easy to use, but not bug-free ;-)

I found a subtle bug in perl5db.pl module (that is shipped with the
IDE for Windows available from SurceForge);

Trying this piece of script:

my $code = sub { print "hello\n" } ;
print "Let's call $code\n";
$code->();
print "Done.\n";

During a normal debug session, moving the mouse over the variable
$code (that is a code-reference i.e. ref($code) returns CODE), the IDE
replies with an “<undef>” which is not true. The same thing happens
listing $code in the “variable” watch-window.

I tried to fix it and patched the perl5db.pl module to handle this
case, so the IDE replies something like
“$code: code = 0x1a81c40”.

Since the module source is more than 700 lines long, I think useful
giving here the four chunks I added: I simply added another "elsif"
case just before the ending "else", so you should be able to insert
these few lines directly in your dbTemplate.txt in the correct
position.

#within SizeOfDerefValue sub:
} elsif ($refType eq 'CODE') {
return length($reference);

#within ShortEval sub:
} elsif ($refType eq 'CODE') {
$reference =~ /\((.*)\)/;
return "code = $1";

#within LongEval sub:
} elsif ($refType eq 'CODE') {
$reference =~ /\((.*)\)/;
$retValue = "code = $1";

#within ShowDerefValues sub:
} elsif ($refType eq 'CODE') {
$type = "code";
$reference =~ /\((.*)\)/;
$value = "$1";

I hope this helps.

Regards.


You might want to post this on Sourceforge if that's where the project
is located.

--S
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top