Document Carp's global variables + provide tests
[p5sagit/p5-mst-13.2.git] / lib / Symbol.pm
index d531808..5c0843e 100644 (file)
@@ -15,11 +15,8 @@ Symbol - manipulate Perl symbols and their names
 
     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"
@@ -37,7 +34,6 @@ Symbol - manipulate Perl symbols and their names
     delete_package('Foo::Bar');
     print "deleted\n" unless exists $Foo::{'Bar::'};
 
-
 =head1 DESCRIPTION
 
 C<Symbol::gensym> creates an anonymous glob and returns a reference
@@ -71,6 +67,16 @@ C<Symbol::delete_package> wipes out a whole package namespace.  Note
 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 and in its sub-packages. 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; }
@@ -80,7 +86,7 @@ require Exporter;
 @EXPORT = qw(gensym ungensym qualify qualify_to_ref);
 @EXPORT_OK = qw(delete_package geniosym);
 
-$VERSION = 1.04;
+$VERSION = '1.05';
 
 my $genpkg = "Symbol::";
 my $genseq = 0;