| Sub-Delete documentation | view source | Contained in the Sub-Delete distribution. |
Sub::Delete - Perl module enabling one to delete subroutines
1.00002
use Sub::Delete;
sub foo {}
delete_sub 'foo';
eval 'foo();1' or die; # dies
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).
This module requires perl 5.8.3 or higher.
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.)
If you find any bugs, please report them to the author via e-mail.
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.
perltodo, which has delete &sub listed as a possible future feature
Symbol::Glob and Symbol::Util, both of which predate this module (but I only discovered them recently), and which allow one to delete any arbitrary slot from a glob. Neither of them takes perl 5.10 constants into account, however. They also both differ from this module, in that a subroutine referenced in compiled code can no longer be called if deleted from its glob. The entire glob must be replaced (which this module does).
| Sub-Delete documentation | view source | Contained in the Sub-Delete distribution. |