end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

perl で クラス継承の指定

@ISA or base or parent ?

親クラスからの継承を指定する際は、次のように @ISA に代入していました。

package SubClass;

use ParentClass;
use vars qw(@ISA);
@ISA = qw(ParentClass);

plagger では継承を base で実現しているようなので、今後は「base を使おうかなぁ...」と考えていました。先程の例を「use base」で書き換えると、次のようにsrcがスッキリします。

package SubClass;
use base qw/ParentClass/;

ところが、Catalystでは、parent を使用しているじゃないですか。

use parent qw/Catalyst/;

どうやらparentは、perl ver.5.10.0から加わったそうです。また、perldoc parent や perldoc base によれば、どちらも同じように思えます。

package Baz;
BEGIN {
   require Foo;
   require Bar;
   push @ISA, qw(Foo Bar);
}

http://perl-users.jp/nowpast.html

use base と use parent に関しては、perl-users.jp でもちょっと触れていたり、perldoc parent の下のほうにも Based on the idea of "base.pm"
と書かれています。
違いは、いったい何だろう...?

baseは標準モジュール

use base と use parent の具体的な動作の違いは別の機会に調べますが、corelistによれは、parentは、まだperlの標準モジュールではないようなので、しばらく use base を使うことにします。

[endo@colinux ~]$ perl -v
This is perl, v5.10.0 built for i686-linux
<略>

[endo@colinux ~]$ corelist base
base was first released with perl 5.00405

[endo@colinux ~]$ corelist parent
parent was not in CORE (or so I think)