クラスサンプル

まずは、クラス定義から。

# クラスのパッケージ名を宣言
package ClassTest;

use Exporter ;

@ISA = (Exporter) ;
@EXPORT = (new,TestMethod) ;

use strict ;

sub new{
    # 暗黙のうちに引き渡されるクラス名を受け取る
    my $class = shift;

    # ここの$selfこそがインスタンス変数そのもの
    # インスタンスメソッド実行時は$selfに詰め込まれたスカラー、配列、リファレンスを
    # 展開して使うことでインスタンスとして振舞う
    my $self = { ARYREF => []} ;

    # bless したオブジェクトリファレンスを返す
    return bless $self, $class;
}

sub TestMethod {
	my $self = shift ;
	my $invar = shift ;
	print "input is $invar\n" ;
	push (@{$self->{ARYREF}},$invar) ;
	foreach my $item (@{$self->{ARYREF}}) {
		print "$item" ;
	}
	print "\n" ;
}

return 1; 

コンストラクタはnew。別にnewって名前である必要は必ずしもない。が、まあ、お約束で。真ん中ぐらいで$selfにインスタンス変数をハッシュとして入れている。中身はARYREFって名前のハッシュキーと、無名配列へのリファレンス。これで$self->{ARYREF}とすることで無名配列へのリファレンスが取り出せる。無名配列は都度メモリが割り当てられるみたいなので、これで各インスタンス固有の配列を持つ事が出来る。
次がテスト用のコード。

use ClassTest ; 

my $myClass1 = ClassTest->new() ;
my $myClass2 = ClassTest->new() ;
my $myClass3 = ClassTest->new() ;

$myClass1->TestMethod('A') ;
$myClass2->TestMethod('a') ;
$myClass1->TestMethod('B') ;
$myClass2->TestMethod('b') ;
$myClass3->TestMethod('fugafuga') ;

これの実行結果は下の通り。

input is A
A
input is a
a
input is B
AB
input is b
ab
input is fugafuga
fugafuga