Class::MakeMethods::Autoload - Declare generated subs with AUTOLOAD
package MyObject;
use Class::MakeMethods::Autoload 'Standard::Hash::scalar';
package main;
my $obj = bless {}, 'MyObject';
$obj->foo("Foozle");
print $obj->foo();
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',
};
The following warnings and errors may be produced when using
Class::MakeMethods::Attribute to generate methods. (Note that this list does
not include run-time messages produced by calling the generated methods, or
the standard messages produced by Class::MakeMethods.)
- No default method type; can't autoload
- You must declare a default method type, generally by
passing its name to a "use Class::MakeMethods::Autoload"
statement, prior to autoloading any methods.
- Construction of %s method %s failed to produce usable
method
- Indicates that Autoload successfully called
Class::MakeMethods->make to generate the requested method, but
afterwards was not able to invoke the generated method. You may have
selected an incompatible method type, or the method may not have been
installed successfully.
See Class::MakeMethods for general information about this distribution.
For distribution, installation, support, copyright and license information, see
Class::MakeMethods::Docs::ReadMe.