in reply to
DBD::Anydata, Use of uninitialized value at...
It's a bit hard to tell without knowing which line is line 16 (if it's even here). I suggest looking at your code and determining which uninitialized value (on line 16) that the error is referring to. Then I would only execute the part in question once the variable was determined to have a value. Example:
run_code_on_line_16( $variable ) if $variable;
It seems from your output, that this line could be the culprit:
print "$sql\n[@params]\n" if $DEBUG;
Could @params be getting polluted somewhere?
You might also check the values of @internal_user_data after you set them from @_. Perhaps there is something going wrong with the data being passed.
I suppose you could always turn off warnings... :)