instanceof演算子(2)

Perlのinstanceof演算子のベストプラクティスは何か
Cygwinで試すとref_evalよりscalar_utilが遅かったんですが一般的にはそうでもないようです。
Linux/Perl 5.8.5で試してみると確かにref_evalよりscalar_utilのほうが早い傾向にあります。

For Foo=HASH(0x8a1ccec) <- Fooのインスタンス
                Rate  ref&eval{} scalar_util  instance()  instanceof
ref&eval{}   45948/s          --        -17%        -58%        -66%
scalar_util  55137/s         20%          --        -50%        -59%
instance()  109226/s        138%         98%          --        -19%
instanceof  135244/s        194%        145%         24%          --

For Foo::X::X::X=HASH(0x8b43064) <- Fooのサブクラスのインスタンス
               Rate  ref&eval{} scalar_util  instance()  instanceof
ref&eval{}  39384/s          --        -15%        -35%        -43%
scalar_util 46394/s         18%          --        -24%        -33%
instance()  60703/s         54%         31%          --        -12%
instanceof  68923/s         75%         49%         14%          --

For Unrelated=ARRAY(0x8b43040) <- Fooと無関係なオブジェクト
               Rate  ref&eval{} scalar_util  instance()  instanceof
ref&eval{}  43952/s          --        -17%        -40%        -48%
scalar_util 53227/s         21%          --        -27%        -37%
instance()  73080/s         66%         37%          --        -13%
instanceof  84329/s         92%         58%         15%          --

For undef
                Rate scalar_util  instance()  instanceof  ref&eval{}
scalar_util 123242/s          --        -41%        -61%        -67%
instance()  208776/s         69%          --        -34%        -44%
instanceof  317021/s        157%         52%          --        -15%
ref&eval{}  374797/s        204%         80%         18%          --

For {}
                Rate  ref&eval{} scalar_util  instance()  instanceof
ref&eval{}   17612/s          --        -86%        -92%        -95%
scalar_util 122879/s        598%          --        -41%        -62%
instance()  208776/s       1085%         70%          --        -35%
instanceof  322947/s       1734%        163%         55%          --

それで,このinstance()がXSによる実装,instanceofが"<<"演算子のPLハックによる一般オーバーロード版。instanceof演算子はscalar_utilよりほぼ常に50%ほど高速で,instance()より10-20%ほど高速という結果になりました。
Scalar::Util::Refという名前でモジュールを作ってますが,たかが50%の高速化のためにわざわざ変わったセマンティクスを導入していいものかどうか考え中なのでまだCPANにはあげてません。