in reply to undef-ing an active subroutine

You can delete it from the symbol table:
use strict; use warnings; sub foo { delete $::{foo}; print "alive\n"; } foo(); eval "foo()" or die $@;
Note that I put the second call to foo into an eval because Perl looks up the symbol at compile type.
Perl 6 - links to (nearly) everything that is Perl 6.