NAME

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

DEPENDENCIES

  • Symbol

  • File::Spec

INSTALLATION

To install this module type the following:

  • perl Makefile.PL

  • make

  • make test

  • 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;

 ## INVOKING METHOD 
 my $method = 'new';
 if ( $cl->isLoaded and $class->can( 'new' ) ) {
	my $obj = $cl->invoke( 'new', arg1=> 1, arg2=> 2 );
	$obj->method2;
 }

 ## NOT NECESSARY AS ONCE CLASS HAS BEEN LOADED CAN INVOKE DIRECTLY
 if ( $cl->isLoaded and $class->can( 'new' ) ) {
	my $obj = $class->new( arg1=> 1, arg2=> 2 );
	$obj->method2;
 }

 ## 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
  • class => name of class to dynamically load

Output
  • Class::Runtime object

getPath

Method used to retrieve path associated with this object

Input
  • None

Output
  • array of paths

  • integer 0 if no paths exist

addPath

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

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

Output
  • array of paths

  • undef if error

dropPath

Method used to remove path from object search path

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

Output
  • array of paths

  • undef if error

isLoaded

Method used to check whether given class is loaded.

Input
  • None

Output
  • 1 if loaded

  • 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
  • None

Output
  • 1 on successful load

  • undef if error (setting $@)

unload

Method used to unload class/library

Input
  • None

Output
  • 1 on successful unload

  • undef if error

invoke

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

Input
  • name of method

  • remaining list of arguments to pass off to invoked method

Output
  • value of returned method call

HISTORY

  • 2002/02/14 Created

    2003/07/07 Modified to correct issues with method invoke

SUPPORT AND SUGGESTIONS

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

AUTHOR

  • Stathy G. Touloumis <stathy-classruntime@stathy.com>

CREDITS

  • Per Einar Ellefsen - For providing the code to conver class to file path portably.

  • Bhavesh Jardosh - For providing bug info in test.pl and method invoke.

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.