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 や三項演算子と競争すると厳しいけど、そこそこ普通の速度感かなぁ。。