通常、クラス(パッケージ)からはメソッド(サブルーチン)呼び出ししかできませんが、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 - 継承可能な, オーバーライド可能な、クラスデータ