Sub::Delete(3) Perl module enabling one to delete subroutines

VERSION

1.00002

SYNOPSIS


use Sub::Delete;
sub foo {}
delete_sub 'foo';
eval 'foo();1' or die; # dies

DESCRIPTION

This module provides one function, "delete_sub", that deletes the subroutine whose name is passed to it. (To load the module without importing the function, write "use Sub::Delete();".)

This does more than simply undefine the subroutine in the manner of "undef &foo", which leaves a stub that can trigger AUTOLOAD (and, consequently, won't work for deleting methods). The subroutine is completely obliterated from the symbol table (though there may be references to it elsewhere, including in compiled code).

PREREQUISITES

This module requires perl 5.8.3 or higher.

LIMITATIONS

If you take a reference to a glob containing a subroutine, and then delete the subroutine with "delete_sub", you will find that the glob you referenced still has a subroutine in it. This is because "delete_sub" removes a glob, replaces it with another, and then copies the contents of the old glob into the new one, except for the "CODE" slot. (This is nearly impossible to fix without breaking constant::lexical.)

BUGS

If you find any bugs, please report them to the author via e-mail.

AUTHOR & COPYRIGHT

Copyright (C) 2008-10 Father Chrysostomos (sprout at, um, cpan dot org)

This program is free software; you may redistribute or modify it (or both) under the same terms as perl.