You can use Apache::PerlRun, which clears globals for you, or you can fix the problem in your script.
I see at least one possible cause of the problem. Your sub HANDLE_PRODUCTS() is referring to the variable $email_body, which is a lexical declared outside the subroutine. That creates a closure, and this sub keeps a private copy of that variable from then on. The best way to fix this is to pass a reference to $email_body into the subroutine instead.