- 467 名前:nobodyさん mailto:sage [2007/10/31(水) 15:47:41 ID:???]
- >>459
エレガントかしらないけどこんなパッケージ作ってる。 (不要箇所削ったのでそのまま動くか不明) package Local::Base; use strict; use warnings; our $DEBUG = 0; sub class {ref$_[0]||$_[0]||__PACKAGE__} sub new {(bless {} => class( shift() ))->init(@_)} sub mode :method {shift->param('mode',@_)} sub method_name :method {shift->{method_name}->{ shift() }} sub default_method :method {die('不正なmodeを受け取りました')} sub init :method { my $self = shift; my %param = @_; $self->{method_name} = $param{method_name} || {}; return $self->run_method( $self->mode , @_ ); } sub run_method :method { my $self = shift; my $method = $self->method_name( shift ); $method = 'default_method' unless $method && $self->can( $method ); return $self->$method(@_); } 1;
|

|