Server IP : 149.255.58.128 / Your IP : 216.73.216.69
System : Linux cloud516.thundercloud.uk 5.14.0-427.26.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jul 17 15:51:13 EDT 2024 x86_64
PHP Version : 8.2.28
Disable Function : allow_url_include, apache_child_terminate, apache_setenv, exec, passthru, pcntl_exec, posix_kill, posix_mkfifo, posix_getpwuid, posix_setpgid, posix_setsid, posix_setuid, posix_setgid, posix_seteuid, posix_setegid, posix_uname, proc_close, proc_get_status, proc_open, proc_terminate, shell_exec, show_source, system
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Upload Files :
Command :
Current File : /usr/share/perl5//Symbol.pm
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.08';
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;
Name |
Size |
Last Modified |
Owner / Group |
Permissions |
Options |
.. | -- | May 20 2025 21:42:20 | 0 / root | 0755 | |
Attribute | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
B | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
CPAN | -- | February 05 2024 20:05:52 | 0 / root | 0755 | |
Class | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Compress | -- | February 05 2024 19:59:43 | 0 / root | 0755 | |
Config | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
DBM_Filter | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Devel | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
ExtUtils | -- | May 30 2024 07:43:48 | 0 / root | 0755 | |
File | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Getopt | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
I18N | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
IO | -- | February 05 2024 19:59:43 | 0 / root | 0755 | |
IPC | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Locale | -- | April 03 2024 14:39:19 | 0 / root | 0755 | |
Math | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Memoize | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Module | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Net | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Pod | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Search | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Term | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Text | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
Thread | -- | May 30 2024 07:43:02 | 0 / root | 0755 | |
Tie | -- | May 30 2024 07:43:02 | 0 / root | 0755 | |
Time | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
URI | -- | October 13 2023 17:01:25 | 0 / root | 0755 | |
Unicode | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
User | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
encoding | -- | May 30 2024 07:43:02 | 0 / root | 0755 | |
overload | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
pod | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
unicore | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
vendor_perl | -- | January 17 2025 17:38:37 | 0 / root | 0755 | |
warnings | -- | May 30 2024 07:43:01 | 0 / root | 0755 | |
| | | | | |
AnyDBM_File.pm | 2.557 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
AutoLoader.pm | 15.427 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
AutoSplit.pm | 19.177 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
Benchmark.pm | 30.299 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
CORE.pod | 3.113 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
DB.pm | 18.479 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
DBM_Filter.pm | 14.048 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
DirHandle.pm | 2.036 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
Dumpvalue.pm | 17.254 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
English.pm | 4.649 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
FileCache.pm | 5.419 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
FileHandle.pm | 6.625 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
FindBin.pm | 4.454 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
Internals.pod | 2.515 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
Memoize.pm | 35.344 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
NEXT.pm | 18.54 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
PerlIO.pm | 14.103 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
Safe.pm | 24.77 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
SelectSaver.pm | 1.051 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
SelfLoader.pm | 17.271 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
Symbol.pm | 4.687 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
Test.pm | 29.338 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
Thread.pm | 8.095 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
UNIVERSAL.pm | 6.439 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
URI.pm | 34.135 KB | March 03 2021 15:16:52 | 0 / root | 0644 | |
XSLoader.pm | 10.988 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
_charnames.pm | 33.351 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
autouse.pm | 4.139 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
base.pm | 10.704 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
blib.pm | 2.014 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
bytes.pm | 3.652 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
bytes_heavy.pl | 0.74 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
charnames.pm | 20.44 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
deprecate.pm | 4.495 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
diagnostics.pm | 18.847 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
dumpvar.pl | 15.19 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
feature.pm | 18.558 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
fields.pm | 9.253 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
filetest.pm | 3.909 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
if.pm | 3.526 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
integer.pm | 3.178 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
less.pm | 3.129 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
locale.pm | 4.741 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
meta_notation.pm | 2.067 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
open.pm | 8.313 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
overload.pm | 52.053 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
overloading.pm | 1.766 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
perl5db.pl | 309.662 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
sigtrap.pm | 8.531 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
sort.pm | 3.819 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
strict.pm | 4.627 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
subs.pm | 0.88 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
utf8.pm | 10.179 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |
vars.pm | 2.4 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
vmsish.pm | 4.212 KB | April 03 2024 14:39:02 | 0 / root | 0644 | |
warnings.pm | 49.353 KB | April 03 2024 14:35:12 | 0 / root | 0644 | |