in reply to Program hanging up

You've got two relatively complex things going on here:
  1. Creating a Zip file (Win32::P::C... and such)
  2. Sending a mail message
I guess the basic question is, which one is failing? Done any diagnostics to get that far?

Secondly, you're firing off another process to create this zip file and then immediately trying to send the file created. You've got two concurrent (DETACHED) processes fighting for access to this file. I'll bet you've got some sort of perverse deadlock in there.

I think instead of W::P::C to fire off a process to create the file, just use system() or qx{}. That way you: create the file, mail it, create the next file, mail it -- no contention. I'll leave the style nits to someone else.