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

  • die LISTA

    Fuori da un eval, stampa il valore di LISTA su STDERR ed esce dal programma con il valore corrente di $! (errno). Se $! è 0, il codice di uscita è il valore di ($?> 8)> (stato del `comando` in backtick). Se ($?> 8)> è 0, esce con codice 255. All'interno di un eval(), il messaggio di errore viene memorizzato in $@ e il blocco eval viene terminato con undef come valore restituito. Questo rende die il modo di implementare una eccezione.

    Esempi equivalenti:

        die "Impossibile cambiare directory in spool: $!\n" unless chdir '/usr/spool/news';
        chdir '/usr/spool/news' or die "Impossibile cambiare directory in spool: $!\n"

    Se l'ultimo elemento di LISTA non termina con un ritorno a capo, la riga corrente dello script e la riga corrente dell'input (ove esistente) vengono stampate con un ritorno a capo in fondo. Va notato che la "riga corrente dell'input" (chiamata anche "chunk") è soggetto alla nozione di "linea" correntemente utilizzata, ed è disponibile anche nella variabile $.. Consultate perlvar/"$/" e perlvar/"$.".

    Suggerimento: a volte, aggiungere ", stopped" [interrotto, NdT] al vostro messaggio può avere senso quando viene aggiunta la stringa "at pippo line 123". Supponiamo che stiate facendo girare lo script "canasta".

        die "/etc/games non va bene";
        die "/etc/games non va bene, interrotto";

    producono, rispettivamente

        /etc/games non va bene at canasta line 123.
        /etc/games non va bene, interrotto at canasta line 123.

    Si veda anche exit(), warn(), e il modulo Carp.

    Se LISTA è vuota e $@ già contiene un valore (generalmente da un eval precedente), questo valore viene riutilizzato con l'aggiunta di un "\t...propagated" [propagato, NdT]. Può essere utile per propagare delle eccezioni:

        eval { ... };
        die unless $@ =~ /Expected exception/;

    Se LISTA è vuota e $@ contiene un oggetto che ha un metodo PROPAGATE, questo metodo sarà chiamato con il nome del file e il numero di riga come parametri aggiuntivi. In questo caso, il valore restituito rimpiazza il valore in $@, ossia come se fosse stato chiamato <$@ = eval { $@-PROPAGATE(__FILE__, __LINE__) };>>.

    Se $@ è vuoto, viene utilizzata la stringa "Died" [terminato, NdT].

    die() può anche essere chiamato con un argomento che sia un riferimento. Se questo accade all'interno di un eval(), $@ contiene quell'oggetto. Questo comportamento permette di implementare delle eccezioni più sofisticate, utilizzando degli oggetti che possono contenere dati relativi alla natura dell'eccezione. Questo schema è a volte preferibile all'utilizzo di espressioni regolari per verificare la presenza di particolari valori nella stringa $@. Ecco un esempio:

        use Scalar::Util 'blessed';
        eval { ... ; die Unqualche::Modulo::Eccezione->new( PIPPO => "pluto" ) };
        if ($@) {
            if (blessed($@) && $@->isa("Unqualche::Modulo::Eccezione")) {
                # gestisce Unqualche::Modulo::Eccezione
            }
            else {
                # gestisce tutte le altre possibili eccezioni
            }
        }

    Poiché perl converte in stringa i messaggi non gestiti prima di visualizzarli, potreste implementare un overload dell'operatore di conversione a stringa su tali oggetti eccezione. Consultate overload per maggiori dettagli.

    Potete fare in modo che venga chiamata una funzione appena prima che die faccia il suo dovere, impostando un riferimento in $SIG{__DIE__}. La funzione indicata sarà chiamata con il testo dell'errore e può, volendo, modificare il messaggio d'errore chiamando nuovamente die. Si veda perlvar/$SIG{expr} per dettagli sull'utilizzo di %SIG, e "eval BLOCK" per qualche esempio. Nonostante questa funzionalità dovesse essere eseguita solo immediatamente prima dell'uscita dal programma, ma non è più così -- la funzione in $SIG{__DIE__} viene chiamata anche all'interno di blocchi o stringhe in eval()! Se si vuole che la funzione non faccia nulla in questi casi, mettere un

    	die @_ if $^S;

    come prima linea della funzione (si veda perlvar/$^S). Poiché questo può causare effetti collaterali non desiderati, questo comportamento non intuitivo potrebbe essere modificato in una versione successiva.

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