indietro

  • warn LISTA

    Genera un messaggio sullo STDERR, esattamente come c<die>, ma non esce e non solleva un'eccezione.

    Se LISTA è vuota e $@ contiene già un valore (solitamente derivante da un precedente eval), tale valore viene utilizzato dopo aver concatenato "\t...caught" [preso, NdT] a $@. Questo è utile per rimanere quasi, ma non del tutto, uguali a die.

    Se $@ è vuota, allora viene utilizzata la stringa "Warning: Something's wrong" ["Attenzione: Qualcosa è andato storto", NdT].

    Se è stato installato un handler di $SIG{__WARN__}, non viene visualizzato alcun messaggio. È compito dell'handler occuparsi del messaggio nella maniera che ritene opportuna (ad esempio, convertendolo in una die). La maggior parte degli handler devono quindi occuparsi di visualizzare i warning che non sono preparati a gestire, chiamando warn di nuovo all'interno dell'handler stesso. Va notato che questa è una procedure sicura, che non creerà un ciclo senza fine, poiché gli hook a __WARN__ non vengono chiamati dall'interno di uno di essi.

    Noterete che questo comportamento è in qualche modo diverso da quello degli handler di $SIG{__DIE__} (che non sopprimono il testo di errore, ma possono invece chiamare di nuovo die per cambiarli).

    L'uso dell'handler __WARN__ fornisce un potente metodo per mettere a tacere tutti i warning (anche quelli cosiddetti obbligatori). Ad esempio:

        # cancella *tutti* i warning della compilazione
        BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $FAIWARN } }
        my $pippo = 10;
        my $pippo = 20;        # nessun warning sul my $pippo duplicato,
                               # ma ehi, lo avete chiesto voi!
        # nessun warning di compilazione o esecuzione prima di questo punto
        $FAIWARN = 1;
        # warning di esecuzione abilitati dopo questo punto
        warn "\$pippo e` vivo e $pippo!";     # viene mostrato

    Consultate perlvar per dettagli sull'impostazione delle voci in %SIG, e per altri esempi. Consultate il modulo Carp per altri tipi di warning che usano le sue funzioni carp() e cluck().