まくまくPerlノート
あるメソッドが存在するか調べる
2008-06-27

すべてのクラスの基底クラスである UNIVERSAL パッケージに用意されている can() メソッドを使用すると、あるクラス(あるはそのオブジェクト)にあるメソッドが定義されているかを調べることができます。

if (UNIVERSAL::can($obj, "greet")) {
    print "This obj can greet().\n";
}

$obj が bless されていることが保証されるのであれば、次のようにメソッドとして呼び出せます。

if ($obj->can("greet")) {
    ...
}

UNIVERSAL パッケージに定義されているメソッドを引数にして UNIVERSAL::can を呼び出すと、必ず真を返します。

if ($obj->can("can")) {  # 必ず真
    ...
}
2008-06-27