- クラスとは、パッケージ(package)
- メソッドは、サブルーチン(sub)
- オブジェクト(インスタンス)は、構造体
- オブジェクト指向 class->method(@arg); # &class::sub("class",@arg);の呼び出しと同等、文字列クラス名と引数配列
package main;
use strict;
use warnings;
use flower;
my $obj_ref = flower->new();#//コンストラクタの呼び出し
$obj_ref->hana_set('himawari'); #//メソッドの呼び出し |
- PERLパケージ &package::sub(@arg); #引数配列
- 構造体 bless {}, "class"; #//無名ハッシュのリファレンスとクラス名の文字列をつなぐ。
- blessがあるサブルーチンを「コンストラクタ」と呼びます
- blessできるもの、ハッシュ、配列、スカラー、正規表現、サブルーチン、形ブログ
package flower;
use strict;
use warnings;
sub new{ #//コンストラクタ
my $class = shift;
my $self = {};
return (bless $self=>$class); #//blessされたリファレンスを返す
}
sub hana_set{ #//メソッド
my ($self,$name) = @_;
$self->{'name'}=$name;
} |
- 引数を持たない &Package::sub(); と Packege->sub(); は同じ結果を返す
- クラスの継承(class inheritance)には use base qw( BASE ) を使います。BASE には親クラス(base class)となるクラスの名前(パッケージ名)を空白で区切って書き並べます。
- base 宣言したPACKAGEの中に該当呼び出しメソッドが無い場合、base宣言したクラス内にそのメソッドがあるか探索します。
package main;
use strict;
use warnings;
use color;
my $obj_ref = color->new();#//コンストラクタの呼び出し
$obj_ref->hana_set('himawari'); #//メソッドの呼び出し
$obj_ref->color_set('red'); #//メソッドの呼び出し
package color;
use strict;
use warnings;
use base qw( flower ); #//継承
sub color_set{ #//メソッド
my ($self,$name) = @_;
$self->{'color'}=$name;
} |
- その最初の引数がインスタンス(ブレスされたリファレンス) なのかクラス名(文字列)なのかという点だけです。
- ref演算子をブラスされたリファレンスに対して使うと 文字列(クラス名)を返し、(クラス名のような)文字列に 対して使うと "" を返します
SUPER::method は現在のパッケージの @ISA から method を探し, 最初に見つかったものを呼び出します. これは $class の @ISA は見ない点に注意してください.
最終更新時間:2012年09月06日 00時58分28秒