Fungsi rand() di Perl

Dalam bahasa pemrograman Perl memiliki fungsi built-in rand(). Fungsi ini digunakan untuk menghasilkan angka acak.

Berikut ini sebuah contoh:

▶ Run
#!/usr/bin/perl

print rand(10);

Program ini menampilkan nomor acak antara 0 (inklusif) untuk 10 (tapi tidak termasuk jumlah 10).

Misalnya, program ini dapat menjadi nomor 2.61509101678715.

Pembatasan

Fungsi rand() kembali pseudorandom number. Dalam beberapa situasi, dalam beberapa kondisi adalah mungkin untuk memprediksi apa nilai kembali fungsi rand(). Dari sini dapat disimpulkan bahwa fungsi ini tidak kriptografi yang kuat. Fungsi ini tidak boleh digunakan dalam kriptografi, tetapi untuk mendapatkan beberapa nilai acak keluar dari lingkup kriptografi-fitur ini sangat ideal.

Argumen

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

Fungsi rand() dapat digunakan tanpa argumen atau memberikan tepat satu argumen. Fungsi mengharapkan angka sebagai nilai argumen. Jika fungsi yang menerima bukan nomor dia memimpin dia ke nomor.

Menggunakan argumen yang sama

Ketika menggunakan angka positif sebagai argumen dari fungsi rand() kembali jumlah lebih besar dari atau sama dengan 0 dan kurang dari argumen. Misalnya, jika anda menggunakan 100di sebagai argumen, anda bisa mendapatkan jumlah 72.9877832186506 sebagai hasil fungsi rand().

Anda dapat menggunakan pecahan argumen. Jika anda menentukan rand(1.5), hasilnya adalah jumlah lebih besar dari atau sama 0 dan benar-benar kurang 1.5.

Ketika anda menggunakan angka negatif sebagai argumen fungsi yang mengembalikan jumlah yang ini benar-benar lebih besar dari yang ditentukan argumen adalah kurang dari atau sama 0.

Digunakan tanpa argumen

Menggunakan rand() dengan tidak ada argumen yang sama seperti yang digunakan dengan argumen 1. Fungsi rand() akan mengembalikan jumlah yang lebih besar dari atau sama 0 dan benar-benar kurang 1, misalnya 0.813735968739824.

▶ Run
#!/usr/bin/perl

print rand(1);

Harap dicatat, jika anda tidak menentukan argumen, argumen adalah jumlah 1, bukan nilai dari variabel default $_. Jika anda ingin menggunakan $_ sebagai nilai rand(), hal ini diperlukan untuk menulis secara eksplisit:

▶ Run
#!/usr/bin/perl

$_ = 3;

print rand($_);

0 sebagai argumen nilai-nilai

Jumlah 0 sebagai nilai argumen dari fungsi rand() adalah kasus khusus. rand(0) adalah sama seperti rand(1). Fungsi ini akan mengembalikan jumlah yang lebih besar dari atau sama dengan 0 dan ketat kecil 1.

Penggunaan lebih dari satu argumen

Jika fungsi transfer rand() lebih dari satu argumen, maka akan error:

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

Dokumentasi resmi

Berikut ini adalah output dari perintah 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.

Artikel lainnya