in reply to Multiple versions of a module

You can use a custom import() routine (see use) to change the API of a module based on the argument list to use, but that would break the possibility of using different APIs in different sections of the program or at least it would require you to bind the API version to the caller's package which would be messy.

If you're going to base all your functionality on objects, you could also base the API version on some argument to the object's constructor.

In any case, I wouldn't recommend doing either. If the changes are minor, you could probably get away with adding new versions of routines under another name. If the changes are significant, I'd probably just create a new module, possibly incorporating the main version number in the module name, i.e. use Module2; vs use Module;