evalではブロック内部でコードを実行するため、構文エラーや実行エラーが発生した場合にそれを捕捉できます。たとえば、
my $a = 1/0; # Illegal division by zero として処理が終了
のように実行エラーが発生すると処理が終了しますが、
eval { my $a = 1/0; };
のようにevalを用いると処理を継続できます。このときエラーメッセージが$@に格納されるため、それでエラー内容を確認できます。
eval {
my $a = 1/0;
};
print $@; # Illegal division by zero と出力
一方でエラーがない場合には$@は空文字列となるため、それを調べればエラーに応じた処理をできます。
eval { # エラーを発生するかも知れない処理 }; if( $@ ) { # エラーが発生した場合の処理 }
例外を発生させられます。
die LISTdie - perldoc.perl.org
die 'ERROR';
die;
引数に文字列を指定した場合は、その文字列が標準エラー出力 (STDERR) に送られます。指定しない場合は$@の値が用いられますが、それが空文字列ならば"Died"が代わりに送られます。