Während der Ausführung des Programms werden immer verschiedene Fehler auftreten, z. B. das Öffnen einer nicht vorhandenen Datei.
Wenn während der Ausführung des Programms ein Fehler auftritt, wird es gestoppt. Wir müssen einige Erkennungsmethoden verwenden, um Fehler zu vermeiden und zu verhindern, dass das Programm beendet wird.
Perl bietet mehrere Methoden zur Fehlerbehandlung, die wir im Folgenden einzeln vorstellen.
Die if-Anweisung kann den Rückgabewert der Anweisung ermitteln. Beispiele sind wie folgt:
if(open(DATA, $file)){ ...}else{ die "Fehler: Datei konnte nicht geöffnet werden - $!";}
Die Variable $! im Programm hat eine Fehlermeldung zurückgegeben. Wir können den obigen Code auch auf den folgenden Code vereinfachen:
open(DATA, $file) ||. die „Fehler: Datei konnte nicht geöffnet werden – $!“;
Die Funktion „unless“ ist das Gegenteil von „if“ und wird nur ausgeführt, wenn der Ausdruck „false“ zurückgibt, wie unten gezeigt:
less(chdir("/etc")){ die "Fehler: Verzeichnis kann nicht geöffnet werden - $!";}
Die „less“ -Anweisung ist sehr nützlich, wenn Sie eine Fehlererinnerung festlegen möchten. Wir können den obigen Code auch wie folgt abkürzen:
die „Fehler: Verzeichnis kann nicht geöffnet werden!: $!“, es sei denn(chdir("/etc"));
Die obige Fehlermeldung wird nur ausgegeben, wenn beim Verzeichniswechsel ein Fehler vorliegt.
Das Folgende ist ein einfaches Beispiel für den ternären Operator:
print(exists($hash{value}) ? 'Exists' : 'Existiert nicht',"n");
Im obigen Beispiel haben wir den ternären Operator verwendet, um zu bestimmen, ob der Hashwert vorhanden ist.
Das Beispiel enthält einen Ausdruck mit zwei Werten im Format: Ausdruck? Wert Eins: Wert Zwei .
Die Warnfunktion wird verwendet, um eine Warnmeldung auszulösen. Sie wird an STDERR (Standardausgabedatei) ausgegeben.
chdir('/etc') oder warnen „Verzeichnisse können nicht gewechselt werden“;
Die Die-Funktion ähnelt der Warnung, wird jedoch beendet. Im Allgemeinen als Ausgabe von Fehlermeldungen verwendet:
chdir('/etc') or die „Verzeichniswechsel nicht möglich“;
In Perl-Skripten besteht eine übliche Methode zum Melden von Fehlern darin, die Funktionen warn() oder die() zu verwenden, um Fehler zu melden oder zu generieren. Für das Carp-Modul kann es eine zusätzliche Ebene der Kontrolle über die generierten Nachrichten bieten, insbesondere innerhalb des Moduls.
Das Standard-Carp-Modul bietet Alternativen zu den Funktionen warn() und die(), die informativer und benutzerfreundlicher bei der Fehlerlokalisierung sind. Bei Verwendung innerhalb eines Moduls sind der Modulname und die Zeilennummer in der Fehlermeldung enthalten.
Die Karpfenfunktion kann, ähnlich wie die Warnfunktion, die Trace-Informationen des Programms ausgeben und sendet diese Informationen normalerweise an STDERR:
package T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp;sub function { carp "Fehler im Modul!";}1;
Rufen Sie im Skript das folgende Programm auf:
benutze T;function();
Wenn Sie das obige Programm ausführen, lautet das Ausgabeergebnis:
Fehler im Modul! in test.pl Zeile 4
cluck() ähnelt warn() und bietet einen Stack-Traceback von der Stelle, an der der Fehler aufgetreten ist.
package T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp qw(cluck);sub function { cluck "Error in module!";}1;
Rufen Sie im Skript das folgende Programm auf:
benutze T;function();
Wenn Sie das obige Programm ausführen, lautet das Ausgabeergebnis:
Fehler im Modul! in T.pm Zeile 9 T::function() aufgerufen in test.pl Zeile 4
croak() beendet wie die() das Skript.
package T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp;sub function { croak "Error in module!";}1;
Rufen Sie im Skript das folgende Programm auf:
benutze T;function();
Wenn Sie das obige Programm ausführen, lautet das Ausgabeergebnis:
Fehler im Modul! in test.pl Zeile 4
commit() ähnelt die(), bietet jedoch einen Stack-Traceback von der Stelle, an der der Fehler aufgetreten ist.
package T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp;sub function { gestehen "Fehler im Modul!";}1;
Rufen Sie im Skript das folgende Programm auf:
benutze T;function();
Wenn Sie das obige Programm ausführen, lautet das Ausgabeergebnis:
Fehler im Modul! in T.pm Zeile 9 T::function() aufgerufen in test.pl Zeile 4