インスタンス変数でオブジェクトを保持する

久しぶりに新しい友達ができました。
さて、オブジェクト指向モジュール開発で、あるクラスライブラリの
サブクラス的なものを開発する場合は多いです。
その時に、そのままサブクラスとして実装できない、またはしたくない。
でも、どのメソッドからもメイン機能となるクラスのインスタンスにアクセスしたい。
そんな時に使える方法。

IO::Fileクラスを利用した、クラスの作成例。

#!/usr/bin/perl

use strict;
use warnings

use IO::File;

sub new {
    my $class = shift;
    my $file = shift;
    my $io = IO::File->new( $file , 'r+' );
    my $self = {
        io => $io
    }
    return bless $self , $class;
}

sub get {
    my $self = shift;
    return $self->{io}->getlines;
}

sub write {
    my $self = shift;
    my $data = shift;
    $self->{io}->seek( 0 , 0 );
    $self->{io}->print( $data );
}

sub DESTROY {
    my $self = shift;
    $self->{io}->close;
}

1;


こんな感じで、コンストラタ内でベースとして使用したいクラスの
インスタンスを作成し、bless。
これでクラス内のインスタンスにアクセスするのと同じ方法でベースと
なるクラスを使用できます。