Sub::Rateと言うのを書いた
Sub::Rate - Rate based sub dispatcher generator - metacpan.org
確率に応じて処理を振り分けたいというような要件をカジュアルにクリアできる感じになっております。
たとえばいわゆるガチャ的なものを考えたときに、
my $rate = Sub::Rate->new( max_rate => 100 );
$rate->add( 0.1, sub { say 'Super rare' }); # 0.1 %
$rate->add( 3, sub { say 'Rare' }); # 3 %
$rate->add( default => sub { 'Normal' }); # 残り
my $func = $rate->generate;
みたいな感じで関数を生成できて、この生成した $func
は呼ぶと確率に応じて登録された関数を呼び出してくれる、というようなもの。
母数となる数字(max_rate
)をあらかじめ設定しておいて、そのうちどのくらいの率かというのを関数ごとに指定するインタフェースのモジュールが欲しかったんだけど見つけられなかったので。(検索ワードが悪いという説もある…)