<B>WARNING: Replacing the base class entirely, as opposed to applying roles to
the base class, is strongly discouraged. This recipe is provided solely for
reference when encountering older code that does this.B>
A common extension is to provide an alternate base class. One way to
do that is to make a MyApp::Base and add extends MyApp::Base to every class in your application. Thats pretty
tedious. Instead, you can create a Moose-alike module that sets the
base object class to MyApp::Base for you.
Then, instead of writing use Moose you can write use MyApp::UseMyBase.
In this particular example, our base class issues some debugging
output every time a new object is created, but you can think of some
more interesting things to do with your own base class.
This uses the magic of Moose::Exporter. When we call Moose::Exporter->setup_import_methods( also => Moose ) it builds
import and unimport methods for you. The also => Moose
bit says that we want to export everything that Moose does.
The import method that gets created will call our init_meta
method, passing it for_caller => $caller as its
arguments. The $caller is set to the class that actually imported
us in the first place.
See the Moose::Exporter docs for more details on its API.