Lors de 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, celui-ci s'arrêtera. Nous devons utiliser certaines méthodes de détection pour éviter les erreurs et empêcher la fermeture du programme.
Perl fournit plusieurs méthodes pour gérer les erreurs, et nous les présenterons une par une ensuite.
L'instruction if peut déterminer la valeur de retour de l'instruction. Les exemples sont les suivants :
if(open(DATA, $file)){ ...}else{ die "Erreur : Impossible d'ouvrir le fichier - $!";}
La variable $! dans le programme a renvoyé un message d'erreur. Nous pouvons également simplifier le code ci-dessus par le code suivant :
open(DATA, $file) || die "Erreur : Impossible d'ouvrir le fichier - $!";
La fonction à moins que ce soit l'opposé de if et ne sera exécutée que lorsque l'expression renvoie false, comme indiqué ci-dessous :
à moins que(chdir("/etc")){ die "Erreur : Impossible d'ouvrir le répertoire - $!";}
L'instruction sauf 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 "Erreur : Impossible d'ouvrir le répertoire ! : $!" à moins que(chdir("/etc"));
Le message d'erreur ci-dessus ne sera affiché qu'en cas d'erreur lors du changement de répertoire.
Voici un exemple simple d'opérateur ternaire :
print(exists($hash{value}) ? 'Exists' : 'N'existe pas',"n");
Dans l'exemple ci-dessus, nous avons utilisé l'opérateur ternaire pour déterminer si la valeur de hachage existe.
L'exemple contient une expression avec deux valeurs, au format : expression ? valeur un : valeur deux .
La fonction warn est utilisée pour déclencher un message d'avertissement. Aucune autre opération ne sera effectuée sur STDERR (fichier de sortie standard). Elle est généralement utilisée pour demander à l'utilisateur :
chdir('/etc') ou warn "Impossible de changer de répertoire" ;
La fonction die est similaire à warn, mais elle existe. Généralement utilisé comme sortie de messages d'erreur :
chdir('/etc') ou die "Impossible de changer de répertoire";
Dans les scripts Perl, une manière courante de signaler les erreurs consiste à utiliser les fonctions warn() ou die() pour signaler ou générer des erreurs. Pour le module Carp, il peut apporter un niveau de contrôle supplémentaire sur les messages générés, 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.
La fonction carp peut générer les informations de trace du programme, similaires à la fonction warn, et envoie généralement ces informations à STDERR :
package T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp;sub function { carp "Erreur dans le module!";}1;
Appelez le programme suivant dans le script :
utiliser T;fonction();
En exécutant le programme ci-dessus, le résultat de sortie est :
Erreur dans le module ! À la ligne 4 de test.pl
cluck() est similaire à warn() et 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 qw(cluck);sub function { cluck "Erreur dans le module!";}1;
Appelez le programme suivant dans le script :
utiliser T;fonction();
En exécutant le programme ci-dessus, le résultat de sortie est :
Erreur dans le module ! à la ligne 9 de T.pm T::function() appelé à la ligne 4 de test.pl
croak(), comme die(), termine le script.
package T;require Exporter;@ISA = qw/Exporter/;@EXPORT = qw/function/;use Carp;sub function { croak "Erreur dans le module!";}1;
Appelez le programme suivant dans le script :
utiliser T;fonction();
En exécutant le programme ci-dessus, le résultat de sortie est :
Erreur dans le module ! À la ligne 4 de test.pl
confess() est similaire à die(), 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 "Erreur dans le module!";}1;
Appelez le programme suivant dans le script :
utiliser T;fonction();
En exécutant le programme ci-dessus, le résultat de sortie est :
Erreur dans le module ! à la ligne 9 de T.pm T::function() appelé à la ligne 4 de test.pl