GitHub

PerlOOP

http://www.pure.ne.jp/~learner/program/Perl_oo.html のダイジェスト版メモ

パッケージの宣言

package Hoge;

宣言しないとmainというパッケージだと解釈される

変数やサブルーチン名はパッケージローカル

基本的に、1パッケージ1ファイル

最後に

1;

と書いて、1(成功の印)を返すようにする。0を返すとuseやrequireで失敗とみなされる。

コンストラクタ

パッケージ内にnewというサブルーチンを定義する

use Hoge;
my $obj = Hoge->new(引数);

でオブジェクトが生成できる

第1引数には自動的にパッケージ名が渡される。

$obj = Hoge::new('Hoge','100');

と書くのと同じらしい。

bless

newの最後で、ハッシュリファレンスとパッケージ名を引数にblessを呼ばなければならない。

Perlでは、オブジェクトは特殊なハッシュリファレンスとして表されるらしい。 blessは与えられたハッシュリファレンスにパッケージ名を関連付けたもの(=オブジェクト)を返す。

package Stone;

sub new{
  my $pkg = shift;
  my $hash= {
    name   => shift,
    weight => shift
  };
  bless $hash,$pkg;
}

bless $hash => $pkg; と書いても同じ (「=>」は「,」のsyntax sugarなので)(ですよね?)

メソッド定義

普通のサブルーチン定義と同じだが、第1引数にオブジェクト自身が渡る。 代入する変数は$selfという変数にすることが多いようだ。

_で始まるメソッドは外から呼んではいけない(紳士協定)。

source: PerlOOP.hd
View on github | Report issue