Provided by: libclass-makemethods-perl_1.01-7_all bug

NAME

       Class::MakeMethods::Autoload - Declare generated subs with AUTOLOAD

SYNOPSIS

         package MyObject;
         use Class::MakeMethods::Autoload 'Standard::Hash::scalar';

         package main;
         my $obj = bless {}, 'MyObject';

         $obj->foo("Foozle");
         print $obj->foo();

DESCRIPTION

       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',
             };

DIAGNOSTICS

       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 ALSO

       See Class::MakeMethods for general information about this distribution.

       For distribution, installation, support, copyright and license information, see
       Class::MakeMethods::Docs::ReadMe.