Class::DBI::Loader::Relationshipが便利そうなので、ドキュメント眺めてたら、
Class::DBI::Loader::Relationship - Easier relationship specification in CDBI::L - search.cpan.org
This module acts as a mix-in, adding the relationship method to Class::DBI::Loader.
とかいう記述があったので、何してるんだろかとソース眺め。
結局Class::DBI::Loader::Relationship自体は何もしてナイっぽくて、Class::DBI::Loader::Genericの名前空間でrelationshipメソッドが記述されてた。
うーんpackageって同じ名前空間を複数回宣言していいのか?と不思議だったので、試したのが以下のコード。
package A; sub a1_test { print "a_1\n";} sub a2_test { print "a_2\n";} 1; package B; sub b1_test { print "b_1\n";} sub b2_test { print "b_2\n";} 1; package C; sub c1_test { print "c_1\n";} sub c2_test { print "c_2\n";} 1; package A; sub a3_test { print "a_3\n";} 1; package Main; A::a1_test(); B::b1_test(); C::c2_test(); A::a3_test();
で、実行。果たしてa3_testは呼び出されるんだろうか?
$ perl packtest.pl a_1 b_1 c_2 a_3
うーん、これでもいいのね。
ただmix-inに関してはどっかから借りてくるのをmix-inって呼ぶのかナァと漠然と感じていたので、こういうやり方をmix-inと呼ぶのが, アイスクリームにアイスクリームを混ぜ込んでるみたいで、ちょっと不思議な感じがするんだよなぁ。