This package provides a generate-on-demand interface to Class::MakeMethods.
When your class uses this package, it imports an AUTOLOAD function that resolves missing methods by using
Class::MakeMethods to generate and install a standard type of method.
You must specify the type of method to be generated by passing a single argument to your use
Class::MakeMethods::Autoload statement, which can take any of these forms:
• A Class::MakeMethods generator name and method type.
Here are three examples:
use Class::MakeMethods::Autoload 'Standard::Hash:scalar';
use Class::MakeMethods::Autoload 'Basic::Universal::no_op';
use Class::MakeMethods::Autoload
'::Class::MakeMethod::Composite::Global:array';
• A reference to a subroutine which will be called for each requested function name and which is
expected to return the name of the method generator to use.
Here's a contrived example which generates scalar accessors for methods except those with a digit in
their name, which are treated as globals.
use Class::MakeMethods::Autoload sub {
my $name = shift;
( $name =~ /\d/ ) ? 'Standard::Global::scalar'
: 'Standard::Hash::scalar'
};
• A reference to a hash which defines which method type to use based on the name of the requested
method. If a key exists which is an exact match for the requested function name, the associated value
is used; otherwise, each of the keys is used as a regular expression, and the value of the first one
that matches the function name is used. (For regular expression matching, the keys are tested in
reverse length order, longest to shortest.)
Here's an example which provides a new() constructor, a DESTROY() method that does nothing, and a
wildcard match that provides scalar accessors for all other Autoloaded methods:
use Class::MakeMethods::Autoload {
'new' => 'Standard::Hash::new',
'.*' => 'Standard::Hash::scalar',
'DESTROY' => 'Standard::Universal::no_op',
};
Here's a more sophisticated example which causes all-upper-case method names to be generated as
globals, those with a leading upper-case letter to be generated as inheritable data methods, and
others to be normal accessors:
use Class::MakeMethods::Autoload {
'new' => 'Standard::Hash::new',
'.*' => 'Standard::Hash::scalar',
'[A-Z].*' => 'Standard::Inheritable::scalar',
'[A-Z0-9]+' => 'Standard::Global::scalar',
'DESTROY' => 'Standard::Universal::no_op',
};