Linux cpanel2.daytoncreative.net 2.6.32-754.29.2.el6.x86_64 #1 SMP Tue May 12 17:39:04 UTC 2020 x86_64
Apache/2.4.43 (cPanel) OpenSSL/1.1.1g mod_bwlimited/1.4
Server IP : 70.62.220.67 & Your IP : 216.73.216.193
Domains :
Cant Read [ /etc/named.conf ]
User : michaelgreg
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
log /
perl-5.20.2 /
t /
op /
Delete
Unzip
Name
Size
Permission
Date
Action
64bitint.t
8.14
KB
-r--r--r--
2014-12-27 11:49
alarm.t
1.5
KB
-r--r--r--
2014-12-27 11:49
anonsub.t
1.7
KB
-r--r--r--
2014-12-27 11:49
append.t
1.58
KB
-r--r--r--
2014-12-27 11:49
args.t
2.12
KB
-r--r--r--
2014-12-27 11:49
array.t
12.32
KB
-r--r--r--
2014-12-27 11:49
array_base.t
720
B
-r--r--r--
2014-12-27 11:49
assignwarn.t
1.52
KB
-r--r--r--
2014-12-27 11:49
attrhand.t
1.01
KB
-r--r--r--
2014-12-27 11:49
attrproto.t
6.55
KB
-r--r--r--
2014-12-27 11:49
attrs.t
10.73
KB
-r--r--r--
2014-12-27 11:49
auto.t
2.36
KB
-r--r--r--
2014-12-27 11:49
avhv.t
4.04
KB
-r--r--r--
2014-12-27 11:49
bless.t
4.12
KB
-r--r--r--
2014-12-27 11:49
blocks.t
2.95
KB
-r--r--r--
2014-12-27 11:49
bop.t
12.82
KB
-r--r--r--
2014-12-27 11:49
caller.pl
3.75
KB
-r--r--r--
2014-12-27 11:49
caller.t
8.14
KB
-r--r--r--
2014-12-27 11:49
chars.t
1.73
KB
-r--r--r--
2014-12-27 11:49
chdir.t
6.68
KB
-r--r--r--
2014-12-27 11:49
chop.t
7.67
KB
-r--r--r--
2014-12-27 11:49
chr.t
2.48
KB
-r--r--r--
2014-12-27 11:49
closure.t
19.6
KB
-r--r--r--
2014-12-27 11:49
closure_test.pl
327
B
-r--r--r--
2014-12-27 11:49
concat2.t
1.41
KB
-r--r--r--
2014-12-27 11:49
cond.t
282
B
-r--r--r--
2014-12-27 11:49
context.t
404
B
-r--r--r--
2014-12-27 11:49
coreamp.t
29.17
KB
-r--r--r--
2014-12-27 11:49
coresubs.t
4.87
KB
-r--r--r--
2014-12-27 11:49
cproto.t
3.6
KB
-r--r--r--
2014-12-27 11:49
crypt.t
1.17
KB
-r--r--r--
2014-12-27 11:49
current_sub.t
1.71
KB
-r--r--r--
2014-12-27 11:49
dbm.t
1.54
KB
-r--r--r--
2014-12-27 11:49
defined.t
551
B
-r--r--r--
2014-12-27 11:49
defins.t
4.84
KB
-r--r--r--
2014-12-27 11:49
delete.t
2.93
KB
-r--r--r--
2014-12-27 11:49
die.t
1.99
KB
-r--r--r--
2014-12-27 11:49
die_except.t
1.57
KB
-r--r--r--
2014-12-27 11:49
die_exit.t
1.9
KB
-r--r--r--
2014-12-27 11:49
die_keeperr.t
1.57
KB
-r--r--r--
2014-12-27 11:49
die_unwind.t
1.69
KB
-r--r--r--
2014-12-27 11:49
do.t
8.35
KB
-r--r--r--
2014-12-27 11:49
dor.t
2.64
KB
-r--r--r--
2014-12-27 11:49
each.t
7.09
KB
-r--r--r--
2014-12-27 11:49
each_array.t
5.48
KB
-r--r--r--
2014-12-27 11:49
eval.t
13.92
KB
-r--r--r--
2014-12-27 11:49
evalbytes.t
989
B
-r--r--r--
2014-12-27 11:49
exec.t
4.36
KB
-r--r--r--
2014-12-27 11:49
exists_sub.t
2.09
KB
-r--r--r--
2014-12-27 11:49
exp.t
1.47
KB
-r--r--r--
2014-12-27 11:49
fh.t
790
B
-r--r--r--
2014-12-27 11:49
filehandle.t
564
B
-r--r--r--
2014-12-27 11:49
filetest.t
11.97
KB
-r--r--r--
2014-12-27 11:49
filetest_stack_ok.t
1.12
KB
-r--r--r--
2014-12-27 11:49
filetest_t.t
1.18
KB
-r--r--r--
2014-12-27 11:49
flip.t
868
B
-r--r--r--
2014-12-27 11:49
for.t
12.77
KB
-r--r--r--
2014-12-27 11:49
fork.t
8.8
KB
-r--r--r--
2014-12-27 11:49
fresh_perl_utf8.t
411
B
-r--r--r--
2014-12-27 11:49
getpid.t
1.61
KB
-r--r--r--
2014-12-27 11:49
getppid.t
3.13
KB
-r--r--r--
2014-12-27 11:49
glob.t
4.22
KB
-r--r--r--
2014-12-27 11:49
gmagic.t
5.97
KB
-r--r--r--
2014-12-27 11:49
goto.t
14.85
KB
-r--r--r--
2014-12-27 11:49
goto_xs.t
2.98
KB
-r--r--r--
2014-12-27 11:49
grent.t
4.46
KB
-r--r--r--
2014-12-27 11:49
grep.t
6.66
KB
-r--r--r--
2014-12-27 11:49
groups.t
11.15
KB
-r--r--r--
2014-12-27 11:49
gv.t
30.15
KB
-r--r--r--
2014-12-27 11:49
hash-rt85026.t
1.57
KB
-r--r--r--
2014-12-27 11:49
hash.t
6.02
KB
-r--r--r--
2014-12-27 11:49
hashassign.t
18.85
KB
-r--r--r--
2014-12-27 11:49
hashwarn.t
2.05
KB
-r--r--r--
2014-12-27 11:49
heredoc.t
2.29
KB
-r--r--r--
2014-12-27 11:49
inc.t
6.72
KB
-r--r--r--
2014-12-27 11:49
inccode-tie.t
338
B
-r--r--r--
2014-12-27 11:49
inccode.t
11.19
KB
-r--r--r--
2014-12-27 11:49
incfilter.t
7.33
KB
-r--r--r--
2014-12-27 11:49
index.t
6.81
KB
-r--r--r--
2014-12-27 11:49
index_thr.t
56
B
-r--r--r--
2014-12-27 11:49
int.t
1.72
KB
-r--r--r--
2014-12-27 11:49
join.t
3.2
KB
-r--r--r--
2014-12-27 11:49
kill0.t
3.18
KB
-r--r--r--
2014-12-27 11:49
kill0_child
596
B
-r--r--r--
2014-12-27 11:49
kvaslice.t
4.66
KB
-r--r--r--
2014-12-27 11:49
kvhslice.t
5.44
KB
-r--r--r--
2014-12-27 11:49
lc.t
11.8
KB
-r--r--r--
2014-12-27 11:49
leaky-magic.t
3.43
KB
-r--r--r--
2014-12-27 11:49
length.t
5.03
KB
-r--r--r--
2014-12-27 11:49
lex.t
2.33
KB
-r--r--r--
2014-12-27 11:49
lex_assign.t
7.17
KB
-r--r--r--
2014-12-27 11:49
lexsub.t
19.62
KB
-r--r--r--
2014-12-27 12:24
lfs.t
6.2
KB
-r--r--r--
2014-12-27 11:49
list.t
5.31
KB
-r--r--r--
2014-12-27 11:52
local.t
17.11
KB
-r--r--r--
2014-12-27 11:49
localref.t
2.73
KB
-r--r--r--
2014-12-27 11:49
lock.t
465
B
-r--r--r--
2014-12-27 11:49
loopctl.t
17.88
KB
-r--r--r--
2014-12-27 11:49
lop.t
1.2
KB
-r--r--r--
2014-12-27 11:49
magic-27839.t
622
B
-r--r--r--
2014-12-27 11:49
magic.t
21.81
KB
-r--r--r--
2014-12-27 11:49
method.t
18.91
KB
-r--r--r--
2014-12-27 11:49
mkdir.t
1.25
KB
-r--r--r--
2014-12-27 11:49
my.t
4.29
KB
-r--r--r--
2014-12-27 11:49
my_stash.t
769
B
-r--r--r--
2014-12-27 11:49
mydef.t
5.51
KB
-r--r--r--
2014-12-27 11:49
negate.t
4.3
KB
-r--r--r--
2014-12-27 11:49
not.t
3.15
KB
-r--r--r--
2014-12-27 11:49
numconvert.t
8.33
KB
-r--r--r--
2014-12-27 11:49
oct.t
3.58
KB
-r--r--r--
2014-12-27 11:49
or.t
1.79
KB
-r--r--r--
2014-12-27 11:49
ord.t
2.48
KB
-r--r--r--
2014-12-27 11:49
overload_integer.t
506
B
-r--r--r--
2014-12-27 11:49
override.t
4.33
KB
-r--r--r--
2014-12-27 11:49
pack.t
65.34
KB
-r--r--r--
2014-12-27 11:49
packagev.t
5.97
KB
-r--r--r--
2014-12-27 11:49
pos.t
3.59
KB
-r--r--r--
2014-12-27 11:49
postfixderef.t
11.97
KB
-r--r--r--
2014-12-27 11:49
pow.t
2.34
KB
-r--r--r--
2014-12-27 11:49
print.t
692
B
-r--r--r--
2014-12-27 11:49
protowarn.t
1.35
KB
-r--r--r--
2014-12-27 11:49
push.t
3.03
KB
-r--r--r--
2014-12-27 11:49
pwent.t
6.63
KB
-r--r--r--
2014-12-27 11:49
qr.t
2.32
KB
-r--r--r--
2014-12-27 11:49
quotemeta.t
5.61
KB
-r--r--r--
2014-12-27 11:49
rand.t
8.31
KB
-r--r--r--
2014-12-27 11:49
range.t
9.25
KB
-r--r--r--
2014-12-27 11:49
read.t
2.28
KB
-r--r--r--
2014-12-27 11:49
readdir.t
2.09
KB
-r--r--r--
2014-12-27 11:49
readline.t
7.19
KB
-r--r--r--
2014-12-27 11:49
recurse.t
2.73
KB
-r--r--r--
2014-12-27 11:49
ref.t
22.74
KB
-r--r--r--
2014-12-27 11:49
repeat.t
4.8
KB
-r--r--r--
2014-12-27 11:49
require_37033.t
1.18
KB
-r--r--r--
2014-12-27 11:49
require_errors.t
3.68
KB
-r--r--r--
2014-12-27 11:49
reset.t
5.41
KB
-r--r--r--
2014-12-27 11:49
reverse.t
3.01
KB
-r--r--r--
2014-12-27 11:49
rt119311.t
5.58
KB
-r--r--r--
2014-12-27 11:49
runlevel.t
5.28
KB
-r--r--r--
2014-12-27 11:49
select.t
1.03
KB
-r--r--r--
2014-12-27 11:49
setpgrpstack.t
378
B
-r--r--r--
2014-12-27 11:49
sigdispatch.t
4.33
KB
-r--r--r--
2014-12-27 11:49
signatures.t
41.02
KB
-r--r--r--
2014-12-27 11:49
sigsystem.t
1.36
KB
-r--r--r--
2014-12-27 11:49
sleep.t
468
B
-r--r--r--
2014-12-27 11:49
smartkve.t
18.26
KB
-r--r--r--
2014-12-27 11:49
smartmatch.t
10.34
KB
-r--r--r--
2014-12-27 11:49
sort.t
28.4
KB
-r--r--r--
2015-01-10 13:17
splice.t
3.38
KB
-r--r--r--
2014-12-27 11:49
split.t
13.1
KB
-r--r--r--
2014-12-27 11:49
split_unicode.t
2.4
KB
-r--r--r--
2014-12-27 11:49
sprintf.t
28.5
KB
-r--r--r--
2014-12-27 11:49
sprintf2.t
5.49
KB
-r--r--r--
2014-12-27 11:49
srand.t
1.87
KB
-r--r--r--
2014-12-27 11:49
sselect.t
2.67
KB
-r--r--r--
2014-12-27 11:49
stash.t
9.01
KB
-r--r--r--
2014-12-27 11:49
stat.t
17.51
KB
-r--r--r--
2014-12-27 11:49
state.t
9.72
KB
-r--r--r--
2014-12-27 12:15
study.t
2.99
KB
-r--r--r--
2014-12-27 11:49
studytied.t
1.29
KB
-r--r--r--
2014-12-27 11:49
sub.t
6.54
KB
-r--r--r--
2014-12-27 11:49
sub_lval.t
24.2
KB
-r--r--r--
2014-12-27 11:49
substr.t
20.53
KB
-r--r--r--
2014-12-27 11:49
substr_thr.t
56
B
-r--r--r--
2014-12-27 11:49
svleak.pl
6
B
-r--r--r--
2014-12-27 11:49
svleak.t
15.93
KB
-r--r--r--
2015-01-10 12:06
switch.t
28.06
KB
-r--r--r--
2014-12-27 11:49
symbolcache.t
1.06
KB
-r--r--r--
2014-12-27 11:49
sysio.t
5
KB
-r--r--r--
2014-12-27 11:49
taint.t
66.84
KB
-r--r--r--
2014-12-27 12:32
threads-dirh.t
3.47
KB
-r--r--r--
2014-12-27 11:49
threads.t
9.3
KB
-r--r--r--
2014-12-27 11:49
threads_create.pl
42
B
-r--r--r--
2014-12-27 11:49
tie.t
28.34
KB
-r--r--r--
2014-12-27 11:49
tie_fetch_count.t
11.49
KB
-r--r--r--
2014-12-27 11:49
tiearray.t
4.53
KB
-r--r--r--
2014-12-27 11:49
tiehandle.t
5.27
KB
-r--r--r--
2014-12-27 11:49
time.t
7.86
KB
-r--r--r--
2015-01-17 11:51
time_loop.t
378
B
-r--r--r--
2014-12-27 11:49
tr.t
12.99
KB
-r--r--r--
2014-12-27 11:49
undef.t
3.15
KB
-r--r--r--
2014-12-27 11:49
universal.t
8.32
KB
-r--r--r--
2014-12-27 11:49
unlink.t
1.02
KB
-r--r--r--
2014-12-27 11:49
unshift.t
3.17
KB
-r--r--r--
2014-12-27 11:49
upgrade.t
1.15
KB
-r--r--r--
2014-12-27 11:49
utf8cache.t
3.83
KB
-r--r--r--
2014-12-27 11:49
utf8decode.t
7.59
KB
-r--r--r--
2014-12-27 11:49
utf8magic.t
808
B
-r--r--r--
2014-12-27 11:49
utfhash.t
5.33
KB
-r--r--r--
2014-12-27 11:49
utftaint.t
4.46
KB
-r--r--r--
2014-12-27 11:49
vec.t
2.87
KB
-r--r--r--
2014-12-27 11:49
ver.t
8.39
KB
-r--r--r--
2014-12-27 11:49
waitpid.t
973
B
-r--r--r--
2014-12-27 11:49
wantarray.t
874
B
-r--r--r--
2014-12-27 11:49
warn.t
4.15
KB
-r--r--r--
2014-12-27 11:49
while.t
3.81
KB
-r--r--r--
2014-12-27 11:49
write.t
39.99
KB
-r--r--r--
2015-01-24 15:03
yadayada.t
1.67
KB
-r--r--r--
2015-01-15 22:12
Save
Rename
#!./perl -w # # test method calls and autoloading. # BEGIN { chdir 't' if -d 't'; @INC = qw(. ../lib lib); require "test.pl"; } use strict; no warnings 'once'; plan(tests => 147); @A::ISA = 'B'; @B::ISA = 'C'; sub C::d {"C::d"} sub D::d {"D::d"} # First, some basic checks of method-calling syntax: my $obj = bless [], "Pack"; sub Pack::method { shift; join(",", "method", @_) } my $mname = "method"; is(Pack->method("a","b","c"), "method,a,b,c"); is(Pack->$mname("a","b","c"), "method,a,b,c"); is(method Pack ("a","b","c"), "method,a,b,c"); is((method Pack "a","b","c"), "method,a,b,c"); is(Pack->method(), "method"); is(Pack->$mname(), "method"); is(method Pack (), "method"); is(Pack->method, "method"); is(Pack->$mname, "method"); is(method Pack, "method"); is($obj->method("a","b","c"), "method,a,b,c"); is($obj->$mname("a","b","c"), "method,a,b,c"); is((method $obj ("a","b","c")), "method,a,b,c"); is((method $obj "a","b","c"), "method,a,b,c"); is($obj->method(0), "method,0"); is($obj->method(1), "method,1"); is($obj->method(), "method"); is($obj->$mname(), "method"); is((method $obj ()), "method"); is($obj->method, "method"); is($obj->$mname, "method"); is(method $obj, "method"); is( A->d, "C::d"); # Update hash table; *B::d = \&D::d; # Import now. is(A->d, "D::d"); # Update hash table; { local @A::ISA = qw(C); # Update hash table with split() assignment is(A->d, "C::d"); $#A::ISA = -1; is(eval { A->d } || "fail", "fail"); } is(A->d, "D::d"); { local *B::d; eval 'sub B::d {"B::d1"}'; # Import now. is(A->d, "B::d1"); # Update hash table; undef &B::d; is((eval { A->d }, ($@ =~ /Undefined subroutine/)), 1); } is(A->d, "D::d"); # Back to previous state eval 'no warnings "redefine"; sub B::d {"B::d2"}'; # Import now. is(A->d, "B::d2"); # Update hash table; # What follows is hardly guarantied to work, since the names in scripts # are already linked to "pruned" globs. Say, 'undef &B::d' if it were # after 'delete $B::{d}; sub B::d {}' would reach an old subroutine. undef &B::d; delete $B::{d}; is(A->d, "C::d"); eval 'sub B::d {"B::d2.5"}'; A->d; # Update hash table; my $glob = \delete $B::{d}; # non-void context; hang on to the glob is(A->d, "C::d"); # Update hash table; eval 'sub B::d {"B::d3"}'; # Import now. is(A->d, "B::d3"); # Update hash table; delete $B::{d}; *dummy::dummy = sub {}; # Mark as updated is(A->d, "C::d"); eval 'sub B::d {"B::d4"}'; # Import now. is(A->d, "B::d4"); # Update hash table; delete $B::{d}; # Should work without any help too is(A->d, "C::d"); { local *C::d; is(eval { A->d } || "nope", "nope"); } is(A->d, "C::d"); *A::x = *A::d; A->d; is(eval { A->x } || "nope", "nope", 'cache should not follow synonyms'); my $counter; eval <<'EOF'; sub C::e; BEGIN { *B::e = \&C::e } # Shouldn't prevent AUTOLOAD in original pkg sub Y::f; $counter = 0; @X::ISA = 'Y'; @Y::ISA = 'B'; sub B::AUTOLOAD { my $c = ++$counter; my $method = $B::AUTOLOAD; my $msg = "B: In $method, $c"; eval "sub $method { \$msg }"; goto &$method; } sub C::AUTOLOAD { my $c = ++$counter; my $method = $C::AUTOLOAD; my $msg = "C: In $method, $c"; eval "sub $method { \$msg }"; goto &$method; } EOF is(A->e(), "C: In C::e, 1"); # We get a correct autoload is(A->e(), "C: In C::e, 1"); # Which sticks is(A->ee(), "B: In A::ee, 2"); # We get a generic autoload, method in top is(A->ee(), "B: In A::ee, 2"); # Which sticks is(Y->f(), "B: In Y::f, 3"); # We vivify a correct method is(Y->f(), "B: In Y::f, 3"); # Which sticks # This test is not intended to be reasonable. It is here just to let you # know that you broke some old construction. Feel free to rewrite the test # if your patch breaks it. { no warnings 'redefine'; *B::AUTOLOAD = sub { use warnings; my $c = ++$counter; my $method = $::AUTOLOAD; no strict 'refs'; *$::AUTOLOAD = sub { "new B: In $method, $c" }; goto &$::AUTOLOAD; }; } is(A->eee(), "new B: In A::eee, 4"); # We get a correct $autoload is(A->eee(), "new B: In A::eee, 4"); # Which sticks { no strict 'refs'; no warnings 'deprecated'; # this test added due to bug discovery (in 5.004_04, fb73857aa0bfa8ed) # Possibly kill this test now that defined @::array is finally properly # deprecated? is(defined(@{"unknown_package::ISA"}) ? "defined" : "undefined", "undefined"); } # test that failed subroutine calls don't affect method calls { package A1; sub foo { "foo" } package A2; @A2::ISA = 'A1'; package main; is(A2->foo(), "foo"); is(do { eval 'A2::foo()'; $@ ? 1 : 0}, 1); is(A2->foo(), "foo"); } ## This test was totally misguided. It passed before only because the ## code to determine if a package was loaded used to look for the hash ## %Foo::Bar instead of the package Foo::Bar:: -- and Config.pm just ## happens to export %Config. # { # is(do { use Config; eval 'Config->foo()'; # $@ =~ /^\QCan't locate object method "foo" via package "Config" at/ ? 1 : $@}, 1); # is(do { use Config; eval '$d = bless {}, "Config"; $d->foo()'; # $@ =~ /^\QCan't locate object method "foo" via package "Config" at/ ? 1 : $@}, 1); # } # test error messages if method loading fails my $e; eval '$e = bless {}, "E::A"; E::A->foo()'; like ($@, qr/^\QCan't locate object method "foo" via package "E::A" at/); eval '$e = bless {}, "E::B"; $e->foo()'; like ($@, qr/^\QCan't locate object method "foo" via package "E::B" at/); eval 'E::C->foo()'; like ($@, qr/^\QCan't locate object method "foo" via package "E::C" (perhaps /); eval 'UNIVERSAL->E::D::foo()'; like ($@, qr/^\QCan't locate object method "foo" via package "E::D" (perhaps /); eval 'my $e = bless {}, "UNIVERSAL"; $e->E::E::foo()'; like ($@, qr/^\QCan't locate object method "foo" via package "E::E" (perhaps /); $e = bless {}, "E::F"; # force package to exist eval 'UNIVERSAL->E::F::foo()'; like ($@, qr/^\QCan't locate object method "foo" via package "E::F" at/); eval '$e = bless {}, "UNIVERSAL"; $e->E::F::foo()'; like ($@, qr/^\QCan't locate object method "foo" via package "E::F" at/); # SUPER:: pseudoclass @Saab::ISA = "Souper"; sub Souper::method { @_ } @OtherSaab::ISA = "OtherSouper"; sub OtherSouper::method { "Isidore Ropen, Draft Manager" } { my $o = bless [], "Saab"; package Saab; my @ret = $o->SUPER::method('whatever'); ::is $ret[0], $o, 'object passed to SUPER::method'; ::is $ret[1], 'whatever', 'argument passed to SUPER::method'; @ret = $o->SUPER'method('whatever'); ::is $ret[0], $o, "object passed to SUPER'method"; ::is $ret[1], 'whatever', "argument passed to SUPER'method"; @ret = Saab->SUPER::method; ::is $ret[0], 'Saab', "package name passed to SUPER::method"; @ret = OtherSaab->SUPER::method; ::is $ret[0], 'OtherSaab', "->SUPER::method uses current package, not invocant"; } () = *SUPER::; { local our @ISA = "Souper"; is eval { (main->SUPER::method)[0] }, 'main', 'Mentioning *SUPER:: does not stop ->SUPER from working in main'; } { BEGIN { *Mover:: = *Mover2::; *Mover2:: = *foo; } package Mover; no strict; # Not our(@ISA), because the bug we are testing for interacts with an # our() bug that cancels this bug out. @ISA = 'door'; sub door::dohtem { 'dohtem' } ::is eval { Mover->SUPER::dohtem; }, 'dohtem', 'SUPER inside moved package'; undef *door::dohtem; *door::dohtem = sub { 'method' }; ::is eval { Mover->SUPER::dohtem; }, 'method', 'SUPER inside moved package respects method changes'; } package foo120694 { BEGIN { our @ISA = qw(bar120694) } sub AUTOLOAD { my $self = shift; local our $recursive = $recursive; return "recursive" if $recursive++; return if our $AUTOLOAD eq 'DESTROY'; $AUTOLOAD = "SUPER:" . substr $AUTOLOAD, rindex($AUTOLOAD, ':'); return $self->$AUTOLOAD(@_); } } package bar120694 { sub AUTOLOAD { return "xyzzy"; } } is bless( [] => "foo120694" )->plugh, 'xyzzy', '->SUPER::method autoloading uses parent of current pkg'; # failed method call or UNIVERSAL::can() should not autovivify packages is( $::{"Foo::"} || "none", "none"); # sanity check 1 is( $::{"Foo::"} || "none", "none"); # sanity check 2 is( UNIVERSAL::can("Foo", "boogie") ? "yes":"no", "no" ); is( $::{"Foo::"} || "none", "none"); # still missing? is( Foo->UNIVERSAL::can("boogie") ? "yes":"no", "no" ); is( $::{"Foo::"} || "none", "none"); # still missing? is( Foo->can("boogie") ? "yes":"no", "no" ); is( $::{"Foo::"} || "none", "none"); # still missing? is( eval 'Foo->boogie(); 1' ? "yes":"no", "no" ); is( $::{"Foo::"} || "none", "none"); # still missing? is(do { eval 'Foo->boogie()'; $@ =~ /^\QCan't locate object method "boogie" via package "Foo" (perhaps / ? 1 : $@}, 1); eval 'sub Foo::boogie { "yes, sir!" }'; is( $::{"Foo::"} ? "ok" : "none", "ok"); # should exist now is( Foo->boogie(), "yes, sir!"); # TODO: universal.t should test NoSuchPackage->isa()/can() # This is actually testing parsing of indirect objects and undefined subs # print foo("bar") where foo does not exist is not an indirect object. # print foo "bar" where foo does not exist is an indirect object. eval 'sub AUTOLOAD { "ok ", shift, "\n"; }'; ok(1); # Bug ID 20010902.002 is( eval q[ my $x = 'x'; # Lexical or package variable, 5.6.1 panics. sub Foo::x : lvalue { $x } Foo->$x = 'ok'; ] || $@, 'ok' ); # An autoloaded, inherited DESTROY may be invoked differently than normal # methods, and has been known to give rise to spurious warnings # eg <200203121600.QAA11064@gizmo.fdgroup.co.uk> { use warnings; my $w = ''; local $SIG{__WARN__} = sub { $w = $_[0] }; sub AutoDest::Base::AUTOLOAD {} @AutoDest::ISA = qw(AutoDest::Base); { my $x = bless {}, 'AutoDest'; } $w =~ s/\n//g; is($w, ''); } # [ID 20020305.025] PACKAGE::SUPER doesn't work anymore package main; our @X; package Amajor; sub test { push @main::X, 'Amajor', @_; } package Bminor; use base qw(Amajor); package main; sub Bminor::test { $_[0]->Bminor::SUPER::test('x', 'y'); push @main::X, 'Bminor', @_; } Bminor->test('y', 'z'); is("@X", "Amajor Bminor x y Bminor Bminor y z"); package main; for my $meth (['Bar', 'Foo::Bar'], ['SUPER::Bar', 'main::SUPER::Bar'], ['Xyz::SUPER::Bar', 'Xyz::SUPER::Bar']) { fresh_perl_is(<<EOT, package UNIVERSAL; sub AUTOLOAD { my \$c = shift; print "\$c \$AUTOLOAD\\n" } package Xyz; package main; Foo->$meth->[0](); EOT "Foo $meth->[1]", { switches => [ '-w' ] }, "check if UNIVERSAL::AUTOLOAD works", ); } # Test for #71952: crash when looking for a nonexistent destructor # Regression introduced by fbb3ee5af3d4 { fresh_perl_is(<<'EOT', sub M::DESTROY; bless {}, "M" ; print "survived\n"; EOT "survived", {}, "no crash with a declared but missing DESTROY method" ); } # Test for calling a method on a packag name return by a magic variable sub TIESCALAR{bless[]} sub FETCH{"main"} my $kalled; sub bolgy { ++$kalled; } tie my $a, ""; $a->bolgy; is $kalled, 1, 'calling a class method via a magic variable'; { package NulTest; sub method { 1 } package main; eval { NulTest->${ \"method\0Whoops" }; }; like $@, qr/Can't locate object method "method\0Whoops" via package "NulTest" at/, "method lookup is nul-clean"; *NulTest::AUTOLOAD = sub { our $AUTOLOAD; return $AUTOLOAD }; like(NulTest->${ \"nul\0test" }, "nul\0test", "AUTOLOAD is nul-clean"); } { fresh_perl_is( q! sub T::DESTROY { $x = $_[0]; } bless [], "T";!, "DESTROY created new reference to dead object 'T' during global destruction.", {}, "DESTROY creating a new reference to the object generates a warning." ); } # [perl #43663] { $::{"Just"} = \1; sub Just::a_japh { return "$_[0] another Perl hacker," } is eval { "Just"->a_japh }, "Just another Perl hacker,", 'constants do not interfere with class methods'; } # [perl #109264] { no strict 'vars'; sub bliggles { 1 } sub lbiggles :lvalue { index "foo", "f" } ok eval { main->bliggles(my($foo,$bar)) }, 'foo->bar(my($foo,$bar)) is not called in lvalue context'; ok eval { main->bliggles(our($foo,$bar)) }, 'foo->bar(our($foo,$bar)) is not called in lvalue context'; ok eval { main->bliggles(local($foo,$bar)) }, 'foo->bar(local($foo,$bar)) is not called in lvalue context'; ok eval { () = main->lbiggles(my($foo,$bar)); 1 }, 'foo->lv(my($foo,$bar)) is not called in lvalue context'; ok eval { () = main->lbiggles(our($foo,$bar)); 1 }, 'foo->lv(our($foo,$bar)) is not called in lvalue context'; ok eval { () = main->lbiggles(local($foo,$bar)); 1 }, 'foo->lv(local($foo,$bar)) is not called in lvalue context'; } { # AUTOLOAD and DESTROY can be declared without a leading sub, # like BEGIN and friends. package NoSub; eval 'AUTOLOAD { our $AUTOLOAD; return $AUTOLOAD }'; ::ok( !$@, "AUTOLOAD without a leading sub is legal" ); eval "DESTROY { ::pass( q!DESTROY without a leading sub is legal and gets called! ) }"; { ::ok( NoSub->can("AUTOLOAD"), "...and sets up an AUTOLOAD normally" ); ::is( eval { NoSub->bluh }, "NoSub::bluh", "...which works as expected" ); } { bless {}, "NoSub"; } } eval { () = 3; new {} }; like $@, qr/^Can't call method "new" without a package or object reference/, 'Err msg from new{} when stack contains a number'; eval { () = "foo"; new {} }; like $@, qr/^Can't call method "new" without a package or object reference/, 'Err msg from new{} when stack contains a word'; eval { () = undef; new {} }; like $@, qr/^Can't call method "new" without a package or object reference/, 'Err msg from new{} when stack contains undef'; package egakacp { our @ISA = 'ASI'; sub ASI::m { shift; "@_" }; my @a = (bless([]), 'arg'); my $r = SUPER::m{@a}; ::is $r, 'arg', 'method{@array}'; $r = SUPER::m{}@a; ::is $r, 'arg', 'method{}@array'; $r = SUPER::m{@a}"b"; ::is $r, 'arg b', 'method{@array}$more_args'; } # [perl #114924] SUPER->method @SUPER::ISA = "SUPPER"; sub SUPPER::foo { "supper" } is "SUPER"->foo, 'supper', 'SUPER->method'; sub flomp { "flimp" } sub main::::flomp { "flump" } is "::"->flomp, 'flump', 'method call on ::'; is "::main"->flomp, 'flimp', 'method call on ::main'; eval { ""->flomp }; like $@, qr/^Can't call method "flomp" without a package or object reference/, 'method call on empty string'; is "3foo"->CORE::uc, '3FOO', '"3foo"->CORE::uc'; { no strict; @{"3foo::ISA"} = "CORE"; } is "3foo"->uc, '3FOO', '"3foo"->uc (autobox style!)'; # *foo vs (\*foo) sub myclass::squeak { 'eek' } eval { *myclass->squeak }; like $@, qr/^Can't call method "squeak" without a package or object reference/, 'method call on typeglob ignores package'; eval { (\*myclass)->squeak }; like $@, qr/^Can't call method "squeak" on unblessed reference/, 'method call on \*typeglob'; *stdout2 = *STDOUT; # stdout2 now stringifies as *main::STDOUT sub IO::Handle::self { $_[0] } # This used to stringify the glob: is *stdout2->self, (\*stdout2)->self, '*glob->method is equiv to (\*glob)->method'; sub { $_[0] = *STDOUT; is $_[0]->self, \$::h{k}, '$pvlv_glob->method' } ->($::h{k}); # Test that PL_stashcache doesn't change the resolution behaviour for file # handles and package names. SKIP: { skip_if_miniperl('file handles as methods requires loading IO::File', 26); require Fcntl; foreach (qw (Count::DATA Count Colour::H1 Color::H1 C3::H1)) { eval qq{ package $_; sub getline { return "method in $_"; } 1; } or die $@; } BEGIN { *The::Count:: = \*Count::; } is(Count::DATA->getline(), 'method in Count::DATA', 'initial resolution is a method'); is(The::Count::DATA->getline(), 'method in Count::DATA', 'initial resolution is a method in aliased classes'); require Count; is(Count::DATA->getline(), "one! ha ha ha\n", 'file handles take priority'); is(The::Count::DATA->getline(), "two! ha ha ha\n", 'file handles take priority in aliased classes'); eval q{close Count::DATA} or die $!; { no warnings 'io'; is(Count::DATA->getline(), undef, "closing a file handle doesn't change object resolution"); is(The::Count::DATA->getline(), undef, "closing a file handle doesn't change object resolution in aliased classes"); } undef *Count::DATA; is(Count::DATA->getline(), 'method in Count::DATA', 'undefining the typeglob does change object resolution'); is(The::Count::DATA->getline(), 'method in Count::DATA', 'undefining the typeglob does change object resolution in aliased classes'); is(Count->getline(), 'method in Count', 'initial resolution is a method'); is(The::Count->getline(), 'method in Count', 'initial resolution is a method in aliased classes'); eval q{ open Count, '<', $INC{'Count.pm'} or die "Can't open $INC{'Count.pm'}: $!"; 1; } or die $@; is(Count->getline(), "# zero! ha ha ha\n", 'file handles take priority'); is(The::Count->getline(), 'method in Count', 'but not in an aliased class'); eval q{close Count} or die $!; { no warnings 'io'; is(Count->getline(), undef, "closing a file handle doesn't change object resolution"); } undef *Count; is(Count->getline(), 'method in Count', 'undefining the typeglob does change object resolution'); open Colour::H1, 'op/method.t' or die $!; while (<Colour::H1>) { last if /^__END__/; } open CLOSED, 'TEST' or die $!; close CLOSED or die $!; my $fh_start = tell Colour::H1; my $data_start = tell DATA; is(Colour::H1->getline(), <DATA>, 'read from a file'); is(Color::H1->getline(), 'method in Color::H1', 'initial resolution is a method'); *Color::H1 = *Colour::H1{IO}; is(Colour::H1->getline(), <DATA>, 'read from a file'); is(Color::H1->getline(), <DATA>, 'file handles take priority after io-to-typeglob assignment'); *Color::H1 = *CLOSED{IO}; { no warnings 'io'; is(Color::H1->getline(), undef, "assigning a closed a file handle doesn't change object resolution"); } undef *Color::H1; is(Color::H1->getline(), 'method in Color::H1', 'undefining the typeglob does change object resolution'); *Color::H1 = *Colour::H1; is(Color::H1->getline(), <DATA>, 'file handles take priority after typeglob-to-typeglob assignment'); seek Colour::H1, $fh_start, Fcntl::SEEK_SET() or die $!; seek DATA, $data_start, Fcntl::SEEK_SET() or die $!; is(Colour::H1->getline(), <DATA>, 'read from a file'); is(C3::H1->getline(), 'method in C3::H1', 'intial resolution is a method'); *Copy:: = \*C3::; *C3:: = \*Colour::; is(Colour::H1->getline(), <DATA>, 'read from a file'); is(C3::H1->getline(), <DATA>, 'file handles take priority after stash aliasing'); *C3:: = \*Copy::; is(C3::H1->getline(), 'method in C3::H1', 'restoring the stash returns to a method'); } __END__ #FF9900 #F78C08 #FFA500 #FF4D00 #FC5100 #FF5D00