Latest web development tutorials

la gestion des erreurs Perl

Le programme est en cours d'exécution, toujours rencontrer une variété d'erreurs, telles que l'ouverture d'un fichier qui n'existe pas.

Le programme exécute arrêtera si une erreur se produit, nous avons besoin d'utiliser certaines méthodes pour éviter les erreurs de détection, empêchant ainsi la sortie du programme.

Perl fournit une erreur multi-traitement fait dans la méthode, nous avons introduit un par un.


if

si l'instruction peut déterminer la valeur de retour de la déclaration, les exemples sont les suivants:

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

Programme variable $! Retourné un message d'erreur. Nous pouvons également simplifier le code ci-dessus pour le code suivant:

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

sauf si la fonction

à moins que la fonction et si , au contraire, que lorsque l'expression renvoie false sera mis en œuvre comme suit:

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

àmoins que la déclaration lorsque vous souhaitez définir une erreur de rappel est très utile.Ce que je peux aussi être abrégé que le code ci-dessus:

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

Le message d'erreur ci-dessus que lorsque les circonstances changent sortie d'erreur de répertoire.


opérateur ternaire

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

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

Les exemples ci-dessus, nous utilisons l'opérateur ternaire pour déterminer la valeur de hachage existe.

Exemples inclus une expression de deux valeurs, le formatest :? Une valeur de l'expression: Value II.


fonction garde

avertir fonction est utilisée pour déclencher un message d'avertissement, aucune autre opération, la sortie STDERR (fichier de sortie standard), habituellement utilisé pour demander à l'utilisateur:

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

fonction die

fonction die est similaire à prévenir, mais ce sera une sortie. Habituellement, avec des messages d'erreur de sortie de bruit fort:

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

module Carp

Dans le script Perl, méthode couramment utilisée consiste à utiliser le rapport d'erreur avertir () ou mourir () pour générer des rapports ou des erreurs. Pour le module Carp, ce qui peut générer des messages pour fournir des niveaux supplémentaires de contrôle, en particulier à l'intérieur du module.

module Carp standard fournit une warn () et meurent () est une alternative, ils fournissent plus d'informations dans la fourniture de mauvais positionnement, et plus convivial. Lorsqu'il est utilisé dans un module, le message d'erreur contient le nom du module et le numéro de ligne.

fonction de la carpe

fonction de la carpe peut émettre des informations de suivi sur le programme, semblable à avertir la fonction sera normalement envoyer les informations à STDERR:

package T;

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

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

Dans le script appelle la procédure suivante:

use T;
function();

Le programme ci-dessus, le résultat est:

Error in module! at test.pl line 4

fonction cot

cot () et warn () est similaire, à condition de l'erreur à la pile trace arrière.

package T;

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

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

Dans le script appelle la procédure suivante:

use T;
function();

Le programme ci-dessus, le résultat est:

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

fonction croassement

croasser () et die (), comme on peut terminer script.

package T;

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

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

Dans le script appelle la procédure suivante:

use T;
function();

Le programme ci-dessus, le résultat est:

Error in module! at test.pl line 4

fonction confesses

confesses () et die () est similaire, mais offre de l'erreur de la pile trace arrière.

package T;

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

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

Dans le script appelle la procédure suivante:

use T;
function();

Le programme ci-dessus, le résultat est:

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