その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

Test::LocalFunctions がパワーアップしました

ここで紹介した Test::LocalFunctions ですが、パワーアップ致しました。
@ さんが書かれた Test::LocalFunctions::Fast 取り込んだのが主な変更点です。
元々のTest::LocalFunctions は PPI を利用していましたが、
Test::LocalFunctions::Fast では Compiler::Lexer を使用しており動作が高速です。

今回のバージョンアップで

  • Compiler::Lexer がインストールされていれば自動的に Test::LocalFunctins::Fast を利用する
  • インストールされていなければ Test::LocalFunctions::PPI (元々のTest::LocalFunctions) を利用する
という動作をするようになりました。


なお、Compiler::Lexer は requires では無く recommends として cpanfile に記述しているので、
Test::LocalFunctions と同時にCompiler::Lexer をインストールしたい場合は
$ cpanm Test::LocalFunctions --with-recommends
とすれば良いです。
Compiler::Lexer が必要ない場合は、普段通りに
$ cpanm Test::LocalFunctions
という具合にインストールすると良いでしょう。


以下はベンチマークの結果です。やはり Fast の方が高速ですね。
なので、特別な理由が無い限りは Compiler::Lexer を入れて、Fast で動作させた方が良いと思います。
#!/usr/bin/env perl
 
use strict;
use warnings;
use Benchmark qw/:all/;
use Test::More;
use Test::LocalFunctions::PPI;
use Test::LocalFunctions::Fast;
 
cmpthese( timethese( 10000, {
    ppi => sub {
        Test::LocalFunctions::PPI::local_functions_ok(
            "lib/Test/LocalFunctions/Util.pm"
        );
    },
    fast => sub {
        Test::LocalFunctions::Fast::local_functions_ok(
            "lib/Test/LocalFunctions/Util.pm"
        );
    },
}));
done_testing;
 
__DATA__
 
       Rate  ppi fast
ppi  20.1/s   -- -72%
fast 72.6/s 262%   --


追記

@ さんより、「利用しているバックエンドの情報を持ってこれるインターフェースがあった方が良い」
との助言を受けましたので実装致しました。ありがとうございました。