すべてのクラスの基底クラスである 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")) { # 必ず真
...
}