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.07

SYNOPSIS

Top

    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

METHODS

Top

unload $class

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

SEE ALSO

Top

Class::Inspector

ACKNOWLEDGEMENTS

Top

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

AUTHOR

Top

Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>;

COPYRIGHT AND LICENSE

Top


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

package Class::Unload;
BEGIN {
  $Class::Unload::VERSION = '0.07';
}
# ABSTRACT: Unload a class

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

use Class::Inspector;


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 $symbol =~ /\A[^:]+::\z/;
        delete $symtab->{$symbol};
    }
    
    my $inc_file = join( '/', split /(?:'|::)/, $class ) . '.pm';
    delete $INC{ $inc_file };
    
    return 1;
}


1; # End of Class::Unload

__END__