Perlで匿名クラスを書いてみる、の巻
id:nekokakさんの最近のエントリ(ANONクラスの生成 - Hatena::Diary::Neko::kak 500 Internal Server Error)を読んで、自分でも試してみた。
ついでに、globの勉強。
#!/usr/bin/env perl # anonclass_test.pl use strict; use warnings; { package Hoge; sub new { return bless {}, shift; } sub hoge { my $self = shift; if (@_) { $self->{hoge} = $_[0]; } $self->{hoge}; } } my $pkg = 'Fuga'; { no strict 'refs'; @{"$pkg\::ISA"} = qw/Hoge/; ${"$pkg\::foo"} = 'foo'; *{"$pkg\::fuga"} = sub { my $self = shift; if (@_) { $self->{fuga} = $_[0]; } return ${"${pkg}::foo"} . " -> " . $self->{fuga} . "!!!!!"; } } my $f = $pkg->new; print $f->hoge('test'), "\n"; print $f->fuga('piyo'), "\n";
% perl anonclass_test.pl
test
foo -> piyo!!!!!
Fuga::fugaメソッドからFuga::fooの変数にアクセスするためには、もっといい書き方がある気がする…