I have a homegrown solution that simply calls the commandline version of PKware's PKZIP program to unzip files with passwords and such. Something like:
use File::Spec;
$pkzip=File::Spec->catfile('path','to','pkzipc.exe');
qx!$pkzip -extract -pass mypassphrase file.zip!;