Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

petdance (2468)

petdance
  andy@petdance.com
http://www.perlbuzz.com/
AOL IM: petdance (Add Buddy, Send Message)
Yahoo! ID: petdance (Add User, Send Message)
Jabber: petdance@gmail.com

I'm Andy Lester, and I like to test stuff. I also write for the Perl Journal, and do tech edits on books. Sometimes I write code, too.

Journal of petdance (2468)

Friday April 02, 2004
05:50 PM

HOWTO: Finding errors "at (eval 469) line 3"

[ #18179 ]
If you've ever used eval, or any modules, chances are you've had an error like this:

Use of uninitialized value in string eq at (eval 469) line 3.

It's telling you that somewhere on the 3rd line of the code passed to the 469th call to eval, you're using an undefined value. That's not very fun! Who knows where eval was called the 469th time? You could walk through your program and try to keep track of every time eval was called, but that's not very fun. So what to do?

Turn your warning handler into something more descriptive. At the top of your code, do this:

use Carp;
$SIG{__WARN__} = \&carp;
$SIG{__DIE__} = \&confess;

cluck and confess are equivalent to warn and die, respectively, except that they print a stack trace as well as the error message. Now, rerun your code and get

Use of uninitialized value in string eq at (eval 469) line 3.
at /home/alester/Lib/TW/CP.pm line 116

No counting of eval calls required!

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • Got caught out with that last week. Thankfully there were only 2 evals to look at in the code, and my audit trail gave a pretty good clue as to the problem. However, it did prompt me think that there must be a better way to report eval errors. So thanks for that, I shall be adding a few extra lines in future :)