妙に詰まってしまったので備忘録的に書き記しておきます. さて, 次のような継承をしているPerlのクラスがあるとします:
My::Lib1 <- My::Lib2 <- My::Lib3
My::Lib3
はMy::Lib2
を, My::Lib2
はMy::Lib1
を継承している感じです. この時, 例えばMy::Lib3
の親(継承元)はどこかを得るにはどうすればよいでしょうか?
解法1: ISA
を見る
My::Lib3
の継承元は, My::Lib3
の@ISA
に入ります. なので, @ISA
を無理やりに見るという手があります.
no strict 'refs'; my @isa = *{"My::Lib3::ISA"}{ARRAY};
@isa
を見ると, このようになります(Data::Printer
でダンプ):
[ [0] [ [0] "My::Lib2" ] ]
My::Lib3
の継承元であるMy::Lib2
が得られました.
解法2: mro::get_linear_isa
を使う
id:akiym さんに教えてもらった方法ですが, mro::get_linear_isa
を使う手もあります.
my @isa = mro::get_linear_isa("My::Lib3");
@isa
を見ると, このようになります(Data::Printer
でダンプ):
[ [0] [ [0] "My::Lib3", [1] "My::Lib2", [2] "My::Lib1" ] ]
こちらだと, My::Lib3
の継承元であるMy::Lib2
に加えて, その継承元であるMy::Lib1
も得られるので, より便利ですね.