「§8.1 ファイルのオープンとクローズ」で、ファイルのオープンとクローズについて見てきました。 しかし、うっかりファイル名を間違えて、存在しないファイルを開こうとしてしまったり、パーミッション(ファイルの実行権)が誤っていてファイルが開けなかったりということはよくあることです(僕だけかな(^^;)。 でもPerlはとても寛大な言語なので、ファイルがオープンできなかったときにもエラーは出ません。 そこでこのような状況を避けるために、この節ではファイルオープンエラーの処理の方法として、warn( )とdie( )という2つの関数について紹介します。
die関数は、引数として任意の文字列を受けとって、その文字列を標準エラー出力(デフォルトではコンソール画面)に出力してスクリプトを強制終了します。
open(IN, "can.dat")
or die("can.dat can't be opened.\n";
while (<IN>) {
print;
}
close(IN);
print "The program is continued executing.";
上のスクリプトをerror.plという名前で保存して実行すると、can.datが存在しない場合には
can.dat can't be opened.
と出力してスクリプトは強制終了し、それ以降のスクリプトは実行されません。 また、エラーメッセージの最後の\nを除いて、
open(IN, "can.dat")
or die("can.dat can't be opened.";
とすると、スクリプト名とエラーが出た行番号が出力されます。
can.dat can't be opened. at error.pl line 1.
die関数が、エラーメッセージを出力してスクリプトを強制終了したのに対し、warn関数はエラーメッセージを出力したあともスクリプトを続行します。 次のスクリプトは上のスクリプトのdieをwarnに変えただけの物です。
open(IN, "can.dat")
or warn("can.dat can't be opened.\n";
while (<IN>) {
print;
}
close(IN);
print "The program is continued executing.";
すると上のスクリプトからの出力は、
can.dat can't be opened.
The program is continued executing.
となります。 warn関数の場合にも、エラーメッセージの最後の改行文字を除くことで、スクリプト名とエラーが出た行番号を出力することが出来ます。
この節ではファイルオープンエラーの処理方法について見てきました。 die関数は、ファイルが開けないということがスクリプトの致命的なエラーになる場合に使い、warn関数は、ファイルが開けなくても別のコードでカバーできるような場合に使うといいと思います。 どちらにしても、この処理は必ずつけるように習慣付けてしまう方がいいと思います。 次の節ではファイルテストについてお話します。