1#!./perl 2 3use strict; 4use warnings; 5use utf8; 6use open qw( :utf8 :std ); 7 8require q(./test.pl); plan(tests => 4); 9 10=pod 11 12This example is take from: http://www.python.org/2.3/mro.html 13 14"My second example" 15class O: pass 16class F(O): pass 17class E(O): pass 18class D(O): pass 19class C(D,F): pass 20class B(E,D): pass 21class A(B,C): pass 22 23 6 24 --- 25Level 3 | O | 26 / --- \ 27 / | \ 28 / | \ 29 / | \ 30 --- --- --- 31Level 2 2 | E | 4 | D | | F | 5 32 --- --- --- 33 \ / \ / 34 \ / \ / 35 \ / \ / 36 --- --- 37Level 1 1 | B | | C | 3 38 --- --- 39 \ / 40 \ / 41 --- 42Level 0 0 | A | 43 --- 44 45>>> A.mro() 46(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>, 47<class '__main__.C'>, <class '__main__.D'>, <class '__main__.F'>, 48<type 'object'>) 49 50=cut 51 52{ 53 package �����::���; 54 use mro 'dfs'; 55 56 sub ���_or_��� { '�����::���' } 57 sub ���_or_��� { '�����::���' } 58 59 package �����::���; 60 use base '�����::���'; 61 use mro 'dfs'; 62 63 sub ���_or_��� { '�����::���' } 64 65 package �����::���; 66 use base '�����::���'; 67 use mro 'dfs'; 68 69 package �����::���; 70 use base '�����::���'; 71 use mro 'dfs'; 72 73 sub ���_or_��� { '�����::���' } 74 sub ��_or_��� { '�����::���' } 75 76 package �����::��; 77 use base ('�����::���', '�����::���'); 78 use mro 'dfs'; 79 80 sub ��_or_��� { '�����::��' } 81 82 package �����::���; 83 use base ('�����::���', '�����::���'); 84 use mro 'dfs'; 85 86 package �����::���; 87 use base ('�����::���', '�����::��'); 88 use mro 'dfs'; 89} 90 91ok(eq_array( 92 mro::get_linear_isa('�����::���'), 93 [ qw(�����::��� �����::��� �����::��� �����::��� �����::��� �����::�� �����::���) ] 94), '... got the right MRO for �����::���'); 95 96is(�����::���->���_or_���, '�����::���', '... got the right method dispatch'); 97is(�����::���->���_or_���, '�����::���', '... got the right method dispatch'); 98 99# NOTE: 100# this test is particularly interesting because the p5 dispatch 101# would actually call �����::��� before �����::�� and �����::��� is a 102# subclass of �����::�� 103is(�����::���->��_or_���, '�����::���', '... got the right method dispatch'); 104