With regard to the debugging print statements, here's something I do that works very well for me in situations like this. First, at the top of the file, set a debug flag:
$debug = 1;
Then I make a debug subroutine:
sub Debug {
if ( $debug ) {
my $msg = shift;
print $msg, "\n";
}
}
Then throughout the code, I drop in things like:
Debug( "Entering calculation phase." );
Debug( "Pre-calculation value of \$x: $x" );
...
Debug( "Leaving calculation phase." );
Debug( "Post-calculation value of \$x: $x" );
This allows me to check values of just about anything, at any point in execution. Then when you're done debugging, you just set
$debug to zero and you're done. Personally, I usually leave the debug code in place, in case I ever need to come back and fiddle with the program and need to debug it again.
HTH
___________________
Kurt