ファイルのオープンに失敗したときにプログラムを終了する

ファイルをオープンしようとしたときに、何らかの理由によってエラーが発生する場合があります。ここでは Perl のプログラムからファイルに失敗したときにプログラムを終了する手順について解説します。

(Last modified: )

ファイルオープン時のエラー処理

open 関数を使ってファイルを開こうとして失敗した場合、プログラムの実行を終了するには die 関数を使ってプログラムを終了させる方法がよく使われます。

die 関数を実行すると、関数の引数に指定した値を標準エラー出力に出力し、実行している Perl のプログラムが終了します。 die 関数の詳しい使い方は「die関数:エラーメッセージを出力しPerlスクリプトを終了する」を参照して下さい)。

open 関数は失敗すると未定義値(undef)を返しますので次のように if 文を使って記述することができます。

if (open(DATAFILE, "data.txt")){
  print "data.txtを開く事に成功しました\n";
}else{
  die("error :$!");
}

または Perl では or 演算子を使って次のように記述する方法もよく使われます。

open(DATAFILE, "data.txt") or die("error :$!");

or 演算子は左辺の式をまず評価します。左辺が真の場合は右辺は評価せずに次の行へ進みますが、左辺が偽の場合は右辺を評価します。その為、上記の式は左辺に記述された open 関数をまず実行し結果を評価します。 open 関数が成功すればそのまま次の行へ進みますが、 open 関数が失敗し undef を返してきた場合には undef は偽(false)として扱われますので右辺を実行します。結果的に open 関数が失敗した場合にだけ die 関数が実行されることになります。

いずれか使いやすい方を利用されてください。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

open(DATAFILE, "data.txt") or die("error :$!");
print "data.txtを開く事に成功しました\n";
close(DATAFILE);

open(DATAFILE, "data1.txt") or die("error :$!");
print "data1.txtを開く事に成功しました\n";
close(DATAFILE);

print "プログラムを終了しました。\n";

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

ファイルのオープンに失敗したときにプログラムを終了する(1)

今回はあらかじめ sample.pl ファイルが設置してあるディレクトリに data.txt ファイルを設置してあります。 data.txt ファイルは存在するファイルなので、ファイルのオープンとクローズは問題なく成功しますが、 data1.txt ファイルは存在しないためオープンに失敗します。オープンに失敗した場合は die 関数が実行されてエラーを出力したあとで Perl のプログラムはそこで終了します。

-- --

Perl のプログラムからファイルに失敗したときにプログラムを終了する手順について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。