My general thought would be since I know if the file is encrypted, to simply pass that in as a parameter and make a system call to an unzip program (PKZIP in our case). Otherwise, simply make use of the Archive::ZIP module routines. Put it together into a small subroutine, pass it the zip file name as a required parameter and the password as an optional parameter. I might post some pseudo-code when I have something put together.
"Ex libris un peut de tout"