例外を発生させる
die
は例外を発生させ、失敗を示す終了コードを伴って Perl スクリプトを終了します。
そして、その例外は STDERR
に出力されます。
例外の内容は LIST に指定します。複数の文字列を指定する場合はカンマ区切りで指定しますが、
例外出力の際にはそれらは連結されます。
my $file = 'dummy.txt';
open my $fh, '<', $file or die "Failed to open a file: ", $file, "\n";
もし eval
の中で die
が実行されると、
eval
は未定義値とともに終了され、その例外は $@ に格納されます。
この場合は、die
によって Perl スクリプトは強制的に終了することはありません。
my $file = 'dummy.txt';
eval { open my $fh, '<', $file or die "Failed to open a file: ", $file, "\n"; };
if ($@) {
print $@;
}
上記の 2 つのコードはいずれも次のように出力されます。
Failed to open a file: dummy.txt
しかし、最後に改行 (\n
) を出力しない場合は、エラー箇所を表す行番号が付加されます。
open my $fh, '<', $file or die "Failed to open a file: ", $file;
Failed to open a file: dummy.txt at sample.pl line 16.
もし LIST に何も指定しなかった場合、$@ に何もセットされていなければ次のように出力されます。
Died at sample.pl line 17.
しかし、以前に何かしらの理由で $@ にエラー内容がセットされていた場合は、
改行に加え ...propagated
が付加されます。
eval { open my $fh, '<', $file or die "Failed to open a file: ", $file, "\n"; };
if ($@) {
die;
}
Failed to open a file: dummy.txt
...propagated at sample.pl line 14.