in reply to uninitialized value

There are two debugging approaches. The true way is to use a print statement, perhaps print "($a)<$b>[$c]{$d}!$e!|$f|#$g#~$h~>$i{h}<\n"; (though that makes me wonder if you meant $h).

The other approach is also pretty good, and it's to use the debugger, set a breakpoint on that line, and to use x $a to print the value of the variable in question at that point.

It might be worth exploring how to make the warning a little more explicit, but since there are a lot of things that can produce an undefined value, it may be quite complex.