【Perl】die関数でプログラムを中断する(open or die解説)

Perl

Perlで予期しないエラーや条件を検出したときに処理を中断する場合にdie関数を使用します。die関数を使用すると、エラーメッセージを出力し、スクリプトの実行を直ちに終了させることができます。

サンプルコード

以下は、ファイルオープンを試み、失敗した場合にエラーメッセージを表示して終了する例です。

#!/usr/bin/perl
use strict;
use warnings;

# ファイル名を変数に格納
my $filename = "example.txt";

# ファイルをオープン。失敗した場合はエラーメッセージを出力して終了(1)
open(FILE, '<', $filename) or die "ファイル '$filename' をオープンできませんでした: $!";

# ファイルの内容を読み込み
while (my $row = <FILE>) {
    chomp $row;
    print "$row\n";
}

# ファイルハンドルをクローズ
close(FILE);

(1)ファイルをオープンする処理です。ファイルオープン操作が成功した場合に真(0以外の値)を返し、失敗した場合に偽(0)を返します。or のあとに書かれているdie関数は、ファイルオープン操作が失敗した場合にのみ実行されます。(仕組みは後述)

実行結果

> perl sample.pl
ファイル 'example.txt' をオープンできませんでした: No such file or directory at sample.pl line 9.

die関数について

die関数は、エラーメッセージを出力してスクリプトの実行を強制終了させるための関数です。この関数は、スクリプトが回復不可能なエラーに遭遇した場合や、特定の条件を満たさない場合に実行を停止させる際に役立ちます。

使用例1:単独で使用

if( エラー条件 ) {
    die "エラーメッセージ";
}

使用例2:open or die 形式

open(FILE, '<', $filename) or die "ファイル '$filename' をオープンできませんでした: $!";

open or die 形式が機能する仕組み

open関数直後の or 演算子は if 文のような働きをします。

ファイルオープンに成功した場合、左辺が真(0以外の値)となるため、or 演算子の演算結果は右辺の値に関わらず常に真となる。このため右辺の評価は行われず、結果としてdie関数は実行されません。

ファイルオープンに失敗した場合、左辺が偽(0)となるため、or 演算子の演算結果は右辺を確認しないと決まらない。このため、右辺の評価が行われ、その結果としてdie関数が実行されます。

die関数の書き方:関数形式 vs. 文字列直後形式

Perlにおけるdieの使用法に関しては、関数形式(die(“メッセージ”);)と文字列を直後に書く形式(die “メッセージ”;)の2通りがあります。この書き方のどちらを使用するかは個人の好みやコーディングスタイルのガイドラインに依存します。どちらの形式もPerlの文法に準拠しており、機能的には差異がありません。

タイトルとURLをコピーしました