広告
広告
EXPR が Perl のプログラムであるかのように解析し、実行する関数です。その時点の Perl プログラムの脈絡の中で実行されますので、変数の設定、サブルーティンやフォーマットの定義はその後も残っています。返される値は、サブルーティン同様に最後に評価した式の値かreturn文の値となります。構文エラーや実行エラーが発生するかdie() 文が実行されるとeval() の値として未定義値が返され、$@ にエラーメッセージが設定されます。エラーがなければ、$@ は空文字列であることが保証されます。
EXPR を省略すると、$_ を評価します。最後のセミコロンは省略可能です。eval() は、致命的エラーとなるようなものをトラップすることができますので、(dbmopen() や symlink() といった)特定の機能がインプリメントされているかを、調べるために使うこともできます。
die 演算子が例外を発生させるものとすれば、これはまたPerl の例外捕捉機能と捉えることもできます。実行するコードが変わらないのであれば毎回多量の再コンパイルすることなしに実行時エラーのトラップを行なうために、eval-BLOCK 形式を使うことができます。エラーがあれば $@ に返されます。
# 0 除算を致命的でなくす eval { $answer = $a / $b; }; warn $@ if $@; # 効率的ではないが同じ eval '$answer = $a / $b'; warn $@ if $@; # コンパイル時エラー eval { $answer = }; # 実行時エラー eval '$answer ='; # $@ を設定
広告