Perlのエラー処理
プログラムは、必ずしもそのような存在しないファイルを開くなどのエラー、各種のに遭遇し、実行されています。
エラーが発生した場合に停止します実行しているプログラムは、我々は、このようにプログラムが終了するのを防止、誤検出を回避するために、いくつかのメソッドを使用する必要があります。
Perlはこの方法で作られたマルチ処理エラーを提供し、我々は一つ一つを導入しました。
if文
声明文の戻り値を決定することができる場合は、次のように例を示します。
if(open(DATA, $file)){ ... }else{ die "Error: 无法打开文件 - $!"; }
プログラムの変数$!エラーメッセージが返されます。 我々はまた、次のコードに上記のコードを簡素化することができます。
open(DATA, $file) || die "Error: 无法打开文件 - $!";
機能しない限り、
機能しない限り 、次のように反して、式がfalseを返した場合にのみ実施される場合:
unless(chdir("/etc")){ die "Error: 无法打开目录 - $!"; }
リマインダーエラーを設定するステートメントがない限り 、非常に有用です。 私はまた、上記のコードと略称することができます。
die "Error: 无法打开目录!: $!" unless(chdir("/etc"));
状況は、ディレクトリのエラー出力を変更する唯一の上記のエラーメッセージ。
三項演算子
次は、三項演算子の簡単な例です:
print(exists($hash{value}) ? '存在' : '不存在',"\n");
我々は三項演算子を使用する上記の例では、ハッシュ値が存在するかを決定します。
バリューII:例としては、形式は式の値を:?され、2つの値の表現が含まれていました。
機能を警告
警告機能は、警告メッセージ、他の操作を、通常はユーザーに促すために使用さSTDERR(標準出力ファイル)への出力をトリガするために使用されます。
chdir('/etc') or warn "无法切换目录";
ダイ機能
ダイ機能は、警告に似ていますが、それは終了となります。 通常、大きな音の出力エラー・メッセージで:
chdir('/etc') or die "无法切换目录";
カープモジュール
Perlスクリプトでは、一般的に使用される方法は、レポートやエラーを生成するために()エラー報告に警告()またはダイ機能を使用することです。 特にモジュール内、制御の追加レベルを提供するために、メッセージを生成することができ鯉モジュールについて。
標準カープモジュールは、()関数は、彼らが間違った位置合わせの提供でより多くの情報を提供し、より親しみやすい、代替で警告()と死ぬ用意されています。 モジュールで使用される場合、エラーメッセージは、モジュール名と行番号を含んでいます。
鯉機能
鯉機能は、出力は通常、STDERRに情報を送信する機能を警告する同様のプログラムに関する情報を追跡することができます。
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { carp "Error in module!"; } 1;
このスクリプトでは、次の手順を呼び出します。
use T; function();
上記のプログラムは、出力は次のようになります。
Error in module! at test.pl line 4
あほう機能
あほう()と警告()似ているが、バックスタックでトレースがエラーを与えました。
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp qw(cluck); sub function { cluck "Error in module!"; } 1;
このスクリプトでは、次の手順を呼び出します。
use T; function();
上記のプログラムは、出力は次のようになります。
Error in module! at T.pm line 9 T::function() called at test.pl line 4
しわがれ声機能
スクリプトを終えることができるよう、croakし()およびダイ()。
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { croak "Error in module!"; } 1;
このスクリプトでは、次の手順を呼び出します。
use T; function();
上記のプログラムは、出力は次のようになります。
Error in module! at test.pl line 4
告白機能
告白()およびダイ()は似ていますが、スタックトレースバックのエラーから提供しています。
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { confess "Error in module!"; } 1;
このスクリプトでは、次の手順を呼び出します。
use T; function();
上記のプログラムは、出力は次のようになります。
Error in module! at T.pm line 9 T::function() called at test.pl line 4