Является ли класс $obj1
таким же, как $obj2
?
ref $obj1 eq ref $obj2;
Является ли класс $obj1
подклассом $obj2
's?
$obj1->isa(ref $obj2);
Является ли класс $obj1
суперклассом $obj2
's?
$obj2->isa(ref $obj1);
Класс ни одного объекта не является подклассом класса другого.
См. Выше.
Обновление:
В ответ на комментарии относительно ролей, применяемых во время выполнения:
package My::X;
use Moose; use namespace::autoclean;
sub boo { }
__PACKAGE__->meta->make_immutable;
package My::Y;
use Moose; use namespace::autoclean;
extends 'My::X';
__PACKAGE__->meta->make_immutable;
package My::Z;
use Moose::Role; use namespace::autoclean;
requires 'boo';
package main;
use Test::More tests => 2;
use Moose::Util qw( apply_all_roles );
my $x = My::X->new;
my $y = My::Y->new;
ok($y->isa(ref $x), 'Before role was applied at runtime');
apply_all_roles($x, 'My::Z');
ok($y->isa(ref $x), 'After role was applied at runtime');
Выход:
1..2
ok 1 - Before role was applied at runtime
not ok 2 - After role was applied at runtime
# Failed test 'After role was applied at runtime' at C:\Temp\t.pl line 36.
# Looks like you failed 1 test of 2.