Perlで構造体
Perlで構造体を作りたい場合,Class::Structというモジュールがある.まあハッシュでもいいけども,$a->hogeみたいに構造体っぽくアクセスしたい.Class::Accessorでもいいのだが,Class::Accessorはハッシュをblessしているのに対して,Class::Structは配列をblessして作成することができるので,少し効率が良さそう.
使い方は以下のような感じ.
package Myobj; use Class::Struct; struct(s => '$', a => '@', h => '%', c => 'My_Other_Class'); package My_Other_Class; use Class::Struct; struct(s => '$'); sub hello { my ($self) = @_; print "hello, " . $self->s(), "\n"; } package main; my $obj = new Myobj; $obj->s("foo"); print "s: " . $obj->s, "\n"; $obj->a(0, "bar"); print "a: ", $obj->a(0), "\n"; $obj->h("spam", "egg"); print "h: ", $obj->h("spam"), "\n"; my $other_obj = new My_Other_Class; $other_obj->s("Class::Struct"); $obj->c($other_obj); $obj->c->hello();
これを実行すると
$ perl synopsis.pl s: foo a: bar h: egg hello, Class::Struct $
構造体のメンバにはスカラー,配列,ハッシュ,オブジェクトを指定できる.モジュールの中ではそれらを解析しては動的にコードを生成してevalしている.