Gestion des erreurs Perl


Lorsque le programme est en cours d'exécution, vous rencontrerez toujours diverses erreurs, telles que l'ouverture d'un fichier inexistant.

Si une erreur se produit pendant l'exécution du programme, celui-ci s'arrêtera. Nous devons utiliser certaines méthodes de détection pour éviter les erreurs et empêcher le programme de se fermer.

Perl fournit plusieurs méthodes pour gérer les erreurs, et nous les présenterons une par une ensuite.


l'instruction if

l'instruction if peut déterminer la valeur de retour de l'instruction L'exemple est le suivant :

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

La variable $. ! dans le programme a renvoyé une information d'erreur. Nous pouvons également simplifier le code ci-dessus au code suivant :

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

sauf si la fonction

sauf si La fonction est l'opposé de if, elle ne renvoie false que lorsque le expression Exécuté comme suit : l'instruction

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

sauf si est très utile lorsque vous souhaitez définir un rappel d'erreur. Nous pouvons également abréger le code ci-dessus comme suit :

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

Le message d'erreur ci-dessus ne sera affiché qu'en cas d'erreur lors du changement de répertoire.


Opérateur ternaire

Ce qui suit est un exemple simple de l'opérateur ternaire :

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

Dans l'exemple ci-dessus, nous avons utilisé l'opérateur ternaire pour déterminer le hachage si la valeur existe. L'instance

contient une expression avec deux valeurs, le format est : Expression ? Valeur un : Valeur deux .


fonction d'avertissement

la fonction d'avertissement est utilisée pour déclencher un message d'avertissement. Il n'y aura pas d'autres opérations. Elle est sortie vers STDERR (fichier de sortie standard). inviter l'utilisateur :

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

die function

die la fonction est similaire à warn, mais elle exécutera exit. Sortie de message d'erreur généralement utilisée :

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

Module Carp

Dans les scripts Perl, la manière courante de signaler les erreurs est d'utiliser la fonction warn() ou die() pour signaler ou générer erreur. Dans le cas du module Carp, il apporte un niveau de contrôle supplémentaire sur les messages produits, notamment au sein du module.

Le module Carp standard fournit des alternatives aux fonctions warn() et die() qui sont plus informatives et plus conviviales pour fournir la localisation des erreurs. Lorsqu'il est utilisé dans un module, le nom du module et le numéro de ligne sont inclus dans le message d'erreur.

Fonction carpe

La fonction carpe peut générer les informations de suivi du programme, similaires à la fonction d'avertissement, et envoie généralement les informations à STDERR :

package T;

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

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

Appelez ce qui suit programme dans le script :

use T;
function();

exécute le programme ci-dessus et le résultat de sortie est :

Error in module! at test.pl line 4

fonction cluck

cluck() est similaire à warn(), fournissant un trace de la pile à partir de l'endroit où l'erreur s'est produite.

package T;

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

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

Appelez le programme suivant dans le script :

use T;
function();

Exécutez le programme ci-dessus, le résultat de sortie est :

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

fonction croak

croak() et die() De même, vous pouvez terminer le script.

package T;

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

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

appelle le programme suivant dans le script :

use T;
function();

Exécutez le programme ci-dessus, le résultat de sortie est :

Error in module! at test.pl line 4

confess function

confess() et die() Similaire, mais fournit une trace de la pile à partir de l'endroit où l'erreur s'est produite.

package T;

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

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

Appelez le programme suivant dans le script :

use T;
function();

Exécutez le programme ci-dessus, le résultat de sortie est :

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