I've found Archive::Zip to be better when it comes to memory usage, and you can write it to disk quickly and it will then be shorter. To do it all on disk, I agree with the above Monks that you ought to do this in the shell using system. I find zip to be a more resilient format with better error-checking--it is not as good compression as tar/bzip2, or 7zip, but faster than the latter and one-step compared to the former.