Shinji KONO wrote:
> hash が見えるのを嫌う人も多いが、オブジェクトを呼び出す方で
> 任意の属性を付加出来るのは便利。普通のオブジェクト指向言語で
> は許されない。そのあたりがPerlっぽい。 呼出側で、オブジェク
> トをカスタマイズ出来る。 

ラクダ本では、
> オブジェクトはリファレンスで指された「物」にすぎない
と書かれていますね。

僕は、Perl から OOP に入ったので、何となくリファレンスを憶えて応用して
いったら、それが OOP と呼ばれているものであった、という感じでした。他の
言語の OOP を知らないので、C++ などで OOP が「大袈裟」に喧伝されていたイ
メージから、OOP ってもっと恐ろしい大仰なものかというイメージを脹らませて
いたものでした。

で、Java など OOP で土台から言語仕様をガチガチに固め直してしまったから、
今度はアスペクト志向などという、本末転倒なことになるんじゃないかと。おっ
しゃる通り、Perl だと、OOP のオブジェクトとして扱うことを任意で放棄し
て、呼出し側で、リファレンスとしていじくることができます。

# アスペクト志向という言葉をよく知らないので、外している可能性もあり
# ます。Perl でもアスペクト志向の CPAN モジュールが作られてた気がしま
# す。

> Constructor や new がblessという演算子なので、どの関数呼び出
> しがConstructorかがわからない。自分でオブジェクトの作り方を
> 決める必要がある。new() か、factory pat tern を使うのが普通
> だろう。perldoc perlobj すると、initialize() をConstructorと
> 分けている。
> 
> Interface とかabstract class もない。このあたりは、コンパイ
> ラのチェックの機能でしかないので、自分で「作っているつもり」
> になれば良い。document で明示しよう。

POD の中に各ルーチンを埋め込むような感じでコーディングしたりします。

=head1 METHODS

=over

=item new()

This is the constructor.

=cut

sub new () {
    my $class = shift;
    my $self = {};
    bless $self, $class;
    return $self;
}

=item hoge()

This is an object method.

=cut

sub hoge() {
    (略)
}

=back

-- 
Masanori HATA