기능 srand() 에서는 Perl

에서는 Perl 프로그래밍 언어가 내장된 기능 srand().

이 기능을 사용하여 설정하거나 얻을 수 시퀀스의 숫자 값이 기능으로부터 반환하는 rand().

대부분의 기능 srand() 에서 사용되는 테스트를 각각의 실행하 테스트 기능 rand() 같은 값을 반환합니다.

여기에는 예제 코드:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

srand(16);

say int(rand(10));
say int(rand(10));
say int(rand(10));
say int(rand(10));
say int(rand(10));

프로그램의 결과 항상 동일한 5 번호:

1
0
9
3
3

프로그램을 사용하 int(rand(10)) 을 임의의 숫자 사이 0(인클루시브) 을 9(포함).

코드가 호출 srand(16);. 이 호출을 설정 기능 rand() 반환해야 합니다 숫자의 의사 random 시퀀스 번호 16. 따라서,각 실행의 이 리드 프로그램 같은 결과입니다. 이 프로그램이었지 함수를 호출하 srand(),다음 다른 실행되는 프로그램의 다른 값을 반환할 수 있습니다.

인수

기능 srand() 없이 사용할 수 있습니다 모든 인수 또는 포기는 그녀의 정확히 한다.

는 경우에 당신이 통과하면 하나 이상의 인수,그것은 오류가:

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

이 기능을 사용하지 않는 변수 $_. 할 필요가있는 경우 그것을 사용하려면,다음 그것을 명시적으로 전달되어야 합하여 기능 srand($_);.

함수가 기대하는 숫자로 인수 값입니다. 는 경우 기능을 받지 않는 번호 그녀는 그에게 숫자입니다.

기능 삭제 소수부 및 등록하십시오. srand(-2.9) 과 같 srand(2). 여기에는 예제 코드는 것이 보여줍니다.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

foreach my $n (-2, 2, 2.1, 2.9, -2.1, -2.9) {
    my $real_n = srand($n);
    my @arr;
    foreach (1..5) {
        push @arr, int(rand(10));
    }
    printf "%4s  %s  (%s)\n", $n, $real_n, join(', ', @arr);
}

반환 값

시작과 펄 5.14 기능 srand() 항상 반환에서 번호를 14294967296,또는 문자열 0 but true. 이 번호는 번호 순서에 사용되는 기능 rand().

는 경우 기능 srand() 호출이 없는 인수,그 수를 반환합니다 순서는 자동으로 설치됩니다.

는 경우 함수 호출에 인수와 함께 그 반환의 값 순번 설치에서 이 인수:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say srand(1573); # 1573
say srand(-2.9); # 2

그것은 흥미로운 것에 대한 순번 0 수 문자열을 반환합니다 0 but true:

▶ Run
#!/usr/bin/perl

print srand(0);

전 Perl5.14,기능 srand() 항상 수를 반환합니다 1.

공식적인 문서

여기에 출력하는 명령의 perldoc -f srand:

    srand EXPR
    srand   Sets and returns the random number seed for the "rand" operator.

            The point of the function is to "seed" the "rand" function so
            that "rand" can produce a different sequence each time you run
            your program. When called with a parameter, "srand" uses that
            for the seed; otherwise it (semi-)randomly chooses a seed. In
            either case, starting with Perl 5.14, it returns the seed. To
            signal that your code will work *only* on Perls of a recent
            vintage:

                use 5.014;  # so srand returns the seed

            If "srand" is not called explicitly, it is called implicitly
            without a parameter at the first use of the "rand" operator.
            However, there are a few situations where programs are likely to
            want to call "srand". One is for generating predictable results,
            generally for testing or debugging. There, you use
            "srand($seed)", with the same $seed each time. Another case is
            that you may want to call "srand" after a "fork" to avoid child
            processes sharing the same seed value as the parent (and
            consequently each other).

            Do not call "srand()" (i.e., without an argument) more than once
            per process. The internal state of the random number generator
            should contain more entropy than can be provided by any seed, so
            calling "srand" again actually *loses* randomness.

            Most implementations of "srand" take an integer and will
            silently truncate decimal numbers. This means "srand(42)" will
            usually produce the same results as "srand(42.1)". To be safe,
            always pass "srand" an integer.

            A typical use of the returned seed is for a test program which
            has too many combinations to test comprehensively in the time
            available to it each run. It can test a random subset each time,
            and should there be a failure, log the seed used for that run so
            that it can later be used to reproduce the same results.

            "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.

관련 주제

다른 기사