-+  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

  • select FILEHANDLE
  • select

    Restituisce il filehandle correntemente selezionato. Nel caso FILEHANDLE venga specificato, imposta il filehandle corrente per l'output. Ciò ha due effetti: anzitutto, un write o un print senza filehandle verrà indirizzato a questo FILEHANDLE. In secondo luogo, i riferimenti alle variabili relative all'output si riferiranno a questo canale di output. Ad esempio, se dovete impostare il formato di inizio modulo per più di un canale di output, potreste fare come di seguito indicato:

        select(RAPPORTO1);
        $^ = 'rapporto1_top';
        select(RAPPORTO2);
        $^ = 'rapporto2_top';

    FILEHANDLE può essere un'espressione il cui valore fornisce il nome del reale filehandle. Dunque:

        $vecchiofh = select(STDERR); $| = 1; select($vecchiofh);

    Alcuni programmatori magari preferiscono pensare ai filehandle come ad oggetti con metodi, preferendo scrivere l'ultimo esempio come:

        use IO::Handle;
        STDERR->autoflush(1);
  • select RBITS,WBITS,EBITS,TIMEOUT

    Questa funzione invoca la chiamata di sistema select(2) con le maschere di bit specificate, che possono essere costruite utilizzando fileno e vec, su questa falsariga:

        $rin = $win = $ein = '';
        vec($rin,fileno(STDIN),1) = 1;
        vec($win,fileno(STDOUT),1) = 1;
        $ein = $rin | $win;

    Se desiderate chiamare select su più filehandle, potreste voler scrivere una subroutine:

        sub fhbits {
    	my(@fhlist) = split(' ',$_[0]);
    	my($bits);
    	for (@fhlist) {
    	    vec($bits,fileno($_),1) = 1;
    	}
    	$bits;
        }
        $rin = fhbits('STDIN TTY SOCK');

    L'idioma consueto è:

        ($ntrovati,$temporimasto) =
          select($rout=$rin, $wout=$win, $eout=$ein, $timeout);

    oppure si può bloccare fino a che qualcosa non diventa pronto

        $ntrovati = select($rout=$rin, $wout=$win, $eout=$ein, undef);

    La maggior parte dei sistemi non si preoccupano di restituire qualcosa di utile in $temporimasto, quindi una chiamata a select() in contesto scalare restituisce semplicemente $ntrovati.

    Qualsiasi delle bitmask può avere valore undef (non definito). Il timeout, qualora specificato, è in secondi, che possono anche essere una frazione. Nota: non tutte le implementazioni sono in grado di restituire il $temporimasto. Se non lo sono, restituiscono sempre un $temporimasto uguale al $timeout fornito.

    Potete creare uno sleep di 250 millisecondi in questo modo:

        select(undef, undef, undef, 0.25);

    Va notato che il fatto che select venga riavviata dopo un segnale (ad esempio, SIGALRM) dipende dall'implementazione. Si veda anche perlport per delle note sulla portabilità di select.

    In caso di errore, select si comporta come la chiamata di sistema select(2): essa restituisce -1 ed imposta $!.

    Nota: su alcuni Unix, la chiamata di sistema select(2) potrebbe riferire come "pronto per la lettura" un descrittore di file di un socket, quando in effetti non è disponibile alcun dato, con conseguente bloccaggio a causa di una successiva lettura. Può essere evitato utilizzando sempre il flag O_NONBLOCK sul socket. Si vedano select(2) and fcntl(2) per ulteriori dettagli.

    Note: on some Unixes, the select(2) system call may report a socket file descriptor as "ready for reading", when actually no data is available, thus a subsequent read blocks. It can be avoided using always the O_NONBLOCK flag on the socket. See select(2) and fcntl(2) for further details.

    ATTENZIONE: Non si dovrebbe tentare di mescolare l'I/O con buffer (come read o <FH>) con select, tranne per come viene permesso da POSIX, ed anche in quel caso solo su sistemi POSIX. In quel caso dovete usare sysread.

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