読者です 読者をやめる 読者になる 読者になる

さわだのノート

書籍のお仕事に役立つかもしれない思いつきを記録しています。

RSS: 記事の更新情報 Rss Feed

Perlのオブジェクト指向を補助するモジュールその3 Class::Accessor::Lite

Perlオブジェクト指向はハッシュにアクセスするためのアクセサーをいちいち書かないといけないとかで、ちょっと面倒だったりします。だったらCPANモジュールでなんとかすればいいよね、ということでそれらの不満を解消するための、オブジェクト指向を補助するモジュールがたくさんリリースされているらしいです。

その1つが、Class::Accessor::Liteです。僕は今、Mooというモジュールでスクリプトを書いていたのですが、それよりはだいぶシンプルな機能を提供するようです。覚えることが少なくて済みそうで助かりますね。

さっそく適当にスクリプトを書いてみました。

package PackageName {
    use v5.16;
    use warnings;
    use utf8;

    use Class::Accessor::Lite (
        new => 1,
        rw  => [qw(foo bar)],
    );

    sub name {
        my $self = shift @_;
        return join "\t", @_;
    }

    1;
}

package main {
    use v5.16;
    use warnings;
    use utf8;
    use open IO => qw/:utf8 :std/;
    use autodie;

    use Test::More tests => 4;

    my $new = PackageName->new({
            foo => 'Sawada',
            bar => 'Takehiro',
        });

    isa_ok($new, 'PackageName', 'isa check');
    is($new->foo, 'Sawada', 'foo method check');
    is($new->bar, 'Takehiro', 'bar method check');
    is($new->name(qw/deep sleep time/),
        'deep sleep   times', 'name method check');
}

実行させた結果はこんな感じになります。

1..4
#   Failed test 'name method check'
#   at sample.pl line 35.
#          got: 'deep  sleep   time'
#     expected: 'deep  sleep   times'
# Looks like you failed 1 test of 4.
ok 1 - isa check isa PackageName
ok 2 - foo method check
ok 3 - bar method check
not ok 4 - name method check

これは……適当に書けていいですね。