Perl Fehlerbehandlung

Während der Programmausführung werden Sie immer wieder auf verschiedene Fehler stoßen, z. B. beim Öffnen einer Datei, die nicht existiert.

Wenn während der Programmausführung ein Fehler auftritt, wird das Programm angehalten. Wir müssen einige Erkennungsmethoden verwenden, um Fehler zu vermeiden und so zu verhindern, dass das Programm beendet wird.

Perl bietet mehrere Methoden zur Fehlerbehandlung, die wir nacheinander vorstellen werden.


if-Anweisung

if-AnweisungSie kann den Rückgabewert einer Anweisung bestimmen, wie im folgenden Beispiel gezeigt:

if(open(DATA, $file)){
   ...
}else{
   die "Error: 无法打开文件 - $!";
}

Im Programm gibt die Variable $! die Fehlermeldung zurück. Wir können den obigen Code auch zum folgenden Code vereinfachen:

open(DATA, $file) || die "Error: 无法打开文件 - $!";

unless-Funktion

unlessDie Funktion ist das Gegenteil davon; sie wird nur ausgeführt, wenn die Bedingung falsch ist, wie unten gezeigt:

unless(chdir("/etc")){
   die "Error: 无法打开目录 - $!";
}

unlessDie Anweisung ist sehr nützlich, wenn Sie Fehlerwarnungen festlegen möchten. Wir können den obigen Code auch in einer Kurzform schreiben:

die "Error: 无法打开目录!: $!" unless(chdir("/etc"));

Die obige Fehlermeldung wird nur angezeigt, wenn der Verzeichniswechsel fehlschlägt.


Ternärer Operator

Das Folgende ist ein einfaches Beispiel für einen ternären Operator:

print(exists($hash{value}) ? '存在' : '不存在',"\n");

Im obigen Beispiel haben wir einen ternären Operator verwendet, um zu prüfen, ob ein Hash-Wert existiert.

Das Beispiel enthält einen Ausdruck und zwei Werte, im Format:expression ? value1 : value2。


warn-Funktion

Die warn-Funktion wird verwendet, um eine Warnmeldung auszulösen, und führt keine weiteren Aktionen aus. Sie gibt an STDERR (Standardfehlerdatei) aus und wird normalerweise verwendet, um den Benutzer hinzuweisen:

chdir('/etc') or warn "无法切换目录";

die-Funktion

Die Funktion die ähnelt warn, beendet jedoch das Skript. Sie wird im Allgemeinen zur Ausgabe von Fehlermeldungen verwendet:

chdir('/etc') or die "无法切换目录";

Carp-Modul

In Perl-Skripten besteht die übliche Methode zum Melden von Fehlern darin, die Funktionen warn() oder die() zu verwenden, um Fehler zu melden oder zu erzeugen. Das Carp-Modul hingegen bietet eine zusätzliche Kontrollebene über die erzeugten Meldungen, insbesondere innerhalb von Modulen.

Das Standard-Carp-Modul bietet Alternativen zu den Funktionen warn() und die(). Sie liefern mehr Informationen zum Fehlerort und sind benutzerfreundlicher. Bei Verwendung in einem Modul enthält die Fehlermeldung den Modulnamen und die Zeilennummer.

carp-Funktion

Die Funktion carp kann Programm-Trace-Informationen ausgeben, ähnlich der Funktion warn, und sendet diese Informationen normalerweise an STDERR:

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   carp "Error in module!";
}
1;

Rufen Sie das folgende Programm in einem Skript auf:

use T;
function();

Beim Ausführen des obigen Programms lautet das Ausgabeergebnis:

Error in module! at test.pl line 4

cluck-Funktion

cluck() ist ähnlich wie warn() und liefert eine Stack-Backtrace 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 das folgende Programm in einem Skript auf:

use T;
function();

Beim Ausführen des obigen Programms lautet das Ausgabeergebnis:

Error in module! at T.pm line 9
    T::function() called at test.pl line 4

croak-Funktion

croak() ist wie die() und kann das Skript beenden.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   croak "Error in module!";
}
1;

Rufen Sie das folgende Programm in einem Skript auf:

use T;
function();

Beim Ausführen des obigen Programms lautet das Ausgabeergebnis:

Error in module! at test.pl line 4

confess-Funktion

confess() ähnelt die(), bietet jedoch einen Stack-Backtrace von der Stelle, an der der Fehler aufgetreten ist.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   confess "Error in module!";
}
1;

Rufen Sie das folgende Programm in einem Skript auf:

use T;
function();

Beim Ausführen des obigen Programms lautet das Ausgabeergebnis:

Error in module! at T.pm line 9
    T::function() called at test.pl line 4
Weitere Erweiterungen