Hook::BitMask

ふと個人的に欲しくなったので CodeRepos に上げました。
本気でこういう処理をしようと思ったら xs で書くのがいいと思った。

lang/perl/Hook-BitMask
http://coderepos.org/share/browser/lang/perl/Hook-BitMask/trunk


使い方はこんな感じです:

use Hook::BitMask (
    FLAG1 => sub { $_[0] .= 'hello ' }, # 0b0001
    FLAG2 => sub { $_[0] .= 'world ' }, # 0b0010
    FLAG3 => sub { $_[0] .= '!'      }, # 0b0100
);

{
    # 0b0111
    my $flag = FLAG1 + FLAG2 + FLAG3;

    # HOOK を実行するAPI、bitstrap
    bitstrap($flag, my $word1);

    is $word1, 'hello world !';
}


ベンチマークについて興味がありましたら以下をどうぞ。
http://coderepos.org/share/browser/lang/perl/Hook-BitMask/trunk/t/benchmark.pl

さすがに if-else や三項演算子と競争すると厳しいけど、そこそこ普通の速度感かなぁ。。