instanceof演算子

Perlにinstanceof演算子があればいいのにと思うことがたまにある。
$xがオブジェクトで,$classのインスタンスであれば真を返す演算子だ。
既存のコードではなかなか一発でできない。

$x->isa($class);                              # (1)
ref($x) && eval{ $x->isa($class} };           # (2)
Scalar::Util::blessed($x) && $x->isa($class); # (3)
Params::Util::_INSTANCE($x, $class);          # (4)

(1)は要件を満たさない
(2)は要件を満たし、ほとんどの場合は高速だが,$xがblessされていないリファレンスだと非常に遅い
(3)も要件を満たすが、ほとんどの場合(2)よりも遅い
(4)の実装は(3)と同じ

そこで,PL_checkハックで演算子を定義してみる。

if($x << $class){
    # $xは$classのインスタンス
}

組み込み演算子の再定義だけあって結構早い。しかし読みやすいと言えるかどうかは…。