-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


Funzioni Perl in italiano

indietro

  • srand ESPR
  • srand

    Imposta il seme del generatore di numeri casuali per l'operatore rand.

    Lo scopo della funzione è seminare ["to seed" in iglese, NdT] la funzione rand affinché possa produrre una sequenza diversa ogni volta che lanciate il vostro programma.

    Se srand() non viene chiamata esplicitamente, verrà chiamata implicitamente la prima volta che viene usato rand. Comunque, questo non era il comportamento delle versioni di Perl precedenti alla 5.004, quindi se il vostro script si avvale di una vecchia versione dell'interprete, dovrebbe chiamare srand.

    La maggior parte dei programmi non chiameranno affatto srand(), fatta eccezione per quelli che hanno bisogno di un punto di partenza crittograficamente robusto anziché quello di default, il quale basato sull'ora, l'ID del processo, l'allocazione di memoria o il device /dev se disponibile, è generalmente accettabile.

    Potete chiamare srand($seme) con lo stesso $seme per riottenere la medesima sequenza da rand(), ma di solito questo si fa esclusivamente per generare risultati prevedibili, per fare test o debugging. Altrimenti, non chiamate srand() più di una volta nei vostri programmi.

    Non chiamate srand() (vale a dire, non chiamatela senza argomenti) più di una volta in uno script. Lo stato interno del generatore di numeri casuali dovrebbe contenere più entropia di quella che può essere fornita da qualunque seme, quindi chiamare srand() un'altra volta di fatto causa una perdita di casualità.

    La maggior parte delle implementazioni di srand prendono un intero e troncheranno la parte decimale senza dire nulla. Questo significa che srand(42) produrrà di solito gli stessi risultati di srand(42.1). Per andare sul sicuro, passate sempre a srand valori interi.

    Nelle versioni di Perl precedenti alla 5.004, il seme di default era solo il valore corrente di time. Non si tratta di un seme particolarmente buono, quindi molti vecchi programmi forniscono un loro personale valore per il seme (spesso time ^ $$ oppure time ^ ($$ + ($$ << 15))), ma questo non è più necessario.

    Comunque, per ragioni crittografiche, vi serve qualcosa di più casuale del seme di default. Costruire un checksum dell'output compresso di uno o più programmi che monitorano uno stato del sistema operativo che cambia di frequente è il modo che viene usato di solito. Ad esempio:

        srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`);

    Se tenete particolarmente a questo aspetto, date un'occhiata al modulo Math::TrulyRandom su CPAN.

    I programmi (come gli script CGI) che vengono usati frequentemente e che fanno uso di

      time ^ $$

    possono cadere preda della proprietà matematica che

        a^b == (a+1)^(b+1)

    un terzo delle volte. Quindi non fatelo.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google