print
"1..27\n"
;
print
"ok 1\n"
;
sub
A::method {
return
( 3,
$_
[0]->NEXT::method() ) }
sub
A::DESTROY {
$_
[0]->NEXT::DESTROY() }
sub
A::evaled {
eval
{
$_
[0]->NEXT::evaled();
return
'evaled'
} }
our
$AUTOLOAD
;
sub
B::AUTOLOAD {
return
( 9,
$_
[0]->NEXT::AUTOLOAD() )
if
$AUTOLOAD
=~ /.*(missing_method|secondary)/ }
sub
B::DESTROY {
$_
[0]->NEXT::DESTROY() }
sub
C::DESTROY {
print
"ok 25\n"
;
$_
[0]->NEXT::DESTROY() }
our
@ISA
=
qw( B C E )
;
sub
D::method {
return
( 2,
$_
[0]->NEXT::method() ) }
sub
D::AUTOLOAD {
return
( 8,
$_
[0]->NEXT::AUTOLOAD() ) }
sub
D::DESTROY {
print
"ok 24\n"
;
$_
[0]->NEXT::DESTROY() }
sub
D::oops {
$_
[0]->NEXT::method() }
sub
D::secondary {
return
( 17, 18,
map
{
$_
+10 }
$_
[0]->NEXT::secondary() ) }
our
@ISA
=
qw( F G )
;
sub
E::method {
return
( 4,
$_
[0]->NEXT::method(),
$_
[0]->NEXT::method() ) }
sub
E::AUTOLOAD {
return
( 10,
$_
[0]->NEXT::AUTOLOAD() )
if
$AUTOLOAD
=~ /.*(missing_method|secondary)/ }
sub
E::DESTROY {
print
"ok 26\n"
;
$_
[0]->NEXT::DESTROY() }
sub
F::method {
return
( 5 ) }
sub
F::AUTOLOAD {
return
( 11 )
if
$AUTOLOAD
=~ /.*(missing_method|secondary)/ }
sub
F::DESTROY {
print
"ok 27\n"
}
sub
G::method {
return
( 6 ) }
sub
G::AUTOLOAD {
print
"not "
;
return
}
sub
G::DESTROY {
print
"not ok 22"
;
return
}
my
$obj
=
bless
{},
"D"
;
my
@vals
;
@vals
=
$obj
->method();
print
map
"ok $_\n"
,
@vals
;
@vals
=
$obj
->method();
print
"not "
unless
join
(
""
,
@vals
) ==
"23456"
;
print
"ok 7\n"
;
@vals
=
$obj
->missing_method();
print
map
"ok $_\n"
,
@vals
;
eval
{
$obj
->oops() } &&
print
"not "
;
print
"ok 12\n"
;
eval
{
local
*C::AUTOLOAD
=
sub
{
$_
[0]->NEXT::method() };
*C::AUTOLOAD
=
*C::AUTOLOAD
;
eval
{
$obj
->missing_method(); } &&
print
"not "
;
};
print
"ok 13\n"
;
eval
{
*C::method
=
sub
{
$_
[0]->NEXT::AUTOLOAD() };
*C::method
=
*C::method
;
eval
{
$obj
->method(); } &&
print
"not "
;
};
print
"ok 14\n"
;
my
$ob2
=
bless
{},
"B"
;
my
@val
=
$ob2
->method();
print
"not "
unless
@val
==1 &&
$val
[0]==3;
print
"ok 15\n"
;
@val
=
$ob2
->missing_method();
print
"not "
unless
@val
==1 &&
$val
[0]==9;
print
"ok 16\n"
;
@vals
=
$obj
->secondary();
print
map
"ok $_\n"
,
@vals
;
eval
{
$obj
->evaled;
$@ &&
print
"not "
;
};
print
"ok 22\n"
;
our
@ISA
=
'Bee'
;
sub
foo {
return
shift
->NEXT::foo }
print
"not "
unless
Hay->foo eq
'3'
;
print
"ok 23\n"
;