ungensym $sym; # no effect
- # localize *FOO IO handle but not $FOO, %FOO, etc.
- my $save_fooio = *FOO{IO} || geniosym;
+ # replace *FOO{IO} handle but not $FOO, %FOO, etc.
*FOO = geniosym;
- use_foo();
- *FOO{IO} = $save_fooio;
- print qualify("x"), "\n"; # "Test::x"
- print qualify("x", "FOO"), "\n" # "FOO::x"
+ print qualify("x"), "\n"; # "main::x"
+ print qualify("x", "FOO"), "\n"; # "FOO::x"
print qualify("BAR::x"), "\n"; # "BAR::x"
print qualify("BAR::x", "FOO"), "\n"; # "BAR::x"
print qualify("STDOUT", "FOO"), "\n"; # "main::STDOUT" (global)
delete_package('Foo::Bar');
print "deleted\n" unless exists $Foo::{'Bar::'};
-
=head1 DESCRIPTION
C<Symbol::gensym> creates an anonymous glob and returns a reference
this routine is not exported by default--you may want to import it
explicitly.
+=head1 BUGS
+
+C<Symbol::delete_package> is a bit too powerful. It undefines every symbol that
+lives in the specified package. Since perl, for performance reasons, does not
+perform a symbol table lookup each time a function is called or a global
+variable is accessed, some code that has already been loaded and that makes use
+of symbols in package C<Foo> may stop working after you delete C<Foo>, even if
+you reload the C<Foo> module afterwards.
+
=cut
BEGIN { require 5.005; }
@EXPORT = qw(gensym ungensym qualify qualify_to_ref);
@EXPORT_OK = qw(delete_package geniosym);
-$VERSION = 1.04;
+$VERSION = '1.07';
my $genpkg = "Symbol::";
my $genseq = 0;