in reply to Re^2: What delete from symbol table really means? (Deleting typeglob of a specified package)
in thread What delete from symbol table really means? (Deleting typeglob of a specified package)
# # of Safe.pm lineage # sub delete_package ($) { my $pkg = shift; # expand to full symbol table name if needed unless ($pkg =~ /^main::.*::$/) { $pkg = "main$pkg" if $pkg =~ /^::/; $pkg = "main::$pkg" unless $pkg =~ /^main::/; $pkg .= '::' unless $pkg =~ /::$/; } my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/; my $stem_symtab = *{$stem}{HASH}; return unless defined $stem_symtab and exists $stem_symtab->{$leaf +}; # free all the symbols in the package my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH}; foreach my $name (keys %$leaf_symtab) { undef *{$pkg . $name}; } # delete the symbol table %$leaf_symtab = (); delete $stem_symtab->{$leaf}; }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^4: What delete from symbol table really means? Symbol::delete_package
by LanX (Saint) on Feb 16, 2015 at 19:42 UTC |