in reply to Unloading a module completely

Search for load/reload on CPAN. What it comes down to is undef, and delete, as in undef *PaCkAGe;, and delete $INC{'PaCkAGe.pm'};

MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
** The third rule of perl club is a statement of fact: pod is sexy.

Replies are listed 'Best First'.
Re: Re: Unloading a module completely
by holo (Monk) on Dec 07, 2003 at 16:07 UTC

    undef *PaCkAGe; does not work for me -- That's the first thing I've tried anyway.

      Right, try something like
      { no strict 'refs'; for( keys %PaCkAGe:: ){ undef *{"PaCkAGe::$_"}; delete $PaCkAGe::{$_}; delete $::PaCkAGe::{$_}; } }

      MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
      I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
      ** The third rule of perl club is a statement of fact: pod is sexy.

Re: Re: Unloading a module completely
by ambrus (Abbot) on Dec 08, 2003 at 18:45 UTC

    use Symbol(); Symbol::delete_package("PaCkAGe") instead of undef *PaCkAGe; will remove all symbols of package, but you surely won't be able to remove all side effects of a package unless the package itself supports that.

    But if you fork (or start new ithread) before loading the package, then ending that process/thread will almost certainly remove the package completely.