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 tests the classic diamond inheritance pattern. 13 14 <A> 15 / \ 16<B> <C> 17 \ / 18 <D> 19 20=cut 21 22{ 23 package Diᚪၚd_A; 24 sub hèllò { 'Diᚪၚd_A::hèllò' } 25} 26{ 27 package Diᚪၚd_B; 28 use base 'Diᚪၚd_A'; 29} 30{ 31 package Diᚪၚd_C; 32 use base 'Diᚪၚd_A'; 33 34 sub hèllò { 'Diᚪၚd_C::hèllò' } 35} 36{ 37 package Diᚪၚd_D; 38 use base ('Diᚪၚd_B', 'Diᚪၚd_C'); 39 use mro 'c3'; 40} 41 42ok(eq_array( 43 mro::get_linear_isa('Diᚪၚd_D'), 44 [ qw(Diᚪၚd_D Diᚪၚd_B Diᚪၚd_C Diᚪၚd_A) ] 45), '... got the right MRO for Diᚪၚd_D'); 46 47is(Diᚪၚd_D->hèllò, 'Diᚪၚd_C::hèllò', '... method resolved itself as expected'); 48is(Diᚪၚd_D->can('hèllò')->(), 'Diᚪၚd_C::hèllò', '... can(method) resolved itself as expected'); 49is(UNIVERSAL::can("Diᚪၚd_D", 'hèllò')->(), 'Diᚪၚd_C::hèllò', '... can(method) resolved itself as expected'); 50