{
our
@ISA
= (
'My::A'
);
our
@ISA
= (
'My::A'
);
our
@ISA
= (
'My::B'
,
'My::C'
);
}
is_deeply(
[ My::D->meta->class_precedence_list ],
[
'My::D'
,
'My::B'
,
'My::A'
,
'My::C'
,
'My::A'
],
'... My::D->meta->class_precedence_list == (D B A C A)'
);
is_deeply(
[ My::D->meta->linearized_isa ],
[
'My::D'
,
'My::B'
,
'My::A'
,
'My::C'
],
'... My::D->meta->linearized_isa == (D B A C)'
);
eval
{
{
our
@ISA
= (
'My::2::C'
);
our
@ISA
= (
'My::2::A'
);
our
@ISA
= (
'My::2::B'
);
}
My::2::B->meta->class_precedence_list
};
ok($@,
'... recursive inheritance breaks correctly :)'
);
{
our
@ISA
= (
'My::3::A'
);
our
@ISA
= (
'My::3::A'
,
'My::3::B'
);
our
@ISA
= (
'My::3::B'
,
'My::3::C'
);
}
is_deeply(
[ My::3::D->meta->class_precedence_list ],
[
'My::3::D'
,
'My::3::B'
,
'My::3::A'
,
'My::3::C'
,
'My::3::A'
,
'My::3::B'
,
'My::3::A'
],
'... My::3::D->meta->class_precedence_list == (D B A C A B A)'
);
is_deeply(
[ My::3::D->meta->linearized_isa ],
[
'My::3::D'
,
'My::3::B'
,
'My::3::A'
,
'My::3::C'
],
'... My::3::D->meta->linearized_isa == (D B A C B)'
);
my
@CLASS_PRECEDENCE_LIST
;
{
sub
CPL {
push
@CLASS_PRECEDENCE_LIST
=>
'Foo'
}
our
@ISA
= (
'Foo'
);
sub
CPL {
push
@CLASS_PRECEDENCE_LIST
=>
'Bar'
;
$_
[0]->SUPER::CPL();
}
our
@ISA
= (
'Bar'
);
sub
CPL {
push
@CLASS_PRECEDENCE_LIST
=>
'Baz'
;
$_
[0]->SUPER::CPL();
}
our
@ISA
= (
'Baz'
);
sub
CPL {
push
@CLASS_PRECEDENCE_LIST
=>
'Foo::Bar'
;
$_
[0]->SUPER::CPL();
}
our
@ISA
= (
'Foo::Bar'
);
sub
CPL {
push
@CLASS_PRECEDENCE_LIST
=>
'Foo::Bar::Baz'
;
$_
[0]->SUPER::CPL();
}
}
Foo::Bar::Baz->CPL();
is_deeply(
[ Foo::Bar::Baz->meta->class_precedence_list ],
[
@CLASS_PRECEDENCE_LIST
],
'... Foo::Bar::Baz->meta->class_precedence_list == @CLASS_PRECEDENCE_LIST'
);
done_testing;