__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
package constant;
use 5.008;
use strict;
use warnings::register;
our $VERSION = '1.33';
our %declared;
#=======================================================================
# Some names are evil choices.
my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD };
$keywords{UNITCHECK}++ if $] > 5.009;
my %forced_into_main = map +($_, 1),
qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG };
my %forbidden = (%keywords, %forced_into_main);
my $normal_constant_name = qr/^_?[^\W_0-9]\w*\z/;
my $tolerable = qr/^[A-Za-z_]\w*\z/;
my $boolean = qr/^[01]?\z/;
BEGIN {
# We'd like to do use constant _CAN_PCS => $] > 5.009002
# but that's a bit tricky before we load the constant module :-)
# By doing this, we save several run time checks for *every* call
# to import.
my $const = $] > 5.009002;
my $downgrade = $] < 5.015004; # && $] >= 5.008
my $constarray = exists &_make_const;
if ($const) {
Internals::SvREADONLY($const, 1);
Internals::SvREADONLY($downgrade, 1);
$constant::{_CAN_PCS} = \$const;
$constant::{_DOWNGRADE} = \$downgrade;
$constant::{_CAN_PCS_FOR_ARRAY} = \$constarray;
}
else {
no strict 'refs';
*{"_CAN_PCS"} = sub () {$const};
*{"_DOWNGRADE"} = sub () { $downgrade };
*{"_CAN_PCS_FOR_ARRAY"} = sub () { $constarray };
}
}
#=======================================================================
# import() - import symbols into user's namespace
#
# What we actually do is define a function in the caller's namespace
# which returns the value. The function we create will normally
# be inlined as a constant, thereby avoiding further sub calling
# overhead.
#=======================================================================
sub import {
my $class = shift;
return unless @_; # Ignore 'use constant;'
my $constants;
my $multiple = ref $_[0];
my $caller = caller;
my $flush_mro;
my $symtab;
if (_CAN_PCS) {
no strict 'refs';
$symtab = \%{$caller . '::'};
};
if ( $multiple ) {
if (ref $_[0] ne 'HASH') {
require Carp;
Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'");
}
$constants = shift;
} else {
unless (defined $_[0]) {
require Carp;
Carp::croak("Can't use undef as constant name");
}
$constants->{+shift} = undef;
}
foreach my $name ( keys %$constants ) {
my $pkg;
my $symtab = $symtab;
my $orig_name = $name;
if ($name =~ s/(.*)(?:::|')(?=.)//s) {
$pkg = $1;
if (_CAN_PCS && $pkg ne $caller) {
no strict 'refs';
$symtab = \%{$pkg . '::'};
}
}
else {
$pkg = $caller;
}
# Normal constant name
if ($name =~ $normal_constant_name and !$forbidden{$name}) {
# Everything is okay
# Name forced into main, but we're not in main. Fatal.
} elsif ($forced_into_main{$name} and $pkg ne 'main') {
require Carp;
Carp::croak("Constant name '$name' is forced into main::");
# Starts with double underscore. Fatal.
} elsif ($name =~ /^__/) {
require Carp;
Carp::croak("Constant name '$name' begins with '__'");
# Maybe the name is tolerable
} elsif ($name =~ $tolerable) {
# Then we'll warn only if you've asked for warnings
if (warnings::enabled()) {
if ($keywords{$name}) {
warnings::warn("Constant name '$name' is a Perl keyword");
} elsif ($forced_into_main{$name}) {
warnings::warn("Constant name '$name' is " .
"forced into package main::");
}
}
# Looks like a boolean
# use constant FRED == fred;
} elsif ($name =~ $boolean) {
require Carp;
if (@_) {
Carp::croak("Constant name '$name' is invalid");
} else {
Carp::croak("Constant name looks like boolean value");
}
} else {
# Must have bad characters
require Carp;
Carp::croak("Constant name '$name' has invalid characters");
}
{
no strict 'refs';
my $full_name = "${pkg}::$name";
$declared{$full_name}++;
if ($multiple || @_ == 1) {
my $scalar = $multiple ? $constants->{$orig_name} : $_[0];
if (_DOWNGRADE) { # for 5.8 to 5.14
# Work around perl bug #31991: Sub names (actually glob
# names in general) ignore the UTF8 flag. So we have to
# turn it off to get the "right" symbol table entry.
utf8::is_utf8 $name and utf8::encode $name;
}
# The constant serves to optimise this entire block out on
# 5.8 and earlier.
if (_CAN_PCS) {
# Use a reference as a proxy for a constant subroutine.
# If this is not a glob yet, it saves space. If it is
# a glob, we must still create it this way to get the
# right internal flags set, as constants are distinct
# from subroutines created with sub(){...}.
# The check in Perl_ck_rvconst knows that inlinable
# constants from cv_const_sv are read only. So we have to:
Internals::SvREADONLY($scalar, 1);
if (!exists $symtab->{$name}) {
$symtab->{$name} = \$scalar;
++$flush_mro->{$pkg};
}
else {
local $constant::{_dummy} = \$scalar;
*$full_name = \&{"_dummy"};
}
} else {
*$full_name = sub () { $scalar };
}
} elsif (@_) {
my @list = @_;
if (_CAN_PCS_FOR_ARRAY) {
_make_const($list[$_]) for 0..$#list;
_make_const(@list);
if (!exists $symtab->{$name}) {
$symtab->{$name} = \@list;
$flush_mro->{$pkg}++;
}
else {
local $constant::{_dummy} = \@list;
*$full_name = \&{"_dummy"};
}
}
else { *$full_name = sub () { @list }; }
} else {
*$full_name = sub () { };
}
}
}
# Flush the cache exactly once if we make any direct symbol table changes.
if (_CAN_PCS && $flush_mro) {
mro::method_changed_in($_) for keys %$flush_mro;
}
}
1;
__END__
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| Carp | Folder | 0755 |
|
|
| Exporter | Folder | 0755 |
|
|
| File | Folder | 0755 |
|
|
| Getopt | Folder | 0755 |
|
|
| Hash | Folder | 0755 |
|
|
| IO | Folder | 0755 |
|
|
| IPC | Folder | 0755 |
|
|
| List | Folder | 0755 |
|
|
| Scalar | Folder | 0755 |
|
|
| Text | Folder | 0755 |
|
|
| Tie | Folder | 0755 |
|
|
| auto | Folder | 0755 |
|
|
| unicore | Folder | 0755 |
|
|
| warnings | Folder | 0755 |
|
|
| AutoLoader.pm | File | 5.36 KB | 0644 |
|
| Carp.pm | File | 24.8 KB | 0644 |
|
| Config.pm | File | 3.24 KB | 0644 |
|
| Config_git.pl | File | 409 B | 0644 |
|
| Config_heavy.pl | File | 57.4 KB | 0644 |
|
| Cwd.pm | File | 16.95 KB | 0644 |
|
| DynaLoader.pm | File | 11 KB | 0644 |
|
| Errno.pm | File | 4.8 KB | 0644 |
|
| Exporter.pm | File | 2.28 KB | 0644 |
|
| Fcntl.pm | File | 2.17 KB | 0644 |
|
| FileHandle.pm | File | 2.06 KB | 0644 |
|
| IO.pm | File | 469 B | 0644 |
|
| POSIX.pm | File | 19.96 KB | 0644 |
|
| SelectSaver.pm | File | 344 B | 0644 |
|
| Socket.pm | File | 14.74 KB | 0644 |
|
| Symbol.pm | File | 2.15 KB | 0644 |
|
| XSLoader.pm | File | 4.02 KB | 0644 |
|
| attributes.pm | File | 3 KB | 0644 |
|
| base.pm | File | 8.7 KB | 0644 |
|
| builtin.pm | File | 210 B | 0644 |
|
| bytes.pm | File | 569 B | 0644 |
|
| constant.pm | File | 5.6 KB | 0644 |
|
| feature.pm | File | 7.9 KB | 0644 |
|
| fields.pm | File | 4.89 KB | 0644 |
|
| integer.pm | File | 172 B | 0644 |
|
| lib.pm | File | 2.23 KB | 0644 |
|
| locale.pm | File | 3.37 KB | 0644 |
|
| overload.pm | File | 4.74 KB | 0644 |
|
| overloading.pm | File | 964 B | 0644 |
|
| parent.pm | File | 460 B | 0644 |
|
| re.pm | File | 9.33 KB | 0644 |
|
| strict.pm | File | 1.57 KB | 0644 |
|
| utf8.pm | File | 341 B | 0644 |
|
| vars.pm | File | 1.12 KB | 0644 |
|
| warnings.pm | File | 30.04 KB | 0644 |
|