Sometime during the 3.0 development the -e -P options became position dependent, i.e.
Used to work (at least up to 3.0d): zip -P passwd -e archive.zip file
This does not work for 3.0 final and 3.1b, now it needs to be zip -e -P passwd archive.zip file
This is caused by an unconditional key_needed = 1 in case 'e'; line 2980, file zip.c
Thanks (belated) for the report. Unless the Zip maintainer objects,
the old behavior should be restored in Zip version 3.1d (beta). That
is, if "-P" is specified, then "-e" is redundant but harmless, and its
position is not significant.