A namespace or package is a container for MyPackage::MySubPack::my_func() symbols.
A module, on the other hand, is a file that can contain any number of namespaces, or simply drop everything into the current namespace (although it shouldn't).
It is possible to switch to other packages using the package statement. However, you then have to remember not to use them, because Perl will look for a file corresponding to that name.
A module can put itself in a completely different namespace than its designated module name. (e.g: a module loaded with use TheModule; can declare all of its identifiers in the CompletelyDifferentPackage namespace.)