2013-07-17 33 views
6

Qual è la differenza tra [email protected] e $! in Perl? Gli errori associati a eval vengono emessi utilizzando [email protected]. $! viene anche utilizzato per acquisire l'errore. Allora qual è la differenza tra entrambi?

risposta

14

Da perldoc perlvar:

Le variabili [email protected], $!, $^E e $? contengono informazioni sui diversi tipi di condizioni di errore che possono essere visualizzati durante l'esecuzione di un programma Perl. Le variabili sono mostrate ordinate dalla "distanza" tra il sottosistema che ha segnalato l'errore e il processo Perl. Corrispondono agli errori rilevati dall'interprete Perl, dalla libreria C, dal sistema operativo o da un programma esterno, rispettivamente.

3

$! viene impostato quando una chiamata di sistema non riesce.

open my $fh, '<', '/foobarbaz' or die $! 

Questo morirà in uscita "Nessun file o directory".

[email protected] contiene l'argomento passato a die. Pertanto:

eval { 
    open my $fh, '<', '/foobarbaz' or die $! 
}; 
if ([email protected]) { 
    warn "Caught exception: [email protected]"; 
} 

E non hanno alcun senso per verificare [email protected] senza utilizzare una qualche forma di eval e non ha senso controllare $! quando non hai chiamato una funzione che può impostarla nel caso di un errore.