NAME
Sub::Rate - Rate based sub dispatcher generator
SYNOPSIS
my
$rate
= Sub::Rate->new(
max_rate
=> 100 );
$rate
->add(
10
=>
sub
{ ... } );
# sub1
$rate
->add(
20
=>
sub
{ ... } );
# sub2
$rate
->add(
default
=>
sub
{ ... });
# default sub
my
$func
=
$rate
->generate;
# Calling this $func then:
# sub1 will be called by rate about 10/100 (10%),
# sub2 will be called by rate about 20/100 (20%),
# default sub will be called in rest case (70%),
$func
->();
DESCRIPTION
Sub::Rate generates a SUB that will dispatch some SUBs by specified rate.
CLASS METHODS
new(%options)
my
$obj
= Sub::Rate->new;
Create Sub::Rate object.
Available options are:
max_rate => 'Number'
Max rate. (Default: 100)
rand_func => 'CodeRef'
Random calculate function. Default is:
sub
{
CORE::
rand
(
$_
[0]);
};
You can change random function to your own implementation by this option.
max_rate
is passed as$_[0]
to this function.sort => 'Bool'
METHODS
add($rate : Number|Str, $sub :CodeRef)
$obj
->add( 10,
sub
{ ... } );
$obj
->add( 20,
sub
{ ... } );
$obj
->add(
'default'
,
sub
{ ... } );
Add $sub
to internal sublist rate by $rate
.
If $rate
is not number but "default", then $sub
is registered as default sub. If default sub is already registered, it will be replaced.
generate()
my
$sub
=
$obj
->generate;
Create a new sub that dispatch functions by its rates.
clear()
$obj
->clear;
Clear all registered functions and default function.
AUTHOR
Daisuke Murase <typester@cpan.org>
COPYRIGHT AND LICENSE
Copyright (c) 2012 KAYAC Inc. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.