On my way home last night I realized I could strip out more of my script and answer
the question myself. I proved that a failed prepare does NOT close the db handle.
The problem was in how I was passing the db handle to my error subroutine.
I had coded...
my $mColsth = $dbConn->prepare( $mCols ) or
processError("PrepareFailed","$mCols","$dbConn");
which (I believe) was treating the object reference as a string.
I changed it to....
my $mColsth = $dbConn->prepare( $mCols ) or
processError("PrepareFailed","$mCols",$dbConn);
It works as expected now. Sorry to have bothered you.
Paula