2016-11-14 26 views
1

上記のコードを実行すると、出力は2つになります。 Perlが通訳者であることを理解する限り、foo(mark1)が呼び出されると、最初に印刷されるべきではありません.foo()(mark2)が呼び出されると、2つが印刷される必要があります。しかし、なぜ2人が両方の時間に印刷されているのですか、どうか説明してください。Perl関数呼び出し

+0

コンパイルしていませんか? – Carcigenicate

+4

'//'はPerlのコメントではありません。コメントを表すには '# 'を使わなければなりません。 – simbabque

+0

定期的に 'use warnings'と' use strict'をすべてのPerl 5ファイルの先頭に必ず追加することをお勧めします。 –

答えて

8

Perlは、あなたが理解できるように解釈された言語ではないためです。 Perlコードは実行前にコンパイルされます。コンパイルのステップはありませんが、コンパイラはプログラムの実行を開始する前に、すべてのソースコードを解析してコンパイルします。

あなたのコード内use warningsを含めていた場合は、その後、次の警告(最初の関数呼び出しから前出力)を見ているだろう:

サブルーチンfooがFUNCラインで再定義12

これは、何が起こっているかをかなり明確にします。

ああ、ところで - //はPerlのコメントではありません。あなたは#が欲しかったです。

関連する問題