__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
package overload;
use strict;
no strict 'refs';
our $VERSION = '1.37';
our %ops = (
with_assign => "+ - * / % ** << >> x .",
assign => "+= -= *= /= %= **= <<= >>= x= .=",
num_comparison => "< <= > >= == !=",
'3way_comparison' => "<=> cmp",
str_comparison => "lt le gt ge eq ne",
binary => '& &= | |= ^ ^= &. &.= |. |.= ^. ^.=',
unary => "neg ! ~ ~.",
mutators => '++ --',
func => "atan2 cos sin exp abs log sqrt int",
conversion => 'bool "" 0+ qr',
iterators => '<>',
filetest => "-X",
dereferencing => '${} @{} %{} &{} *{}',
matching => '~~',
special => 'nomethod fallback =',
);
my %ops_seen;
@ops_seen{ map split(/ /), values %ops } = ();
sub nil {}
sub OVERLOAD {
my $package = shift;
my %arg = @_;
my $sub;
*{$package . "::(("} = \&nil; # Make it findable via fetchmethod.
for (keys %arg) {
if ($_ eq 'fallback') {
for my $sym (*{$package . "::()"}) {
*$sym = \&nil; # Make it findable via fetchmethod.
$$sym = $arg{$_};
}
} else {
warnings::warnif("overload arg '$_' is invalid")
unless exists $ops_seen{$_};
$sub = $arg{$_};
if (not ref $sub) {
$ {$package . "::(" . $_} = $sub;
$sub = \&nil;
}
#print STDERR "Setting '$ {'package'}::\cO$_' to \\&'$sub'.\n";
*{$package . "::(" . $_} = \&{ $sub };
}
}
}
sub import {
my $package = caller();
# *{$package . "::OVERLOAD"} = \&OVERLOAD;
shift;
$package->overload::OVERLOAD(@_);
}
sub unimport {
my $package = caller();
shift;
*{$package . "::(("} = \&nil;
for (@_) {
warnings::warnif("overload arg '$_' is invalid")
unless exists $ops_seen{$_};
delete $ {$package . "::"}{$_ eq 'fallback' ? '()' : "(" .$_};
}
}
sub Overloaded {
my $package = shift;
$package = ref $package if ref $package;
mycan ($package, '()') || mycan ($package, '((');
}
sub ov_method {
my $globref = shift;
return undef unless $globref;
my $sub = \&{*$globref};
no overloading;
return $sub if $sub != \&nil;
return shift->can($ {*$globref});
}
sub OverloadedStringify {
my $package = shift;
$package = ref $package if ref $package;
#$package->can('(""')
ov_method mycan($package, '(""'), $package
or ov_method mycan($package, '(0+'), $package
or ov_method mycan($package, '(bool'), $package
or ov_method mycan($package, '(nomethod'), $package;
}
sub Method {
my $package = shift;
if (ref $package) {
no warnings 'experimental::builtin';
$package = builtin::blessed($package);
return undef if !defined $package;
}
#my $meth = $package->can('(' . shift);
ov_method mycan($package, '(' . shift), $package;
#return $meth if $meth ne \&nil;
#return $ {*{$meth}};
}
sub AddrRef {
no overloading;
"$_[0]";
}
*StrVal = *AddrRef;
sub mycan { # Real can would leave stubs.
my ($package, $meth) = @_;
local $@;
local $!;
require mro;
my $mro = mro::get_linear_isa($package);
foreach my $p (@$mro) {
my $fqmeth = $p . q{::} . $meth;
return \*{$fqmeth} if defined &{$fqmeth};
}
return undef;
}
my %constants = (
'integer' => 0x1000, # HINT_NEW_INTEGER
'float' => 0x2000, # HINT_NEW_FLOAT
'binary' => 0x4000, # HINT_NEW_BINARY
'q' => 0x8000, # HINT_NEW_STRING
'qr' => 0x10000, # HINT_NEW_RE
);
use warnings::register;
sub constant {
# Arguments: what, sub
while (@_) {
if (@_ == 1) {
warnings::warnif ("Odd number of arguments for overload::constant");
last;
}
elsif (!exists $constants {$_ [0]}) {
warnings::warnif ("'$_[0]' is not an overloadable type");
}
elsif (!ref $_ [1] || "$_[1]" !~ /(^|=)CODE\(0x[0-9a-f]+\)$/) {
# Can't use C<ref $_[1] eq "CODE"> above as code references can be
# blessed, and C<ref> would return the package the ref is blessed into.
if (warnings::enabled) {
$_ [1] = "undef" unless defined $_ [1];
warnings::warn ("'$_[1]' is not a code reference");
}
}
else {
$^H{$_[0]} = $_[1];
$^H |= $constants{$_[0]};
}
shift, shift;
}
}
sub remove_constant {
# Arguments: what, sub
while (@_) {
delete $^H{$_[0]};
$^H &= ~ $constants{$_[0]};
shift, shift;
}
}
1;
__END__
# ex: set ts=8 sts=4 sw=4 et:
| 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 |
|