Class::Unload - Unload a class


Class-Unload documentation Contained in the Class-Unload distribution.

Index


Code Index:

NAME

Top

Class::Unload - Unload a class

VERSION

Top

Version 0.05

SYNOPSIS

Top

Unload a class

    use Class::Unload;
    use Class::Inspector;

    use Some::Class;

    Class::Unload->unload( 'Some::Class' );
    Class::Inspector->loaded( 'Some::Class' ); # Returns false

    require Some::Class; # Reloads the class

METHODDS

Top

unload $class

Unloads the given class by clearing out its symbol table and removing it from %INC.

AUTHOR

Top

Dagfinn Ilmari Mannsåker, <ilmari at ilmari.org>

SEE ALSO

Top

Class::Inspector

BUGS

Top

Please report any bugs or feature requests to bug-class-unload at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Class-Unload. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Class::Unload




You can also look for information at:

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Class-Unload

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Class-Unload

* CPAN Ratings

http://cpanratings.perl.org/d/Class-Unload

* Search CPAN

http://search.cpan.org/dist/Class-Unload

* Git reposiory

http://git.ilmari.org/?p=Class-Unload.git

git://git.ilmari.org/Class-Unload.git

ACKNOWLEDGEMENTS

Top

Thanks to Matt S. Trout, James Mastros and Uri Guttman for various tips and pointers.

COPYRIGHT & LICENSE

Top


Class-Unload documentation Contained in the Class-Unload distribution.
package Class::Unload;

use warnings;
use strict;
no strict 'refs'; # we're fiddling with the symbol table

use Class::Inspector;

use 5.005;
use vars qw($VERSION);

BEGIN {
	$VERSION = '0.05';
}

sub unload {
    my ($self, $class) = @_;

    return unless Class::Inspector->loaded( $class );

    # Flush inheritance caches
    @{$class . '::ISA'} = ();

    my $symtab = $class.'::';
    # Delete all symbols except other namespaces
    for my $symbol (keys %$symtab) {
        next if substr($symbol, -2, 2) eq '::';
        delete $symtab->{$symbol};
    }
    
    my $inc_file = join( '/', split /(?:'|::)/, $class ) . '.pm';
    delete $INC{ $inc_file };
    
    return 1;
}

1; # End of Class::Unload