Acme-Dice
view release on metacpan or search on metacpan
lib/Acme/Dice.pm view on Meta::CPAN
package Acme::Dice;
use 5.008008;
use strict;
use warnings;
use Carp;
use Data::Dumper;
BEGIN {
use Exporter ();
use vars qw(@ISA @EXPORT_OK);
@ISA = qw(Exporter);
@EXPORT_OK = qw( roll_dice roll_craps );
}
$Acme::Dice::VERSION = '1.01';
my $defaults = {
dice => 1,
sides => 6,
favor => 0,
bias => 20,
};
sub roll_dice {
my $raw_args = @_ == 1 ? shift : {@_};
# no need to check params if coming from roll_craps
my $args =
delete( $raw_args->{skip_validate} )
? $raw_args
: _validate_params($raw_args);
my @rolls;
my $roll_total = 0;
for ( 1 .. $args->{dice} ) {
my $roll = ( int( rand( $args->{sides} ) ) + 1 );
_apply_bias( \$roll, $args ) if $args->{favor} && $args->{bias};
push( @rolls, $roll );
$roll_total += $roll;
}
return wantarray ? @rolls : $roll_total;
}
sub roll_craps {
my $raw_args = @_ == 1 ? shift : {@_};
croak "param present but undefined: bias"
if exists( $raw_args->{bias} ) && !defined( $raw_args->{bias} );
my $bias = delete( $raw_args->{bias} ) || 0;
croak "Illegal value for 'bias': $bias" if $bias < 0 || $bias > 100;
croak 'RTFM! Unknown params: ' . join( ', ', keys( %{$raw_args} ) )
if keys( %{$raw_args} );
# hey, this is Acme, remember? you were TOLD not to look inside!
return ( wantarray ? ( 3, 4 ) : 7 ) if rand(100) < 5;
my @rolls;
push(
@rolls,
roll_dice(
skip_validate => 1,
dice => 1,
( run in 2.825 seconds using v1.01-cache-2.11-cpan-98e64b0badf )