説明
- エラー文字列の値を標準エラー出力に出力し,ステータス・コード$!でプログラムを終了します。
- エラー文字列を省略すると$@が代わりに使われます。$@に値がない場合は'Died'が代わりに使われます。
- evalの内側で使用すると,プログラムは終了せずその場でevalが終了します。この時標準エラー出力にメッセージは出力されず,メッセージは$@にセットされます。
使用例
ファイルdummyfileの内容を表示する。ファイルが開けない場合,エラー終了する
#!/usr/bin/perl
use strict;
use warnings;
my $filename = 'dummyfile';
open my $fh, "<", $filename or die "$!:$filename";
print <$fh>;
close $fh;
ファイルdummyfileの内容を表示する。ファイルが開けない場合、自分でエラー処理を行う
#!/usr/bin/perl
use strict;
use warnings;
eval {
my $filename = 'dummyfile';
open my $fh, "<", $filename or die "$!:$filename";
print <$fh>;
close $fh;
};
if ($@) {
print "Error!\n";
print $@;
exit 1;
}
exit 0;
ファイルdummyfileの内容を表示する。ファイルが開けない場合、エラー終了する(Carp::confessを使用してスタック・トレース付きのエラーを発生させる)
#!/usr/bin/perl
use strict;
use warnings;
use Carp;
my $filename = 'dummyfile';
show_file($filename);
sub show_file {
my $filename = shift;
open my $fh, "<", $filename or confess "$!:$filename";
print <$fh>;
close $fh;
}
※dieの代わりにCarp::confessでスタック・トレース付きのエラーを発生させることができます。
ファイルdummyfileの内容を表示する。ファイルが開けない場合,例外を発生させる。その後例外をキャッチして例外処理を行う
#!/usr/bin/perl
use strict;
use warnings;
use Exception::Class;
eval {
my $filename = 'dummyfile';
open my $fh, "<", $filename or Exception::Class
::Base->throw(error => $filename);
print <$fh>;
close $fh;
};
if (my $e = Exception::Class->caught()) {
if (ref $e) {
printf "Error! package[%s] file[%s] line[%d]\n",
$e->package, $e->file, $e->line;
} else {
print $@;
}
exit 1;
}
exit 0;
※例外処理を行う場合、Exception::Classを使うとより詳しい情報を収集することができます。