2012-03-15 7 views
1

このオーバー私の理解がどうなるかコンパイル時に反応して、時間を実行します。どのようにperlが

中にエラーを1つのファイルを解析することができることから、キープperlのあるコンパイル時間;セミコロンがありません。

ランタイムエラーは、コードが実行されるまで検出されないエラーです。ゼロ除算エラーや未定義のサブルーチンへの呼び出しなどがあります。

perlはインタープリタ言語であるため、コードまたはスクリプト全体が一度コンパイルされてから実行されるか、各行ごとにコンパイルされて実行されます。

誰でもこのことを私に知らせてください。

答えて

0

Perlはと解釈され、言語です。つまり、スクリプトを開始しようとするたびに、コンパイル段階と実行段階の両方が順番に実行されます。一方言語(C、パスカル、等)は、これら二つの相を分離し、典型的には中間相が最終に一緒とライブラリオブジェクトファイルを結合している、を連結と呼ばれているコンパイル

実行可能ファイル。いずれか言語仕様がどのように厳密に依存して、相、又は連結相をコンパイル中に発生する可能性が未定義の機能を検出するコンパイル言語で

、。元のCの呼び出しでは、未定義の関数はリンカーによって検出されますが、C++ではコンパイラーによって検出されます。

Javaのような言語の中には、別々のコンパイルと実行フェーズがありますが、コンパイルは実際には中間の「バイトコード」になります。です。機械)。

厳密に言えば、Perlは中間バイトコードも使用しますが、フェーズの分離はほとんど見えません。

+0

Javaは、中間表現を解釈するPerlのモデルに従います。 – daxim

+0

実際には@daximですが、Perlでは別の段階として公開されているJavaではそうではありません。 – Alnitak

+0

フェーズの分離は不可視ではありません。それは複雑です_。 'BEGIN {}'ブロックを試してください。 –

2

プログラムはoptreeに一度コンパイルされます。 optreeはトラバースされて実行されます。

実行時に、追加のコンパイルフェーズが必要になることがあります。通常の犯人は、文字列evalとコードユニットの遅延/動的ロードです。 require,do

関連する問題