エンジニアブログ

エンジニアブログ
Perl

Perlの勧め(1) Class::Accessor::Fastを使おう

photo.jpg onagatani 2009年04月10日

onagataniです こんにちわ。

今回から数回に分けて自分のお勧めするモジュールを紹介したいと思います。

内容がモダンじゃない!と思う方もいるかもですが自分の好きなモジュールを紹介しますので最新の技術が知りたい方は見ないように...。

一回目は「Class::Accessor::Fast」です。

これはなにかというとPerlでアクセサを自動生成するモジュールです。

たとえば、下記のような場合にとても便利です。

MyClass.pm

package MyClass;

use strict;
use warnings;

sub new {
    my ($class, $args) = @_;
    my $self = {
        address => $args{address},
        blog       => $args{blog},
    };
    return bless $self, $class;
}

sub address {
    my ($self, $address) = @_; 
    if ($address){
        $self->{address} = $address;
    }   
    return $self->{address};
}

sub blog {
    my ($self, $blog) = @_; 
    if ($blog){
        $self->{blog} = $blog;
    }   
    return $self->{blog};
}

1;
__END__

これを

package MyClass;

use strict;
use warnings;
use base qw/Class::Accessor::Fast/;

__PACKAGE__->mk_accessors(qw/ address blog /);

1;
__END__

このように書くことができます。
アクセサを自動生成するほかにnewメソッドも作ってくれるのでとっても便利。
(newはほとんどの場合オーバーライドすることになると思いますが)

使い方も一緒です。

#!/usr/bin/perl

use strict;
use warnings;
use MyClass;
use Perl6::Say;

my $obj = MyClass->new({
    address => 'tokyo',
    blog    => 'wordpress',
});

say $obj->address;
say $obj->blog;

$obj->address('obihiro');
$obj->blog('mt');
say $obj->address;
say $obj->blog;

結果
perl test.pl
tokyo
wordpress
obihiro
mt

というわけでコードも短くなるし読みやすくなるのでお勧めします。