妙に詰まってしまったので備忘録的に書き記しておきます. さて, 次のような継承をしている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も得られるので, より便利ですね.