NAME
    Class::Runtime - API for dynamic class loading/unloading/status

DEPENDENCIES
    o   Symbol

    o   File::Spec

INSTALLATION
    To install this module type the following:

    o perl Makefile.PL

    o make

    o make test

    o make install

OVERVIEW
    Class for dynamically loading/unloading/stat on modules. Currently it is
    designed for loading a class local to the system at runtime. Future
    versions may include loading in a distributed environment.

    A specific search path can be associated with the object which will be
    'unshifted' onto @INC before attempting to load the class and 'shifted'
    off after attempting to load.

    Also, a class can be checked whether it is loaded or not in the process.

SYNOPSIS
      my $class = 'MyClass::MySubClass';
      my $obj = Class::Runtime->new( class=> $class );

      ## LOADING CLASS AT RUNTIME
      unless ( $cl->load ) {
            warn "Error in loading class\n";
            warn "\n\n", $@, "\n\n" if DEBUG;
      }

      ## CHECKING FOR CLASS AVAILABILITY AT RUNTIME
      unless ( $cl->isLoaded ) {
            warn 'Class - ', $class, ' - is loaded', "\n";
      }

      my $newPath;
      ## ADDING SEACH PATH TO OBJECT
      ## Multiple
      $newPath = $cl->addPath( path=> [ qw( /tmp/lib /tmp/lib2 ) ] );
  
      ##OR Single
      $newPath = $cl->addPath( path=> '/tmp/lib' );

      ## REMOVING SEARCH PATH FROM OBJECT
      ## Multiple
      $newPath = $cl->dropPath( path=> [ qw( /tmp/lib /tmp/lib2 ) ] );
  
      ##OR Single
      $newPath = $cl->dropPath( path=> '/tmp/lib' );

      ## GETTING PATH ASSOCIATED WITH OBJECT
      my @path = $cl->getPath;

      ## UNLOADING CLASS
      if ( $cl->isLoaded ) {
            $cl->unload or warn 'Unable to unload class - ', $class, "\n";
      }
  
METHODS
  new CONSTRUCTOR

    Creates new object and initializes member variables if passed in as
    arguments. Takes parameterized argument list.

    *Input*
        o class => name of class to dynamically load

    *Output*
        o Class::Runtime object

  getPath

    Method used to retrieve path associated with this object

    *Input*
        o None

    *Output*
        o array of paths

        o integer 0 if no paths exist

  addPath

    Method used to add path to object path list to search from

    *Input*
        o path => As a single string or as a reference to an array

    *Output*
        o array of paths

        o undef if error

  dropPath

    Method used to remove path from object search path

    *Input*
        o path=> As a single string or as a reference to an array

    *Output*
        o array of paths

        o undef if error

  isLoaded

    Method used to check whether given class is loaded.

    *Input*
        o None

    *Output*
        o 1 if loaded

        o 0 if not loaded

  load

    Method used to load library/class. If a path has been associated with
    this object it will be 'unshifted' onto the global @INC array.
    Immediately after the attempted load the paths 'unshifted' onto the @INC
    array will be 'spliced' out. This is done so as to prevent any wrongful
    modification of @INC since the loading library may modify @INC or
    perhaps some other code.

    *Input*
        o None

    *Output*
        o 1 on successful load

        o undef if error (setting $@)

  unload

    Method used to unload class/library

    *Input*
        o None

    *Output*
        o 1 on successful unload

        o undef if error

  invoke

    Method used to load class/library and call specific method with that
    library.

    *Input*
        o method => method name

        o argument => reference to array of arguments to pass to method call

    *Output*
        o value of returned method call

        o undef if error

HISTORY
    o 2002/02/14 Created

SUPPORT AND SUGGESTIONS
    Currently you can contact the author at the email address listed below.

AUTHOR
    1 Stathy G. Touloumis <stathy-classruntime@stathy.com>

COPYRIGHT AND LICENCE
    Copyright (C) 2002 Stathy G. Touloumis

    This is free software; you can redistribute it and/or modify it under
    the same terms as Perl itself.

