use strict; use warnings; my $param_a = 1.5; my $param_b = 6; my @array = ( 1 .. 100 ); sub invK { my ($F, $Ka, $Kb) = @_; return ( 1 - ( 1 - $F )**( 1 / $Kb ) )**( 1 / $Ka ); } for ( 1 .. 20 ) { my $pick = int( invK( rand(), $param_a, $param_b ) * @array ); print "$pick\n"; }