Funkcja rand() w Perl

W języku programowania Perl jest wbudowana funkcja rand(). Ta funkcja jest używana, aby uzyskać losową liczbę.

Oto przykład:

▶ Run
#!/usr/bin/perl

print rand(10);

Ten program wypisze na ekran liczba losowa od 0 (włącznie) do 10 (ale nie w tym liczba 10).

Na przykład, wynikiem działania tego programu może być liczba 2.61509101678715.

Ograniczenia

Funkcja rand() zwraca псевдослучайное liczba. W niektórych sytuacja w niektórych warunkach można przewidzieć jaką wartość zwróci funkcja rand(). Z tego wynika, że ta funkcja nie jest kryptograficznie barem. Tej funkcji nie należy używać w kryptografii, ale dla uzyskania jakiegoś przypadkowego wartości poza zakresem kryptografii funkcja ta doskonale nadaje się.

Argumenty

my $value1 = rand();
my $value2 = rand($number);

Funkcję rand() bez argumentów można użyć, albo przekazać jej dokładnie jeden argument. Funkcja spodziewa się uzyskać liczbę jako wartość argumentu. Jeśli funkcja ma nie liczba, to ona prowadzi go do grona.

Korzystanie z jednego argumentu

Podczas korzystania z wartości dodatniej jako argument funkcja rand() zwraca liczbę większa lub równa 0 i ściśle mniej od swojego argumentu. Na przykład, jeśli użyć 100w jako argument można uzyskać liczbę 72.9877832186506 jako wynik działania funkcji rand().

Można użyć cząstkowe argumenty. Jeśli określić rand(1.5), to wynikiem będzie liczba jest większa lub równe 0 i ściśle mniej 1.5.

Podczas korzystania z liczby ujemnej jako argument funkcja zwraca liczbę która surowo więcej podanego argumentu i jest mniejsza lub równa 0.

Korzystanie bez argumentów

Korzystanie z funkcji rand() bez argumentów to to samo co jej użyć z argumentem 1. Funkcja rand() zwróci liczbę która jest większa lub równa 0 i ściśle mniej 1, na przykład 0.813735968739824.

▶ Run
#!/usr/bin/perl

print rand(1);

Należy zwrócić uwagę, czy nie podać argument, to argumentem będzie liczba 1, a nie wartość дефолтной zmiennej $_. Jeśli musisz użyć $_ jako wartość rand(), to trzeba napisać wyraźnie:

▶ Run
#!/usr/bin/perl

$_ = 3;

print rand($_);

0 jako wartość argumentu

Liczba 0 jako wartość argumentu funkcji rand() to specjalny przypadek. rand(0) to to samo co rand(1). Funkcja zwróci liczbę większą lub równą 0 i ściśle mniej 1.

Korzystanie z więcej niż jednego argumentu

Jeśli przekazać funkcji rand() więcej niż jeden argument, to będzie błąd:

Too many arguments for rand at script.pl line 3, near "2)"
Execution of script.pl aborted due to compilation errors.

Oficjalna dokumentacja

Oto wynik polecenia perldoc -f rand:

       rand EXPR
       rand    Returns a random fractional number greater than or equal to 0
               and less than the value of EXPR.  (EXPR should be positive.)
               If EXPR is omitted, the value 1 is used.  Currently EXPR with
               the value 0 is also special-cased as 1 (this was undocumented
               before Perl 5.8.0 and is subject to change in future versions
               of Perl).  Automatically calls "srand" unless "srand" has
               already been called.  See also "srand".

               Apply "int()" to the value returned by "rand()" if you want
               random integers instead of random fractional numbers.  For
               example,

                   int(rand(10))

               returns a random integer between 0 and 9, inclusive.

               (Note: If your rand function consistently returns numbers that
               are too large or too small, then your version of Perl was
               probably compiled with the wrong number of RANDBITS.)

               "rand()" is not cryptographically secure.  You should not rely
               on it in security-sensitive situations.  As of this writing, a
               number of third-party CPAN modules offer random number
               generators intended by their authors to be cryptographically
               secure, including: Data::Entropy, Crypt::Random,
               Math::Random::Secure, and Math::TrulyRandom.

Inne artykuły