簡易アクセサ実装

CPANの片隅にひっそりとLog::Facileというモジュールがありまして、これは個人ユースを想定した簡易Loggerです。

http://search.cpan.org/dist/Log-Facile/

ちょっとツールなどつくるときに簡単にログ吐けると楽かなと思い作り始めたのですが、仕事が忙しくなって道半ばで数ヶ月放置状態に。昨日また手を入れ始めました。

前のバージョンではClass::Accessor::Fastに依存していたのですが、「Facile(お手軽)」を標榜していて依存モジュールがあるのもいかがなものかということで自前で簡易アクセサを作ってみました。*1

my @accessor = ( 'log_file',
                 'level_debug',
                 'level_info',
                 'level_error',
                 'level_warn',
                 'level_fatal',
                 'swap_dir',
                 'date_format',
                 'debug_flag', );


sub get {
    my ($self, $name) = @_;
    if ( _is_valid_accessor($name) ) {
        return $self->{$name};
    } else {
        croak 'invalid field name :-P - '.$name;
        return 0;
    }
}

sub set {
    my ($self, $name, $value) = @_;
    if ( _is_valid_accessor($name) ) {
        $self->{$name} = $value;
        return $self;
    } else {
        croak 'invalid field name :-P - '.$name;
        return 0;
    }
}

sub _is_valid_accessor {
    my $name = shift;
    my $enable = 0;
    for my $each (@accessor) {
       if ($each eq $name) {
           $enable = 1; last;
       }
    }
    return $enable;
}

Class::Accessorの$self->name()みたいなことをやろうとすると型グロブ使うとかしないといけないわけですが、フィールド名のチェックくらいならこの程度で十分かなと思います。

*1:version 0.04から取り込んだ実装です