■2005-09-12
* [Perl][メモ] Class::Accessor::AutoLink
くさした気分を紛らわすために、Perlで楽々アクセサ〜3の2を試す…… このモジュールではオブジェクト毎に最初に配列リファレンスとハッシュリファレンスでアクセサを定義します。これ以外に方法思いつきません。 あー、あってるのかどうか、眠くてよくわかりません。
package MyClass; use base qw(Class::Accessor::AutoLink); my $def = [ 'foo', {bar => [ 'baz', {hoge => ['hoge']}, ]}, ]; __PACKAGE__->init_accessor($def); sub new { my $self = bless {}, shift; } package main; my $obj = MyClass->new(); $obj->foo = 1; $obj->bar->baz = 2; $obj->bar->hoge->hoge = 10;
AUTOLOADを繰り返さない方法(AUTOLOAD内で関数をevalする)のは弾さんがお書きになられてます。
* [Perl][メモ] Class::Accessor::AutoLinkその2
Class::Accessor::AutoLinkのアクセサ定義の方法を変更しました。下記の通り、普通にハッシュリファレンスを渡します。値がデフォルトに。もちろん、blessするハッシュリファレンスで値を上書き可能。
package MyClass; use base qw(Class::Accessor::AutoLink); my $def = { foo => 1, bar => { baz => 2, hoge => {hoe => 3}, }, }; MyClass->init_accessor($def); # init sub new { my $class = shift; my $self = shift; bless $self, $class; } package main; my $obj = MyClass->new({foo => 0});