die関数:エラーメッセージを出力しPerlスクリプトを終了する

Perl で用意されている組み込み関数の一つである die 関数の使い方です。 die 関数はエラーが発生した場合にプログラムを終了させる場合に使用し、エラーメッセージを出力し Perl スクリプトを終了します。

(Last modified: )

die関数の書式と基本的な使い方

die 関数は次のように定義されています。

die
die([LIST])
引数に指定した値を標準エラー出力に出力し、実行しているPerlスクリプトを終
了します。

パラメータ:
  LIST  標準エラー出力に出力するリスト
戻り値:

省略可能な 1 番目の引数にはエラーとして出力するリストを指定します。エラーを出力後に特殊変数 $! に格納されているシステムエラーの番号をスタータスコードとして exit 関数を呼び出して終了します。

もしも $! に格納されている値が 0 の場合には、特殊変数 $? の値を使い $>>8 の結果をスタータスコードとして使用します。さらに $>>8 が 0 の場合には数値の 255 を使用します。

具体的には次のように記述します。

die("Error");

上記のように引数が改行で終わらない場合には、プログラム名と行番号(及び場合によっては入力行)が自動的に表示されます。形式としては「プログラム名 line 行番号」の形式です。 例えば「Error xxx.pl line 15」のように表示されます。

行番号を表示したくない場合には次のように引数を改行で終了して下さい。

die("Error\n");

またステータスコードとして使用される特殊変数 $! はシステムに対する要求を行った時に発生したエラーを保存しています。この変数は数値として扱うとエラーコードを返しますが、文字列として扱うとエラーメッセージを取得できます。

その為、 die 関数の引数の中に $! を含めておく事でエラーメッセージを合わせて出力させることができます。

die("Error $!");

ただしシステムに対する要求が失敗した時以外で $! を参照しても意味のあるメッセージは含まれていませんので注意して下さい。

サンプルコード

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

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

open(TEST, "test.txt") or die("エラー発生[$!]");
close(TEST);

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

perl sample.pl

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

die関数:エラーメッセージを出力しPerlスクリプトを終了する(1)

ファイルを開こうとしますがファイルが存在しないため die 関数が実行されます。引数に改行が含まれていないので自動的にメッセージの最後にプログラム名と行番号が付けられています。

ではサンプルを少し修正して die 関数の引数に指定するリストの最後に改行文字を加えてみます。

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

open(TEST, "test.txt") or die("エラー発生[$!]\n");
close(TEST);

プログラムを実行すると次のように実行結果が表示されます。

die関数:エラーメッセージを出力しPerlスクリプトを終了する(2)

今度はメッセージの最後にプログラム名と行番号が付けられませんでした。

-- --

Perl で用意されている組み込み関数の一つである die 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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