logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Class::Loader - Load modules and create objects on demand.

Author

       Vipul Ved Prakash, <mail@vipul.net>

Description

       Certain applications like to defer the decision to use a particular module till runtime. This is possible
       in perl, and is a useful trick in situations where the type of data is not known at compile time and the
       application doesn't wish to pre-compile modules to handle all types of data it can work with. Loading
       modules at runtime can also provide flexible interfaces for perl modules. Modules can let the programmer
       decide what modules will be used by it instead of hard-coding their names.

       Class::Loader is an inheritable class that provides a method, _load(), to load a module from disk and
       construct an object by calling its constructor. It also provides a way to map modules names and
       associated metadata with symbolic names that can be used in place of module names at _load().

License

       Copyright (c) 2001, Vipul Ved Prakash.  All  rights  reserved.  This  code  is  free  software;  you  can
       redistribute it and/or modify it under the same terms as Perl itself.

perl v5.36.0                                       2022-10-13                                 Class::Loader(3pm)

Methods

new()
           A basic constructor. You can use this to create an object of Class::Loader, in case you don't want to
           inherit Class::Loader.

       _load()_load()  loads a module and calls its constructor. It returns the newly constructed object on success
           or a non-true value on failure. The first argument can be the name of the key in which  the  returned
           object  is  stored. This argument is optional. The second (or the first) argument is a hash which can
           take the following keys:

           Module
               This is name of the class to load. (It is not the module's filename.)

           Name
               Symbolic name of the module defined with _storemap(). Either one of Module or Name keys  must  be
               present in a call to _load().

           Constructor
               Name of the Module constructor. Defaults to "new".

           Args
               A reference to the list of arguments for the constructor. _load() calls the constructor with this
               list. If no Args are present, _load() will call the constructor without any arguments.

           CPAN
               If  the  Module  is  not  installed on the local system, _load() can fetch & install it from CPAN
               provided the CPAN key is present. This functionality assumes  availability  of  a  pre-configured
               CPAN shell.

       _storemap()
           Class::Loader  maintains a class table that maps symbolic names to parameters accepted by _load(). It
           takes a hash as argument whose keys are symbolic names and value are hash references that  contain  a
           set of _load() arguments. Here's an example:

               $self->_storemap ( "URL" => { Module => "Filter::URL",
                                             Constructor => "foo",
                                             Args => [qw(bar baz)],
                                           }
                                );

               # time passes...

               $self->{handler} = $self->_load ( Name => 'URL' );

       _retrmap()_retrmap()  returns  the  entire map stored with Class::Loader. Class::Loader maintains separate maps
           for different classes, and _retrmap() returns the map valid in the caller class.

Name

       Class::Loader - Load modules and create objects on demand.

See Also

AnyLoader(3)

Synopsis

           package Web::Server;
           use Class::Loader;
           @ISA = qw(Class::Loader);

           $self->_load( 'Content_Handler', {
                                    Module => "Filter::URL",
                               Constructor => "new",
                                      Args => [ ],
                                }
                       );

Version

           $Revision: 2.2 $
           $Date: 2001/07/18 20:21:39 $

See Also