3
次のプログラムはevalへの2回目の呼び出しで停止します。それは期待されていますか?私はperldoc -f evalを読んで、印刷 "2:..."の出力が表示されないことに驚いています。ブロックなしでevalを呼び出すと、このPerlプログラムが終了するのはなぜですか?
eval {die("The curly braces seem to rescue me! Life moves on")};
print "1: [email protected]\n";
eval die("Program actually terminates here! Subsequent prints are not shown");
print "2: [email protected]\n";
クエンティン、ありがとう。私は、一般的には、致命的なエラーを捕捉することを含め、常にEXPRからの結果を得ると誤解していました。明らかに、それはstr evalの場合ではありません。 – Ltf4an
私はperldoc -f evalから次の段落に気付きました: "構文エラーまたは実行時エラーがある、またはdie文が実行された場合、evalはスカラーコンテキストでundefを返し、リストコンテキストでは空のリストを返します..."なぜなら、eval()(strまたはblock)の後には常にプログラムを続けるべきだと示唆しているように見えるからです。私はここでも何かを誤解していますか? – Ltf4an
@ Ltf4an - (1)式は通常通り実行されます(2)戻り値(文字列であることが期待されます)は 'eval'に渡されます。 (3) 'eval'はその文字列を評価します。あなたが引用したルールは、ステップ3で適用されます。 – Quentin