# ♻️ Random::Simple

Perl module to generate good random numbers in a user consumable way.

## ❓ Why Random::Simple?

To make generating random numbers as easy as possible _and_ in a manner that
you can use in real code. Generate "good" random numbers without having to
think about it.

## 📦 Installation

```bash
cpanm Random::Simple
```

## 🗃️ Functions

#### random_int($min, $max)
returns a non-biased integer between `$min` and `$max` (inclusive). Range must be no larger than 2**32 - 2.

#### random_float()
returns a random floating point value between 0 and 1 (inclusive).

#### random_bytes($number)
returns a string of random bytes with length of `$number`.

## 💻 Usage

```perl
use Random::Simple;

my $coin_flip      = random_int(1, 2);
my $die_roll       = random_int(1, 6);
my $random_percent = random_float() * 100;
my $buffer         = random_bytes(8);

my @arr        = ('red', 'green', 'blue');
my $rand_item  = $arr[random_int(0, @arr - 1)]; # Random array item
```

## 🧠 Methodology

Perl's internal `rand()` function uses `drand48` which is an older
pseudorandom number generator, and may have limitations. `Random::Simple` uses
[PCG](https://www.pcg-random.org/download.html) which is: modern, simple,
well vetted, and fast. Using `Random::Simple` will upgrade/override the
`rand()` function to use a better PRNG.

`Random::Simple` is automatically seeded with entropy directly
from your OS. On Linux this is `/dev/urandom` and on Windows it uses
CryptGenRandom. You will get statistically unique random numbers
automatically.

## 🔍 See also

If you need finer grained control of your random numbers check out one
of these alternatives:

* [Math::Random::PCG32](https://metacpan.org/pod/Math::Random::PCG32)
* [Math::Random::ISAAC](https://metacpan.org/pod/Math::Random::ISAAC)
* [Math::Random::MT](https://metacpan.org/pod/Math::Random::MT)
* [Math::Random::Secure](https://metacpan.org/pod/Math::Random::Secure)

## 👴 Author

Scott Baker - https://www.perturb.org/
