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.