I am trying to wipe a package of its local symbols, but not affect any sub packages under that package, to try to reload a module. The @ISA I noticed stays the same with Devel::Peek, so I put in the undef on @ISA. Are there any problems with this code which I dont see?
use strict;
use Data::Dumper;
use Devel::Peek;
BEGIN {
package p1::p2;
use vars qw|$VERSION @ISA $num2 |;
$VERSION = 0.02;
@ISA = qw( Exporter Inherit2);
$num2 = 2;
sub s2 { return 2;}
package p1;
use vars qw|$VERSION @ISA $num1 |;
$VERSION = 0.01;
@ISA = qw( Exporter Inherit1 );
sub s1 {return 1;}
$num1 = 1;
package main;
}
BEGIN{
no strict 'refs';
#print Dumper(\%{*p1::});
undef(@{'p1::ISA'}); #magical
foreach(keys %p1::){
unless(length($_) > 2 && substr($_, -2, 2) eq '::'){
delete ${p1::}{$_};
}
}
#print Dumper(\%{*p1::});
}