in reply to packages within packages

use does not "invoke" or declare a package, it just loads the module with the given name (and runs its import() method).

Since there is no WineException.pm, you can't use WineException

Also, IMHO base usually makes problems less apparent. I prefer our @ISA = qw( ... ) combined with a use ... if needed.