編集(管理者用) | 編集 | 差分 | 新規作成 | 一覧 | RSS | 表紙 | 検索 | 更新履歴

SimplePerlClass

Perlで、クラス作成用のモジュール等を使わずにごく簡単にクラスを作成する時のサンプル。

package Person;
use strict;
use warnings;
use Carp;

my @ATTRS = qw( name mail url );

# make accessors
for my $attr (@ATTRS) {
    my $acc_ref = sub {
        @_ > 1
            ? $_[0]->{$attr} = $_[1]
            : $_[0]->{$attr};
    };
    no strict 'refs';
    *{$attr} = $acc_ref;
}

# constructor (argument is hash ref.)
sub new {
    my $self = {};
    $self->{$_} = $_[1]->{$_} for @ATTRS;
    bless $self, $_[0];
}

sub inspect {
    my ($self) = @_;
    printf "[%s]\n", ref $self;
    for my $attr (@ATTRS) {
        printf "%10s => %s\n", $attr, $self->$attr;
    }
}

1;

動作確認用スクリプト

use strict;
use warnings;

use Person;

my $john = Person->new({
    name => 'john',
    mail => 'john@example.com',
    url => 'http://john.example.com',
});

$john->inspect();

my $paul = Person->new();
$paul->name('paul');
$paul->mail('paul@example.com');
$paul->url('http://example.com/~paul/');
$paul->inspect();