indietro

  • do BLOCCO

    Non è proprio una funzione. Restituisce il valore dell'ultimo comando nella sequenza dei comandi indicati da BLOCCO. Quando viene modificato da un modificatore di ciclo while o until, esegue il BLOCCO una volta prima di testare la condizione del ciclo (Su altre istruzioni, i modificatori di loop testano prima il condizionale).

    do BLOCCO non conta come un ciclo, dunque le istruzioni di controllo del ciclo next, last o redo non possono essere usati per lasciare o ricominciare il blocco. Consultate perlsyn per strategie alternative.

  • do SUBROUTINE(LISTA)

    Questa formadi chiamata a subroutine è deprecata. Consultate perlsub.

  • do ESPR

    Utilizza il valore di ESPR come un nome di file ed esegue il contenuto del file come fosse uno script Perl.

        do 'stat.pl';

    è proprio come

        eval `cat stat.pl`;

    eccetto che è più efficiente e concisa, tiene traccia del nome file corrente per i messaggi d'errore, ricerca directory di @INC e aggiorna %INC se il file viene trovato. Consultate perlvar/Predefined Names [Nomi predefiniti, NdT] per queste varabili. Differisce anche per il fatto che il codice valutato con do NOMEFILE non può vedere i lessicali nello scope che lo include; eval STRINGA li vede. È lo stesso, comunque, nel fatto che esso riesegue un'analisi sintattica del file ogni qualvolta viene chiamato, dunque probabilmente non volete fare questo all'interno di un ciclo.

    Se do non può leggere il file, esso restituisce undef e imposta $! con l'errore. Se do può leggere il file ma non lo può compilare, restituisce undef e imposta un messaggio di errore in $@. Se il file è compilato con successo, do restituisce il valore dell'ultima espressione valutata.

    Va notato che l'inclusione di moduli di libreria viene fatta meglio con gli operatori use e require che eseguono anche un controllo automatico degli errori e sollevano un'eccezione se ci fosse un problema.

    Potreste gradire l'utilizzo di do per leggere in un file di configurazione di un proramma. Il controllo manuale degli errori può essere fatto in questo modo:

        # legge nei file di configurazione: prima in quelli di sistema poi in quelli utente
        for $file ("/share/prog/default.rc",
                   "$ENV{HOME}/.unqualcheprogrammarc")
       {
    	unless ($valore_restituito = do $file) {
    	    warn "non si e` potuto fare l'analisi sintattica di $file: $@" if $@;
    	    warn "non si e` potuto eseguire do sul $file: $!"   unless defined $valore_restituito;
    	    warn "non si e` potuto eseguire il $file"           unless $valore_restituito;
    	}
        }