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のインスタンス }
組み込み演算子の再定義だけあって結構早い。しかし読みやすいと言えるかどうかは…。