Class::Data::Inheritableでクラスデータ呼び出し

通常、クラス(パッケージ)からはメソッド(サブルーチン)呼び出ししかできませんが、Class::Data::Inheritableモジュールを使用すれば、クラスデータ(変数)呼び出しが可能になります。
もちろん、サブクラスへの継承・オーバーライドも可能です。


まずは、普通にデータ(変数)を呼び出してみます。

#
# Hoge.pm
#
use strict;
package Hoge;

my $name1 = "fugahoge";

1;

Hogeクラスを作成して、$name1を呼び出してみます。

#!/usr/bin/perl
#
# test.pl
#
use strict;
use warnings;
use Hoge;

my $name1 = Hoge->name1;
print "$name1\n";

実行します。

$ ./test.pl 
Can't locate object method "name1" via package "Hoge" at ./test.pl line 9.

name1なんていうオブジェクトはないよと言われます。


次にClass::Data::Inheritableを使ってみます。

#
# Hoge.pm
#
use strict;
package Hoge;
use base qw(Class::Data::Inheritable);

Hoge->mk_classdata(name1 => 'fugahoge');

1;

mk_classdataを使って、クラスデータのアクセサを宣言します。

#!/usr/bin/perl
#
# test.pl
#
use strict;
use warnings;
use Hoge;

my $name1 = Hoge->name1();
print "$name1\n";

実行します。

$ ./test.pl 
fugahoge

データを呼び出せました。


Class-Data-Inheritable-0.08 - Inheritable, overridable class data - metacpan.org
Class::Data::Inheritable - 継承可能な, オーバーライド可能な、クラスデータ