[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@18.191.192.250: ~ $
package Symbol;

=head1 NAME

Symbol - manipulate Perl symbols and their names

=head1 SYNOPSIS

    use Symbol;

    $sym = gensym;
    open($sym, "filename");
    $_ = <$sym>;
    # etc.

    ungensym $sym;      # no effect

    # replace *FOO{IO} handle but not $FOO, %FOO, etc.
    *FOO = geniosym;

    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)
    print qualify(\*x), "\n";              # returns \*x
    print qualify(\*x, "FOO"), "\n";       # returns \*x

    use strict refs;
    print { qualify_to_ref $fh } "foo!\n";
    $ref = qualify_to_ref $name, $pkg;

    use Symbol qw(delete_package);
    delete_package('Foo::Bar');
    print "deleted\n" unless exists $Foo::{'Bar::'};

=head1 DESCRIPTION

C<Symbol::gensym> creates an anonymous glob and returns a reference
to it.  Such a glob reference can be used as a file or directory
handle.

For backward compatibility with older implementations that didn't
support anonymous globs, C<Symbol::ungensym> is also provided.
But it doesn't do anything.

C<Symbol::geniosym> creates an anonymous IO handle.  This can be
assigned into an existing glob without affecting the non-IO portions
of the glob.

C<Symbol::qualify> turns unqualified symbol names into qualified
variable names (e.g. "myvar" -E<gt> "MyPackage::myvar").  If it is given a
second parameter, C<qualify> uses it as the default package;
otherwise, it uses the package of its caller.  Regardless, global
variable names (e.g. "STDOUT", "ENV", "SIG") are always qualified with
"main::".

Qualification applies only to symbol names (strings).  References are
left unchanged under the assumption that they are glob references,
which are qualified by their nature.

C<Symbol::qualify_to_ref> is just like C<Symbol::qualify> except that it
returns a glob ref rather than a symbol name, so you can use the result
even if C<use strict 'refs'> is in effect.

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. 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; }

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(gensym ungensym qualify qualify_to_ref);
@EXPORT_OK = qw(delete_package geniosym);

$VERSION = '1.07';

my $genpkg = "Symbol::";
my $genseq = 0;

my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT);

#
# Note that we never _copy_ the glob; we just make a ref to it.
# If we did copy it, then SVf_FAKE would be set on the copy, and
# glob-specific behaviors (e.g. C<*$ref = \&func>) wouldn't work.
#
sub gensym () {
    my $name = "GEN" . $genseq++;
    my $ref = \*{$genpkg . $name};
    delete $$genpkg{$name};
    $ref;
}

sub geniosym () {
    my $sym = gensym();
    # force the IO slot to be filled
    select(select $sym);
    *$sym{IO};
}

sub ungensym ($) {}

sub qualify ($;$) {
    my ($name) = @_;
    if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) {
	my $pkg;
	# Global names: special character, "^xyz", or other. 
	if ($name =~ /^(([^a-z])|(\^[a-z_]+))\z/i || $global{$name}) {
	    # RGS 2001-11-05 : translate leading ^X to control-char
	    $name =~ s/^\^([a-z_])/'qq(\c'.$1.')'/eei;
	    $pkg = "main";
	}
	else {
	    $pkg = (@_ > 1) ? $_[1] : caller;
	}
	$name = $pkg . "::" . $name;
    }
    $name;
}

sub qualify_to_ref ($;$) {
    return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller };
}

#
# 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};
}

1;

Filemanager

Name Type Size Permission Actions
App Folder 0755
Archive Folder 0755
Attribute Folder 0755
B Folder 0755
CPAN Folder 0755
Class Folder 0755
Compress Folder 0755
Config Folder 0755
DBM_Filter Folder 0755
Devel Folder 0755
Encode Folder 0755
ExtUtils Folder 0755
File Folder 0755
Filter Folder 0755
Getopt Folder 0755
HTTP Folder 0755
I18N Folder 0755
IO Folder 0755
IPC Folder 0755
JSON Folder 0755
LWP Folder 0755
Locale Folder 0755
Log Folder 0755
Math Folder 0755
Memoize Folder 0755
Module Folder 0755
Net Folder 0755
Object Folder 0755
Package Folder 0755
Perl Folder 0755
PerlIO Folder 0755
Pod Folder 0755
Search Folder 0755
Term Folder 0755
Test Folder 0755
Text Folder 0755
Thread Folder 0755
Tie Folder 0755
Time Folder 0755
URI Folder 0755
Unicode Folder 0755
User Folder 0755
Version Folder 0755
encoding Folder 0755
overload Folder 0755
pod Folder 0755
unicore Folder 0755
vendor_perl Folder 0755
warnings Folder 0755
AnyDBM_File.pm File 2.56 KB 0644
AutoLoader.pm File 14.66 KB 0644
AutoSplit.pm File 19.18 KB 0644
Benchmark.pm File 27.87 KB 0644
CORE.pod File 2.7 KB 0644
CPAN.pm File 132.91 KB 0644
DB.pm File 18.43 KB 0644
DBM_Filter.pm File 14.06 KB 0644
DirHandle.pm File 1.52 KB 0644
Dumpvalue.pm File 16.5 KB 0644
English.pm File 4.34 KB 0644
FileCache.pm File 5.44 KB 0644
FileHandle.pm File 6.62 KB 0644
FindBin.pm File 4.45 KB 0644
LWP.pm File 21.15 KB 0644
Memoize.pm File 34.4 KB 0644
NEXT.pm File 18.05 KB 0644
PerlIO.pm File 10.19 KB 0644
Safe.pm File 24.03 KB 0644
SelectSaver.pm File 1.05 KB 0644
SelfLoader.pm File 16.97 KB 0644
Symbol.pm File 4.68 KB 0644
Test.pm File 28.13 KB 0644
Thread.pm File 8.09 KB 0644
UNIVERSAL.pm File 6.97 KB 0644
URI.pm File 33.01 KB 0644
XSLoader.pm File 9.99 KB 0644
_charnames.pm File 29.8 KB 0644
autouse.pm File 4.14 KB 0644
base.pm File 6.37 KB 0644
bigint.pm File 17.44 KB 0644
bignum.pm File 18.23 KB 0644
bigrat.pm File 14.11 KB 0644
blib.pm File 2.04 KB 0644
bytes.pm File 2.96 KB 0644
bytes_heavy.pl File 758 B 0644
charnames.pm File 19.22 KB 0644
deprecate.pm File 3.01 KB 0644
diagnostics.pm File 17.96 KB 0644
dumpvar.pl File 14.96 KB 0644
feature.pm File 11.06 KB 0644
fields.pm File 9.28 KB 0644
filetest.pm File 3.91 KB 0644
if.pm File 1.13 KB 0644
integer.pm File 3.19 KB 0644
less.pm File 3.13 KB 0644
locale.pm File 2.72 KB 0644
lwpcook.pod File 9.05 KB 0644
lwptut.pod File 24.89 KB 0644
open.pm File 7.83 KB 0644
overload.pm File 52.66 KB 0644
overloading.pm File 1.77 KB 0644
perl5db.pl File 302.79 KB 0644
perlfaq.pm File 94 B 0644
sigtrap.pm File 7.46 KB 0644
sort.pm File 5.95 KB 0644
strict.pm File 3.84 KB 0644
subs.pm File 845 B 0644
utf8.pm File 7.6 KB 0644
utf8_heavy.pl File 30.1 KB 0644
vars.pm File 2.3 KB 0644
vmsish.pm File 4.22 KB 0644
warnings.pm File 18.34 KB 0644