Gestion des erreurs en Perl
Pendant l'exécution du programme, vous rencontrerez toujours diverses erreurs, comme l'ouverture d'un fichier qui n'existe pas.
Si une erreur se produit pendant l'exécution du programme, le programme s'arrêtera. Nous devons utiliser certaines méthodes de détection pour éviter les erreurs et ainsi empêcher le programme de quitter.
Perl fournit plusieurs méthodes pour gérer les erreurs, et nous allons les présenter une par une.
instruction if
instruction ifElle peut déterminer la valeur de retour d'une instruction, comme le montre l'exemple suivant :
if(open(DATA, $file)){
...
}else{
die "Error: 无法打开文件 - $!";
}
Dans le programme, la variable $! renvoie le message d'erreur. Nous pouvons également simplifier le code ci-dessus en le code suivant :
open(DATA, $file) || die "Error: 无法打开文件 - $!";
fonction unless
unlessLa fonction est l'opposé de if ; elle s'exécute uniquement lorsque l'expression renvoie false, comme indiqué ci-dessous :
unless(chdir("/etc")){
die "Error: 无法打开目录 - $!";
}
unlessL'instruction est très utile lorsque vous souhaitez définir des alertes d'erreur. Nous pouvons également écrire le code ci-dessus sous une forme abrégée :
die "Error: 无法打开目录!: $!" unless(chdir("/etc"));
Le message d'erreur ci-dessus ne sera affiché que lorsque le changement de répertoire échoue.
Opérateur ternaire
Voici un exemple simple d'opérateur ternaire :
print(exists($hash{value}) ? '存在' : '不存在',"\n");
Dans l'exemple ci-dessus, nous avons utilisé un opérateur ternaire pour vérifier si une valeur de hachage existe.
L'exemple contient une expression et deux valeurs, au format :expression ? value1 : value2。
fonction warn
La fonction warn est utilisée pour déclencher un message d'avertissement et n'effectue aucune autre action. Elle écrit dans STDERR (fichier d'erreur standard) et est généralement utilisée pour avertir l'utilisateur :
chdir('/etc') or warn "无法切换目录";
fonction die
La fonction die est similaire à warn, mais elle quittera le programme. Elle est généralement utilisée pour afficher des messages d'erreur :
chdir('/etc') or die "无法切换目录";
Module Carp
Dans les scripts Perl, la manière courante de signaler des erreurs consiste à utiliser les fonctions warn() ou die() pour signaler ou générer des erreurs. Le module Carp, quant à lui, offre un niveau de contrôle supplémentaire sur les messages produits, en particulier à l'intérieur des modules.
Le module standard Carp fournit des alternatives aux fonctions warn() et die(). Elles fournissent plus d'informations sur l'emplacement de l'erreur et sont plus conviviales. Lorsqu'elles sont utilisées dans un module, le message d'erreur inclut le nom du module et le numéro de ligne.
fonction carp
La fonction carp peut produire des informations de trace du programme, similaires à la fonction warn, et envoie généralement ces informations vers STDERR :
package T;
require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;
sub function {
carp "Error in module!";
}
1;
Appelez le programme suivant dans un script :
use T; function();
En exécutant le programme ci-dessus, le résultat de sortie est :
Error in module! at test.pl line 4
fonction cluck
cluck() est similaire à warn(), fournissant une trace de pile depuis 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 un script :
use T; function();
En exécutant 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() est comme die(), et peut terminer le script.
package T;
require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;
sub function {
croak "Error in module!";
}
1;
Appelez le programme suivant dans un script :
use T; function();
En exécutant le programme ci-dessus, le résultat de sortie est :
Error in module! at test.pl line 4
fonction confess
confess() est similaire à die(), mais fournit une trace de 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 un script :
use T; function();
En exécutant 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 4Autres extensions